ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0FEQy1MSDctVG91Y2hzY3JlZW4gYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9BREMtTEg3LVRvdWNoc2NyZWVuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNmEyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9BREMtTEg3LVRvdWNoc2NyZWVuCkBAIC0wLDAgKzEsNjEgQEAKK1JFQURNRSBvbiB0aGUgQURDL1RvdWNoc2NyZWVuIENvbnRyb2xsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIExINzk1MjQgYW5kIExIN0E0MDQgaW5jbHVkZSBhIGJ1aWx0LWluIEFuYWxvZyB0byBEaWdpdGFsCitjb250cm9sbGVyIChBREMpIHRoYXQgaXMgdXNlZCB0byBwcm9jZXNzIGlucHV0IGZyb20gYSB0b3VjaHNjcmVlbi4KK1RoZSBkcml2ZXIgb25seSBpbXBsZW1lbnRzIGEgZm91ci13aXJlIHRvdWNoIHBhbmVsIHByb3RvY29sLgorCitUaGUgdG91Y2hzY3JlZW4gZHJpdmVyIGlzIG1haW50ZW5hbmNlIGZyZWUgZXhjZXB0IGZvciB0aGUgcGVuLWRvd24gb3IKK3RvdWNoIHRocmVzaG9sZC4gIFNvbWUgcmVzaXN0aXZlIGRpc3BsYXlzIGFuZCBib2FyZCBjb21iaW5hdGlvbnMgbWF5CityZXF1aXJlIHR1bmluZyBvZiB0aGlzIHRocmVzaG9sZC4gIFRoZSBkcml2ZXIgZXhwb3NlcyBzb21lIG9mIGl0J3MKK2ludGVybmFsIHN0YXRlIGluIHRoZSBzeXMgZmlsZXN5c3RlbS4gIElmIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZAord2l0aCBpdCwgQ09ORklHX1NZU0ZTLCBhbmQgc3lzZnMgaXMgbW91bnRlZCBhdCAvc3lzLCB0aGVyZSB3aWxsIGJlIGEKK2RpcmVjdG9yeQorCisgIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hZGMtbGg3LjAKKworY29udGFpbmluZyB0aGVzZSBmaWxlcy4KKworICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgIDQwOTYgSmFuICAxIDAwOjAwIHNhbXBsZXMKKyAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICA0MDk2IEphbiAgMSAwMDowMCB0aHJlc2hvbGQKKyAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICA0MDk2IEphbiAgMSAwMDowMCB0aHJlc2hvbGRfcmFuZ2UKKworVGhlIHRocmVzaG9sZCBpcyB0aGUgY3VycmVudCB0b3VjaCB0aHJlc2hvbGQuICBJdCBkZWZhdWx0cyB0byA3NTAgb24KK21vc3QgdGFyZ2V0cy4KKworICAjIGNhdCB0aHJlc2hvbGQKKyA3NTAKKworVGhlIHRocmVzaG9sZF9yYW5nZSBjb250YWlucyB0aGUgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUKK3RocmVzaG9sZC4gIFZhbHVlcyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2Ugd2lsbCBiZSBzaWxlbnRseSBpZ25vcmVkLgorCisgICMgY2F0IHRocmVzaG9sZF9yYW5nZQorICAwIDEwMjMKKworVG8gY2hhbmdlIHRoZSB0aHJlc2hvbGQsIHdyaXRlIGEgdmFsdWUgdG8gdGhlIHRocmVzaG9sZCBmaWxlLgorCisgICMgZWNobyA1MDAgPiB0aHJlc2hvbGQKKyAgIyBjYXQgdGhyZXNob2xkCisgIDUwMAorCitUaGUgc2FtcGxlcyBmaWxlIGNvbnRhaW5zIHRoZSBtb3N0IHJlY2VudGx5IHNhbXBsZWQgdmFsdWVzIGZyb20gdGhlCitBREMuICBUaGVyZSBhcmUgMTIuICBCZWxvdyBhcmUgdHlwaWNhbCBvZiB0aGUgbGFzdCBzYW1wbGVkIHZhbHVlcyB3aGVuCit0aGUgcGVuIGhhcyBiZWVuIHJlbGVhc2VkLiAgVGhlIGZpcnN0IHR3byBhbmQgbGFzdCB0d28gc2FtcGxlcyBhcmUgZm9yCitkZXRlY3Rpbmcgd2hldGhlciBvciBub3QgdGhlIHBlbiBpcyBkb3duLiAgVGhlIHRoaXJkIHRocm91Z2ggc2l4dGggYXJlCitYIGNvb3JkaW5hdGUgc2FtcGxlcy4gIFRoZSBzZXZlbnRoIHRocm91Z2ggdGVudGggYXJlIFkgY29vcmRpbmF0ZQorc2FtcGxlcy4KKworICAjIGNhdCBzYW1wbGVzCisgIDEwMjMgMTAyMyAwIDAgMCAwIDUzMCA1MjkgNTMwIDUyOSAxMDIzIDEwMjMKKworVG8gZGV0ZXJtaW5lIGEgcmVhc29uYWJsZSB0aHJlc2hvbGQsIHByZXNzIG9uIHRoZSB0b3VjaCBwYW5lbCB3aXRoIGFuCithcHByb3ByaWF0ZSBzdHlsdXMgYW5kIHJlYWQgdGhlIHZhbHVlcyBmcm9tIHNhbXBsZXMuCisKKyAgIyBjYXQgc2FtcGxlcworICAxMDIzIDY3NiA5MiAxMDMgMTAxIDEwMiA4NTUgOTE5IDkyMiA5MjIgMTAyMyA2NzkKKworVGhlIGZpcnN0IGFuZCBlbGV2ZW50aCBzYW1wbGVzIGFyZSBkaXNjYXJkZWQuICBUaHVzLCB0aGUgaW1wb3J0YW50Cit2YWx1ZXMgYXJlIHRoZSBzZWNvbmQgYW5kIHR3ZWxmdGggd2hpY2ggYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZQorcGVuIGlzIGRvd24uICBXaGVuIGJvdGggYXJlIGJlbG93IHRoZSB0aHJlc2hvbGQsIHRoZSBkcml2ZXIgcmVnaXN0ZXJzCit0aGF0IHRoZSBwZW4gaXMgZG93bi4gIFdoZW4gZWl0aGVyIGlzIGFib3ZlIHRoZSB0aHJlc2hvbGQsIGl0CityZWdpc3RlcnMgdGhlbiBwZW4gaXMgdXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9MQ0RQYW5lbHMgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9MQ0RQYW5lbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxYjIxYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0xDRFBhbmVscwpAQCAtMCwwICsxLDU5IEBACitSRUFETUUgb24gdGhlIExDRCBQYW5lbHMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHNldmVyYWwgTENEIHBhbmVscywgYXZhaWxhYmxlIGZyb20gTG9naWMgUEQsCithcmUgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UuICBUaGlzIFJFQURNRSB3aWxsIGhlbHAgeW91Cit1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYW5kIGdpdmUgeW91IHNvbWUgZ3VpZGFuY2UgZm9yCithZGRpbmcgc3VwcG9ydCBmb3Igb3RoZXIgcGFuZWxzIGlmIHlvdSB3aXNoLgorCisKK2xjZC1wYW5lbHMuaAorLS0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIG5vIHdheSwgYXQgcHJlc2VudCwgdG8gZGV0ZWN0IHdoaWNoIHBhbmVsIGlzIGF0dGFjaGVkIHRvIHRoZQorc3lzdGVtIGF0IHJ1bnRpbWUuICBUaHVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyBzdGF0aWMuICBUaGUgZmlsZQorYXJjaC9hcm0vbWFjaC1sZDdhNDB4L2xjZC1wYW5lbHMuaCAob3Igc2ltaWxhcikgZGVmaW5lcyBhbGwgb2YgdGhlCitwYW5lbCBzcGVjaWZpYyBwYXJhbWV0ZXJzLgorCitJdCBzaG91bGQgYmUgcG9zc2libGUgZm9yIHRoaXMgZGF0YSB0byBiZSBzaGFyZWQgYW1vbmcgc2V2ZXJhbCBkZXZpY2UKK2ZhbWlsaWVzLiAgVGhlIGN1cnJlbnQgbGF5b3V0IG1heSBiZSBpbnN1ZmZpY2llbnRseSBnZW5lcmFsLCBidXQgaXQgaXMKK2FtZW5hYmxlIHRvIGltcHJvdmVtZW50LgorCisKK1BJWEVMX0NMT0NLCistLS0tLS0tLS0tLQorCitUaGUgcGFuZWwgZGF0YSBzaGVldHMgd2lsbCBnaXZlIGEgcmFuZ2Ugb2YgYWNjZXB0YWJsZSBwaXhlbCBjbG9ja3MuCitUaGUgZnVuZGFtZW50YWwgTENEQ0xLIGlucHV0IGZyZXF1ZW5jeSBpcyBkaXZpZGVkIGRvd24gYnkgYSBQQ0QKK2NvbnN0YW50IGluIGZpZWxkICcudGltMicuICBJdCBtYXkgaGFwcGVuIHRoYXQgaXQgaXMgaW1wb3NzaWJsZSB0byBzZXQKK3RoZSBwaXhlbCBjbG9jayB3aXRoaW4gdGhpcyByYW5nZS4gIEEgY2xvY2sgd2hpY2ggaXMgdG9vIHNsb3cgd2lsbAordGVuZCB0byBmbGlja2VyLiAgRm9yIHRoZSBoaWdoZXN0IHF1YWxpdHkgaW1hZ2UsIHNldCB0aGUgY2xvY2sgYXMgaGlnaAorYXMgcG9zc2libGUuCisKKworTUFSR0lOUworLS0tLS0tLQorCitUaGVzZSB2YWx1ZXMgbWF5IGJlIGRpZmZpY3VsdCB0byBnbGVhbiBmcm9tIHRoZSBwYW5lbCBkYXRhIHNoZWV0LiAgSW4KK3RoZSBjYXNlIG9mIHRoZSBTaGFycCBwYW5lbHMsIHRoZSB1cHBlciBtYXJnaW4gaXMgZXhwbGljaXRseSBjYWxsZWQKK291dCBhcyBhIHNwZWNpZmljIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZSB0b3Agb2YgdGhlIGZyYW1lLiAgVGhlCitvdGhlciB2YWx1ZXMgbWF5IG5vdCBtYXR0ZXIgYXMgbXVjaCBhcyB0aGUgcGFuZWxzIHRlbmQgdG8KK2F1dG9tYXRpY2FsbHkgY2VudGVyIHRoZSBpbWFnZS4KKworCitTeW5jIFNlbnNlCistLS0tLS0tLS0tCisKK1RoZSBzZW5zZSBvZiB0aGUgaHN5bmMgYW5kIHZzeW5jIHB1bHNlcyBtYXkgYmUgY2FsbGVkIG91dCBpbiB0aGUgZGF0YQorc2hlZXQuICBPbiBvbmUgcGFuZWwsIHRoZSBzZW5zZSBvZiB0aGVzZSBwdWxzZXMgZGV0ZXJtaW5lIHRoZSBoZWlnaHQKK29mIHRoZSB2aXNpYmxlIHJlZ2lvbiBvbiB0aGUgcGFuZWwuICBNb3N0IG9mIHRoZSBTaGFycCBwYW5lbHMgdXNlCituZWdhdGl2ZSBzZW5zZSBzeW5jIHB1bHNlcyBzZXQgYnkgdGhlIFRJTTJfSUhTIGFuZCBUSU0yX0lWUyBiaXRzIGluCisnLnRpbTInLgorCisKK1BlbCBMYXlvdXQKKy0tLS0tLS0tLS0KKworVGhlIFNoYXJwIGNvbG9yIFRGVCBwYW5lbHMgYXJlIGFsbCBjb25maWd1cmVkIGZvciAxNiBiaXQgZGlyZWN0IGNvbG9yCittb2Rlcy4gIFRoZSBhbWJhLWxjZCBkcml2ZXIgc2V0cyB0aGUgcGVsIG1vZGUgdG8gNTY1IGZvciA1IGJpdHMgb2YKK2VhY2ggcmVkIGFuZCBibHVlIGFuZCA2IGJpdHMgb2YgZ3JlZW4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lub3RpZnkudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbm90aWZ5LnR4dAppbmRleCA2ZDUwMTkwLi41OWE5MTlmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lub3RpZnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5vdGlmeS50eHQKQEAgLTY5LDE3ICs2OSwxMzUgQEAKIAlpbnQgaW5vdGlmeV9ybV93YXRjaCAoaW50IGZkLCBfX3UzMiBtYXNrKTsKIAogCi0oaWlpKSBJbnRlcm5hbCBLZXJuZWwgSW1wbGVtZW50YXRpb24KKyhpaWkpIEtlcm5lbCBJbnRlcmZhY2UKIAotRWFjaCBpbm90aWZ5IGluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm90aWZ5X2RldmljZSBzdHJ1Y3R1cmUuCitJbm90aWZ5J3Mga2VybmVsIEFQSSBjb25zaXN0cyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHdhdGNoZXMgYW5kIGFuCitldmVudCBjYWxsYmFjay4KKworVG8gdXNlIHRoZSBrZXJuZWwgQVBJLCB5b3UgbXVzdCBmaXJzdCBpbml0aWFsaXplIGFuIGlub3RpZnkgaW5zdGFuY2Ugd2l0aCBhIHNldAorb2YgaW5vdGlmeV9vcGVyYXRpb25zLiAgWW91IGFyZSBnaXZlbiBhbiBvcGFxdWUgaW5vdGlmeV9oYW5kbGUsIHdoaWNoIHlvdSB1c2UKK2ZvciBhbnkgZnVydGhlciBjYWxscyB0byBpbm90aWZ5LgorCisgICAgc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCA9IGlub3RpZnlfaW5pdChteV9ldmVudF9oYW5kbGVyKTsKKworWW91IG11c3QgcHJvdmlkZSBhIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIGV2ZW50cyBhbmQgYSBmdW5jdGlvbiBmb3IgZGVzdHJveWluZwordGhlIGlub3RpZnkgd2F0Y2guCisKKyAgICB2b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsIHUzMiB3ZCwgdTMyIG1hc2ssCisgICAgCSAgICAgICAgICAgICAgdTMyIGNvb2tpZSwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGlub2RlICppbm9kZSkKKworCXdhdGNoIC0gdGhlIHBvaW50ZXIgdG8gdGhlIGlub3RpZnlfd2F0Y2ggdGhhdCB0cmlnZ2VyZWQgdGhpcyBjYWxsCisJd2QgLSB0aGUgd2F0Y2ggZGVzY3JpcHRvcgorCW1hc2sgLSBkZXNjcmliZXMgdGhlIGV2ZW50IHRoYXQgb2NjdXJyZWQKKwljb29raWUgLSBhbiBpZGVudGlmaWVyIGZvciBzeW5jaHJvbml6aW5nIGV2ZW50cworCW5hbWUgLSB0aGUgZGVudHJ5IG5hbWUgZm9yIGFmZmVjdGVkIGZpbGVzIGluIGEgZGlyZWN0b3J5LWJhc2VkIGV2ZW50CisJaW5vZGUgLSB0aGUgYWZmZWN0ZWQgaW5vZGUgaW4gYSBkaXJlY3RvcnktYmFzZWQgZXZlbnQKKworICAgIHZvaWQgZGVzdHJveV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCisKK1lvdSBtYXkgYWRkIHdhdGNoZXMgYnkgcHJvdmlkaW5nIGEgcHJlLWFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgaW5vdGlmeV93YXRjaAorc3RydWN0dXJlIGFuZCBzcGVjaWZ5aW5nIHRoZSBpbm9kZSB0byB3YXRjaCBhbG9uZyB3aXRoIGFuIGlub3RpZnkgZXZlbnQgbWFzay4KK1lvdSBtdXN0IHBpbiB0aGUgaW5vZGUgZHVyaW5nIHRoZSBjYWxsLiAgWW91IHdpbGwgbGlrZWx5IHdpc2ggdG8gZW1iZWQgdGhlCitpbm90aWZ5X3dhdGNoIHN0cnVjdHVyZSBpbiBhIHN0cnVjdHVyZSBvZiB5b3VyIG93biB3aGljaCBjb250YWlucyBvdGhlcgoraW5mb3JtYXRpb24gYWJvdXQgdGhlIHdhdGNoLiAgT25jZSB5b3UgYWRkIGFuIGlub3RpZnkgd2F0Y2gsIGl0IGlzIGltbWVkaWF0ZWx5CitzdWJqZWN0IHRvIHJlbW92YWwgZGVwZW5kaW5nIG9uIGZpbGVzeXN0ZW0gZXZlbnRzLiAgWW91IG11c3QgZ3JhYiBhIHJlZmVyZW5jZSBpZgoreW91IGRlcGVuZCBvbiB0aGUgd2F0Y2ggaGFuZ2luZyBhcm91bmQgYWZ0ZXIgdGhlIGNhbGwuCisKKyAgICBpbm90aWZ5X2luaXRfd2F0Y2goJm15X3dhdGNoLT5pd2F0Y2gpOworICAgIGlub3RpZnlfZ2V0X3dhdGNoKCZteV93YXRjaC0+aXdhdGNoKTsJLy8gb3B0aW9uYWwKKyAgICBzMzIgd2QgPSBpbm90aWZ5X2FkZF93YXRjaChpaCwgJm15X3dhdGNoLT5pd2F0Y2gsIGlub2RlLCBtYXNrKTsKKyAgICBpbm90aWZ5X3B1dF93YXRjaCgmbXlfd2F0Y2gtPml3YXRjaCk7CS8vIG9wdGlvbmFsCisKK1lvdSBtYXkgdXNlIHRoZSB3YXRjaCBkZXNjcmlwdG9yICh3ZCkgb3IgdGhlIGFkZHJlc3Mgb2YgdGhlIGlub3RpZnlfd2F0Y2ggZm9yCitvdGhlciBpbm90aWZ5IG9wZXJhdGlvbnMuICBZb3UgbXVzdCBub3QgZGlyZWN0bHkgcmVhZCBvciBtYW5pcHVsYXRlIGRhdGEgaW4gdGhlCitpbm90aWZ5X3dhdGNoLiAgQWRkaXRpb25hbGx5LCB5b3UgbXVzdCBub3QgY2FsbCBpbm90aWZ5X2FkZF93YXRjaCgpIG1vcmUgdGhhbgorb25jZSBmb3IgYSBnaXZlbiBpbm90aWZ5X3dhdGNoIHN0cnVjdHVyZSwgdW5sZXNzIHlvdSBoYXZlIGZpcnN0IGNhbGxlZCBlaXRoZXIKK2lub3RpZnlfcm1fd2F0Y2goKSBvciBpbm90aWZ5X3JtX3dkKCkuCisKK1RvIGRldGVybWluZSBpZiB5b3UgaGF2ZSBhbHJlYWR5IHJlZ2lzdGVyZWQgYSB3YXRjaCBmb3IgYSBnaXZlbiBpbm9kZSwgeW91IG1heQorY2FsbCBpbm90aWZ5X2ZpbmRfd2F0Y2goKSwgd2hpY2ggZ2l2ZXMgeW91IGJvdGggdGhlIHdkIGFuZCB0aGUgd2F0Y2ggcG9pbnRlciBmb3IKK3RoZSBpbm90aWZ5X3dhdGNoLCBvciBhbiBlcnJvciBpZiB0aGUgd2F0Y2ggZG9lcyBub3QgZXhpc3QuCisKKyAgICB3ZCA9IGlub3RpZnlfZmluZF93YXRjaChpaCwgaW5vZGUsICZ3YXRjaHApOworCitZb3UgbWF5IHVzZSBjb250YWluZXJfb2YoKSBvbiB0aGUgd2F0Y2ggcG9pbnRlciB0byBhY2Nlc3MgeW91ciBvd24gZGF0YQorYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gd2F0Y2guICBXaGVuIGFuIGV4aXN0aW5nIHdhdGNoIGlzIGZvdW5kLAoraW5vdGlmeV9maW5kX3dhdGNoKCkgYnVtcHMgdGhlIHJlZmNvdW50IGJlZm9yZSByZWxlYXNpbmcgaXRzIGxvY2tzLiAgWW91IG11c3QKK3B1dCB0aGF0IHJlZmVyZW5jZSB3aXRoOgorCisgICAgcHV0X2lub3RpZnlfd2F0Y2god2F0Y2hwKTsKKworQ2FsbCBpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoKCkgdG8gdXBkYXRlIHRoZSBldmVudCBtYXNrIGZvciBhbiBleGlzdGluZyB3YXRjaC4KK2lub3RpZnlfZmluZF91cGRhdGVfd2F0Y2goKSByZXR1cm5zIHRoZSB3ZCBvZiB0aGUgdXBkYXRlZCB3YXRjaCwgb3IgYW4gZXJyb3IgaWYKK3RoZSB3YXRjaCBkb2VzIG5vdCBleGlzdC4KKworICAgIHdkID0gaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChpaCwgaW5vZGUsIG1hc2spOworCitBbiBleGlzdGluZyB3YXRjaCBtYXkgYmUgcmVtb3ZlZCBieSBjYWxsaW5nIGVpdGhlciBpbm90aWZ5X3JtX3dhdGNoKCkgb3IKK2lub3RpZnlfcm1fd2QoKS4KKworICAgIGludCByZXQgPSBpbm90aWZ5X3JtX3dhdGNoKGloLCAmbXlfd2F0Y2gtPml3YXRjaCk7CisgICAgaW50IHJldCA9IGlub3RpZnlfcm1fd2QoaWgsIHdkKTsKKworQSB3YXRjaCBtYXkgYmUgcmVtb3ZlZCB3aGlsZSBleGVjdXRpbmcgeW91ciBldmVudCBoYW5kbGVyIHdpdGggdGhlIGZvbGxvd2luZzoKKworICAgIGlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChpaCwgaXdhdGNoKTsKKworQ2FsbCBpbm90aWZ5X2Rlc3Ryb3koKSB0byByZW1vdmUgYWxsIHdhdGNoZXMgZnJvbSB5b3VyIGlub3RpZnkgaW5zdGFuY2UgYW5kCityZWxlYXNlIGl0LiAgSWYgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMsIGlub3RpZnlfZGVzdHJveSgpIHdpbGwgY2FsbAoreW91ciBkZXN0cm95X3dhdGNoIG9wIGZvciBlYWNoIHdhdGNoLgorCisgICAgaW5vdGlmeV9kZXN0cm95KGloKTsKKworV2hlbiBpbm90aWZ5IHJlbW92ZXMgYSB3YXRjaCwgaXQgc2VuZHMgYW4gSU5fSUdOT1JFRCBldmVudCB0byB5b3VyIGNhbGxiYWNrLgorWW91IG1heSB1c2UgdGhpcyBldmVudCBhcyBhbiBpbmRpY2F0aW9uIHRvIGZyZWUgdGhlIHdhdGNoIG1lbW9yeS4gIE5vdGUgdGhhdAoraW5vdGlmeSBtYXkgcmVtb3ZlIGEgd2F0Y2ggZHVlIHRvIGZpbGVzeXN0ZW0gZXZlbnRzLCBhcyB3ZWxsIGFzIGJ5IHlvdXIgcmVxdWVzdC4KK0lmIHlvdSB1c2UgSU5fT05FU0hPVCwgaW5vdGlmeSB3aWxsIHJlbW92ZSB0aGUgd2F0Y2ggYWZ0ZXIgdGhlIGZpcnN0IGV2ZW50LCBhdAord2hpY2ggcG9pbnQgeW91IG1heSBjYWxsIHRoZSBmaW5hbCBpbm90aWZ5X3B1dF93YXRjaC4KKworKGl2KSBLZXJuZWwgSW50ZXJmYWNlIFByb3RvdHlwZXMKKworCXN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaW5vdGlmeV9pbml0KHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgKm9wcyk7CisKKwlpbm90aWZ5X2luaXRfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKTsKKworCXMzMiBpbm90aWZ5X2FkZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkgICAgICAgICAgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCwKKwkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBtYXNrKTsKKworCXMzMiBpbm90aWZ5X2ZpbmRfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKndhdGNocCk7CisKKwlzMzIgaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBtYXNrKTsKKworCWludCBpbm90aWZ5X3JtX3dkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsIHUzMiB3ZCk7CisKKwlpbnQgaW5vdGlmeV9ybV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkJICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpOworCisJdm9pZCBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkJIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCk7CisKKwl2b2lkIGlub3RpZnlfZGVzdHJveShzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKTsKKworCXZvaWQgZ2V0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKTsKKwl2b2lkIHB1dF9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCk7CisKKworKHYpIEludGVybmFsIEtlcm5lbCBJbXBsZW1lbnRhdGlvbgorCitFYWNoIGlub3RpZnkgaW5zdGFuY2UgaXMgcmVwcmVzZW50ZWQgYnkgYW4gaW5vdGlmeV9oYW5kbGUgc3RydWN0dXJlLgorSW5vdGlmeSdzIHVzZXJzcGFjZSBjb25zdW1lcnMgYWxzbyBoYXZlIGFuIGlub3RpZnlfZGV2aWNlIHdoaWNoIGlzCithc3NvY2lhdGVkIHdpdGggdGhlIGlub3RpZnlfaGFuZGxlLCBhbmQgb24gd2hpY2ggZXZlbnRzIGFyZSBxdWV1ZWQuCiAKIEVhY2ggd2F0Y2ggaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGlub3RpZnlfd2F0Y2ggc3RydWN0dXJlLiAgV2F0Y2hlcyBhcmUgY2hhaW5lZAotb2ZmIG9mIGVhY2ggYXNzb2NpYXRlZCBkZXZpY2UgYW5kIGVhY2ggYXNzb2NpYXRlZCBpbm9kZS4KK29mZiBvZiBlYWNoIGFzc29jaWF0ZWQgaW5vdGlmeV9oYW5kbGUgYW5kIGVhY2ggYXNzb2NpYXRlZCBpbm9kZS4KIAotU2VlIGZzL2lub3RpZnkuYyBmb3IgdGhlIGxvY2tpbmcgYW5kIGxpZmV0aW1lIHJ1bGVzLgorU2VlIGZzL2lub3RpZnkuYyBhbmQgZnMvaW5vdGlmeV91c2VyLmMgZm9yIHRoZSBsb2NraW5nIGFuZCBsaWZldGltZSBydWxlcy4KIAogCi0oaXYpIFJhdGlvbmFsZQorKHZpKSBSYXRpb25hbGUKIAogUTogV2hhdCBpcyB0aGUgZGVzaWduIGRlY2lzaW9uIGJlaGluZCBub3QgdHlpbmcgdGhlIHdhdGNoIHRvIHRoZSBvcGVuIGZkIG9mCiAgICB0aGUgd2F0Y2hlZCBvYmplY3Q/CkBAIC0xNDUsNyArMjYzLDcgQEAKICAgIGZpbGUgZGVzY3JpcHRvci1iYXNlZCBvbmUgdGhhdCBhbGxvd3MgYmFzaWMgZmlsZSBJL08gYW5kIHBvbGwvc2VsZWN0LgogICAgT2J0YWluaW5nIHRoZSBmZCBhbmQgbWFuYWdpbmcgdGhlIHdhdGNoZXMgY291bGQgaGF2ZSBiZWVuIGRvbmUgZWl0aGVyIHZpYSBhCiAgICBkZXZpY2UgZmlsZSBvciBhIGZhbWlseSBvZiBuZXcgc3lzdGVtIGNhbGxzLiAgV2UgZGVjaWRlZCB0byBpbXBsZW1lbnQgYQotICAgZmFtaWx5IG9mIHN5c3RlbSBjYWxscyBiZWNhdXNlIHRoYXQgaXMgdGhlIHByZWZmZXJlZCBhcHByb2FjaCBmb3IgbmV3IGtlcm5lbAorICAgZmFtaWx5IG9mIHN5c3RlbSBjYWxscyBiZWNhdXNlIHRoYXQgaXMgdGhlIHByZWZlcnJlZCBhcHByb2FjaCBmb3IgbmV3IGtlcm5lbAogICAgaW50ZXJmYWNlcy4gIFRoZSBvbmx5IHJlYWwgZGlmZmVyZW5jZSB3YXMgd2hldGhlciB3ZSB3YW50ZWQgdG8gdXNlIG9wZW4oMikKICAgIGFuZCBpb2N0bCgyKSBvciBhIGNvdXBsZSBvZiBuZXcgc3lzdGVtIGNhbGxzLiAgU3lzdGVtIGNhbGxzIGJlYXQgaW9jdGxzLgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDE0MjFmNzQuLmNlMzdjNGIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xODQzLDEyICsxODQzLDEyIEBACiBXOiAgICAgaHR0cDovL21lZ2FyYWlkLmxzaWxvZ2ljLmNvbQogUzogICAgIE1haW50YWluZWQKIAotTUVNT1JZIFRFQ0hOT0xPR1kgREVWSUNFUworTUVNT1JZIFRFQ0hOT0xPR1kgREVWSUNFUyAoTVREKQogUDoJRGF2aWQgV29vZGhvdXNlCiBNOglkd213MkBpbmZyYWRlYWQub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnLwogTDoJbGludXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmcKLVQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGdseC9tdGQtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiAKIE1JQ1JPVEVLIFg2IFNDQU5ORVIKQEAgLTE4OTUsNyArMTg5NSw3IEBACiBXOglodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC9rZXJuZWwtcGF0Y2hlcy5odG1sCiBTOglNYWludGFpbmVkCiAKLU1VTFRJTUVESUEgQ0FSRCBTVUJTWVNURU0KK01VTFRJTUVESUEgQ0FSRCAoTU1DKSBTVUJTWVNURU0KIFA6CVJ1c3NlbGwgS2luZwogTToJcm1rK21tY0Bhcm0ubGludXgub3JnLnVrCiBTOglNYWludGFpbmVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCAwOGI3Y2M5Li5mNDdjZjlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTI3MCw2ICsyNzAsMTEgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYW4gQXRtZWwKIAkgIEFUOTFSTTkyMDAtYmFzZWQgYm9hcmQuCiAKK2NvbmZpZyBBUkNIX1BOWDQwMDgKKwlib29sICJQaGlsaXBzIE5leHBlcmlhIFBOWDQwMDggTW9iaWxlIgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBQaGlsaXBzIFBOWDQwMDggbW9iaWxlIHBsYXRmb3JtLgorCiBlbmRjaG9pY2UKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDZmOGU4NGMuLjZjOTdhYTcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMTE2LDYgKzExNiw3IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1JFQUxWSUVXKSAgIDo9IHJlYWx2aWV3CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0FUOTFSTTkyMDApIDo9IGF0OTFybTkyMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfRVA5M1hYKSAgICAgOj0gZXA5M3h4CisgbWFjaGluZS0kKENPTkZJR19BUkNIX1BOWDQwMDgpICAgIDo9IHBueDQwMDgKIAogaWZlcSAoJChDT05GSUdfQVJDSF9FQlNBMTEwKSx5KQogIyBUaGlzIGlzIHdoYXQgaGFwcGVucyBpZiB5b3UgZm9yZ2V0IHRoZSBJT0NTMTYgbGluZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IGI1NmY1ZTYuLjIzMDE2ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtNjA1LDggKzYwNSw4IEBACiAJCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCiAJCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKIAotCQkud29yZAkweDAwMDcwMDAwCQlAIEFSTXY2Ci0JCS53b3JkCTB4MDAwZjAwMDAKKwkJLndvcmQJMHgwMDA3YjAwMAkJQCBBUk12NgorCQkud29yZAkweDAwMDdmMDAwCiAJCWIJX19hcm12NF9tbXVfY2FjaGVfb24KIAkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKIAkJYglfX2FybXY2X21tdV9jYWNoZV9mbHVzaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwppbmRleCA2N2VhYTI2Li5iZjljZjljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIE1vbiBNYXIgMjggMDA6MDY6MzMgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyCisjIFRodSBOb3YgIDMgMTQ6MTU6MzIgMjAwNQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKQEAgLTE3LDYgKzE3LDcgQEAKIENPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzYsNiArMzcsOCBAQAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CkBAIC03MSw2ICs3NCw3IEBACiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xINzk1MlggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTEg3QTQwWD15CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldApAQCAtODQsNiArODgsNyBAQAogQ09ORklHX01BQ0hfTFBEN0E0MDA9eQogIyBDT05GSUdfTUFDSF9MUEQ3QTQwNCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9MSDdBNDAwPXkKK0NPTkZJR19MUEQ3QTQwWF9DUExEX1NTUD15CiAjIENPTkZJR19MSDdBNDBYX0NPTlRJR01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSDdBNDBYX09ORV9CQU5LX1BFUl9OT0RFIGlzIG5vdCBzZXQKIApAQCAtMTEwLDYgKzExNSw4IEBACiAjCiAjIEJ1cyBzdXBwb3J0CiAjCitDT05GSUdfQVJNX0FNQkE9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CkBAIC0xMTksNiArMTI2LDcgQEAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCisjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0RJU0NPTlRJR01FTT15CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQpAQCAtMTc1LDcgKzE4Myw3IEBACiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CiAKICMKQEAgLTIxNyw3ICsyMjUsMTAgQEAKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDQwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9NAogIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKIApAQCAtMjU0LDcgKzI2NSw2IEBACiAjCiAjIEJsb2NrIGRldmljZXMKICMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKQEAgLTI4OCwxMyArMjk4LDE1IEBACiAjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QT0xMPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0FSTT15CiAjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTMwMiw3ICszMTQsMzcgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCisjIENPTkZJR19CTEtfREVWX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC0zMzEsNyArMzczLDYgQEAKICMKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC00MzgsMTMgKzQ3OSwxMCBAQAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtNDUzLDcgKzQ5MSwxMyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDNfTEg3PXkKK0NPTkZJR19IQVNfVE9VQ0hTQ1JFRU5fQURTNzg0M19MSDc9eQogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2MSw3ICs1MDUsNiBAQAogIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwpAQCAtNDc5LDYgKzUyMiw4IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDExIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0xIN0E0MFg9eQpAQCAtNTEwLDcgKzU1NSw2IEBACiAjCiAjIFRQTSBkZXZpY2VzCiAjCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNTM0LDE4ICs1NzgsNzMgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRkIgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CitDT05GSUdfRkJfU09GVF9DVVJTT1I9eQorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVJNQ0xDRD15CitDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTAzNVE3REIwMl9IUlRGVD15CisjIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMDU3UTNEQzAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFE2NEQzNDMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTEwRDM2OCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMTIxUzFERzQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKICMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKKyMgQ09ORklHX1NORF9SVENUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FDOTdfQ09ERUM9eQorCisjCisjIEFMU0EgQVJNIGRldmljZXMKKyMKK0NPTkZJR19TTkRfTEg3QTQwWF9BQzk3PXkKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogCiAjCiAjIFVTQiBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCmluZGV4IDIwOGQ1OTEuLjNhNTdiZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCkBAIC0xLDUyICsxLDU4IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgotIyBNb24gTWFyIDI4IDAwOjE0OjA4IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNgorIyBUaHUgTWFyIDIzIDE3OjUwOjMxIDIwMDYKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiAjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfVUlEMTY9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRT15CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTU0LDYgKzYwLDIzIEBACiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIAogIworIyBCbG9jayBsYXllcgorIworCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisKKyMKICMgU3lzdGVtIFR5cGUKICMKICMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldApAQCAtNzEsMTEgKzk0LDE1IEBACiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xINzk1MlggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTEg3QTQwWD15CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKIAogIwogIyBMSDdBNDBYIEltcGxlbWVudGF0aW9ucwpAQCAtMTEwLDYgKzEzNyw3IEBACiAjCiAjIEJ1cyBzdXBwb3J0CiAjCitDT05GSUdfQVJNX0FNQkE9eQogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKQEAgLTEyMCw3ICsxNDgsMTggQEAKICMgS2VybmVsIEZlYXR1cmVzCiAjCiBDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUw9eQorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRElTQ09OVElHTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogCiAjCkBAIC0xNTQsNiArMTkzLDg0IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0xNjgsNiArMjg1LDExIEBACiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQogIwogQ09ORklHX01URD15CkBAIC0xNzUsNyArMjk3LDcgQEAKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTg2LDYgKzMwOCw3IEBACiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtMjExLDE1ICszMzQsMTggQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwNDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00CiAjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwpAQCAtMjQzLDYgKzM2OSwxMSBAQAogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAogCiAjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIwogIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKICMKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldApAQCAtMjU0LDcgKzM4NSw2IEBACiAjCiAjIEJsb2NrIGRldmljZXMKICMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKQEAgLTI2MiwxNiArMzkyLDcgQEAKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfQ0ZRPXkKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKQEAgLTI5MSwxMiArNDEyLDEzIEBACiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QT0xMPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0FSTT15CiAjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTMwNCw2ICs0MjYsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CiAKQEAgLTMxNSw2ICs0MzgsNyBAQAogIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CiAKICMKICMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCkBAIC0zMjksMTAgKzQ1MywxMiBAQAogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCiAjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogCkBAIC0zNDQsNiArNDcwLDcgQEAKICMKICMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CkBAIC0zNTQsNzAgKzQ4MSw4IEBACiAjCiAKICMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldApAQCAtNDI1LDExICs0OTAsMTcgQEAKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKIENPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNDU2LDYgKzUyNyw4IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAKICMKICMgSVNETiBzdWJzeXN0ZW0KQEAgLTQ3MCwxMCArNTQzLDEzIEBACiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTQ4Miw3ICs1NTgsMTMgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9BRENfTEg3PXkKK0NPTkZJR19IQVNfVE9VQ0hTQ1JFRU5fQURDX0xINz15CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtNDkwLDcgKzU3Miw2IEBACiAjCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCkBAIC01MDgsNiArNTg5LDggQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTEgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfTEg3QTQwWD15CkBAIC01MzMsMTMgKzYxNiwxMyBAQAogIwogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTU0NywxMCArNjMwLDMzIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKICMgTWlzYyBkZXZpY2VzCiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNTYzLDE4ICs2NjksODMgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRkIgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BUk1DTENEPXkKK0NPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyX0hSVEZUPXkKKyMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFEwNTdRM0RDMDIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTY0RDM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMTBEMzY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFExMjFTMURHNDEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJNQ0xDRF9BVU9fQTA3MFZXMDFfV0lERSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUk1DTENEX0hJVEFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZAogIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorIyBDT05GSUdfU05EX1JUQ1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CitDT05GSUdfU05EX0FDOTdfQlVTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgQUxTQSBBUk0gZGV2aWNlcworIworIyBDT05GSUdfU05EX0FSTUFBQ0kgaXMgbm90IHNldAorQ09ORklHX1NORF9MSDdBNDBYX0FDOTc9eQorCisjCisjIFVTQiBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogCiAjCiAjIFVTQiBzdXBwb3J0CkBAIC01OTUsNiArNzY2LDcgQEAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKQEAgLTYwMywxNiArNzc1LDE5IEBACiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwotIyBDT05GSUdfVVNCX0JMVUVUT09USF9UVFkgaXMgbm90IHNldAorIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1JXX0RFVEVDVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CkBAIC02MjEsMjIgKzc5NiwzMiBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQogQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC02ODYsMTYgKzg3MSwzMyBAQAogIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIFVTQiBBVE0vRFNMIGRyaXZlcnMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CiAjCiAKICMKICMgVVNCIEdhZGdldCBTdXBwb3J0CiAjCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTEg3PXkKK0NPTkZJR19VU0JfTEg3PXkKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1pFUk89eQorIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAogCiAjCiAjIE1NQy9TRCBDYXJkIHN1cHBvcnQKQEAgLTcwNyw2ICs5MDksNyBAQAogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC03MTYsMTcgKzkxOSwxNyBAQAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIworIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC03NDksMTIgKzk1MiwxMSBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03NjksOCArOTcxLDggQEAKICMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQpAQCAtNzg3LDEyICs5ODksMTQgQEAKICMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKQEAgLTgwMSw2ICsxMDA1LDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC04MjAsNiArMTAyNSw3IEBACiAjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAKICMKQEAgLTg3NSwxOSArMTA4MSwyNCBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0VSUk9SUz15CkBAIC05MTIsNiArMTEyMyw3IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwNzhkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcKQEAgLTAsMCArMSwyMDcyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCisjIFRodSBBcHIgIDYgMTc6MDU6NTggMjAwNgorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQVVESVQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19VSUQxNj15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRT1tCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19LTU9EPXkKKworIworIyBCbG9jayBsYXllcgorIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUE5YNDAwOD15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjZUPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworQ09ORklHX1BDQ0FSRD1tCisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1BSRUVNUFQ9eQorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMwLDExNTIwMCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX1BNX0xFR0FDWT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVBNPW0KKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9bQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPW0KK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorQ09ORklHX05FVF9LRVk9bQorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX0ZXTUFSSz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQgaXMgbm90IHNldAorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfVlM9bQorIyBDT05GSUdfSVBfVlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCisKKyMKKyMgSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAorIworQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15CitDT05GSUdfSVBfVlNfUFJPVE9fVURQPXkKK0NPTkZJR19JUF9WU19QUk9UT19FU1A9eQorQ09ORklHX0lQX1ZTX1BST1RPX0FIPXkKKworIworIyBJUFZTIHNjaGVkdWxlcgorIworQ09ORklHX0lQX1ZTX1JSPW0KK0NPTkZJR19JUF9WU19XUlI9bQorQ09ORklHX0lQX1ZTX0xDPW0KK0NPTkZJR19JUF9WU19XTEM9bQorQ09ORklHX0lQX1ZTX0xCTEM9bQorQ09ORklHX0lQX1ZTX0xCTENSPW0KK0NPTkZJR19JUF9WU19ESD1tCitDT05GSUdfSVBfVlNfU0g9bQorQ09ORklHX0lQX1ZTX1NFRD1tCitDT05GSUdfSVBfVlNfTlE9bQorCisjCisjIElQVlMgYXBwbGljYXRpb24gaGVscGVyCisjCitDT05GSUdfSVBfVlNfRlRQPW0KK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfQ1RfQUNDVD15CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUD1tCitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfVEZUUD1tCitDT05GSUdfSVBfTkZfQU1BTkRBPW0KKyMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUVVFVUU9bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KKworIworIyBERUNuZXQ6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfREVDTkVUX05GX0dSQUJVTEFUT1I9bQorCisjCisjIEJyaWRnZTogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQorQ09ORklHX0JSSURHRV9FQlRfQlJPVVRFPW0KK0NPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW0KK0NPTkZJR19CUklER0VfRUJUX1RfTkFUPW0KK0NPTkZJR19CUklER0VfRUJUXzgwMl8zPW0KK0NPTkZJR19CUklER0VfRUJUX0FNT05HPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUD1tCitDT05GSUdfQlJJREdFX0VCVF9MSU1JVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLPW0KK0NPTkZJR19CUklER0VfRUJUX1BLVFRZUEU9bQorQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KK0NPTkZJR19CUklER0VfRUJUX1ZMQU49bQorQ09ORklHX0JSSURHRV9FQlRfQVJQUkVQTFk9bQorQ09ORklHX0JSSURHRV9FQlRfRE5BVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLX1Q9bQorQ09ORklHX0JSSURHRV9FQlRfUkVESVJFQ1Q9bQorQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCitDT05GSUdfQlJJREdFX0VCVF9MT0c9bQorIyBDT05GSUdfQlJJREdFX0VCVF9VTE9HIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09eQorQ09ORklHX0FUTV9DTElQPXkKKyMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCisjIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19CUklER0U9bQorQ09ORklHX1ZMQU5fODAyMVE9bQorQ09ORklHX0RFQ05FVD1tCisjIENPTkZJR19ERUNORVRfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorQ09ORklHX0xMQzI9bQorQ09ORklHX0lQWD1tCisjIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFMSz1tCitDT05GSUdfREVWX0FQUExFVEFMSz15CitDT05GSUdfSVBERFA9bQorQ09ORklHX0lQRERQX0VOQ0FQPXkKK0NPTkZJR19JUEREUF9ERUNBUD15CitDT05GSUdfWDI1PW0KK0NPTkZJR19MQVBCPW0KKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorQ09ORklHX0VDT05FVD1tCitDT05GSUdfRUNPTkVUX0FVTlVEUD15CitDT05GSUdfRUNPTkVUX05BVElWRT15CitDT05GSUdfV0FOX1JPVVRFUj1tCisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCitDT05GSUdfTkVUX1NDSEVEPXkKK0NPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTPXkKKyMgQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0NMS19DUFUgaXMgbm90IHNldAorCisjCisjIFF1ZXVlaW5nL1NjaGVkdWxpbmcKKyMKK0NPTkZJR19ORVRfU0NIX0NCUT1tCitDT05GSUdfTkVUX1NDSF9IVEI9bQorQ09ORklHX05FVF9TQ0hfSEZTQz1tCitDT05GSUdfTkVUX1NDSF9BVE09bQorQ09ORklHX05FVF9TQ0hfUFJJTz1tCitDT05GSUdfTkVUX1NDSF9SRUQ9bQorQ09ORklHX05FVF9TQ0hfU0ZRPW0KK0NPTkZJR19ORVRfU0NIX1RFUUw9bQorQ09ORklHX05FVF9TQ0hfVEJGPW0KK0NPTkZJR19ORVRfU0NIX0dSRUQ9bQorQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KK0NPTkZJR19ORVRfU0NIX05FVEVNPW0KK0NPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQorCisjCisjIENsYXNzaWZpY2F0aW9uCisjCitDT05GSUdfTkVUX0NMUz15CisjIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQorQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKK0NPTkZJR19ORVRfQ0xTX0ZXPW0KK0NPTkZJR19ORVRfQ0xTX1UzMj1tCisjIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAorIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JTVlA9bQorQ09ORklHX05FVF9DTFNfUlNWUDY9bQorIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19QT0xJQ0U9eQorIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAorQ09ORklHX05FVF9FU1RJTUFUT1I9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworQ09ORklHX05FVF9QS1RHRU49bQorQ09ORklHX0hBTVJBRElPPXkKKworIworIyBQYWNrZXQgUmFkaW8gcHJvdG9jb2xzCisjCitDT05GSUdfQVgyNT1tCisjIENPTkZJR19BWDI1X0RBTUFfU0xBVkUgaXMgbm90IHNldAorQ09ORklHX05FVFJPTT1tCitDT05GSUdfUk9TRT1tCisKKyMKKyMgQVguMjUgbmV0d29yayBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01LSVNTPW0KK0NPTkZJR182UEFDSz1tCitDT05GSUdfQlBRRVRIRVI9bQorQ09ORklHX0JBWUNPTV9TRVJfRkRYPW0KK0NPTkZJR19CQVlDT01fU0VSX0hEWD1tCitDT05GSUdfQkFZQ09NX1BBUj1tCitDT05GSUdfQkFZQ09NX0VQUD1tCitDT05GSUdfWUFNPW0KK0NPTkZJR19JUkRBPW0KKworIworIyBJckRBIHByb3RvY29scworIworQ09ORklHX0lSTEFOPW0KK0NPTkZJR19JUk5FVD1tCitDT05GSUdfSVJDT01NPW0KKyMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAorCisjCisjIElyREEgb3B0aW9ucworIworQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKK0NPTkZJR19JUkRBX0ZBU1RfUlI9eQorQ09ORklHX0lSREFfREVCVUc9eQorCisjCisjIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKKyMKKworIworIyBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19JUlRUWV9TSVI9bQorCisjCisjIERvbmdsZSBzdXBwb3J0CisjCitDT05GSUdfRE9OR0xFPXkKK0NPTkZJR19FU0lfRE9OR0xFPW0KK0NPTkZJR19BQ1RJU1lTX0RPTkdMRT1tCitDT05GSUdfVEVLUkFNX0RPTkdMRT1tCisjIENPTkZJR19UT0lNMzIzMl9ET05HTEUgaXMgbm90IHNldAorQ09ORklHX0xJVEVMSU5LX0RPTkdMRT1tCitDT05GSUdfTUE2MDBfRE9OR0xFPW0KK0NPTkZJR19HSVJCSUxfRE9OR0xFPW0KK0NPTkZJR19NQ1AyMTIwX0RPTkdMRT1tCitDT05GSUdfT0xEX0JFTEtJTl9ET05HTEU9bQorQ09ORklHX0FDVDIwMExfRE9OR0xFPW0KKworIworIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfSVJQT1JUX1NJUj1tCisKKyMKKyMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAorIworIyBDT05GSUdfRE9OR0xFX09MRCBpcyBub3Qgc2V0CisKKyMKKyMgRklSIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfVVNCX0lSREE9bQorQ09ORklHX1NJR01BVEVMX0ZJUj1tCitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KK0NPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX1JGQ09NTT1tCitDT05GSUdfQlRfUkZDT01NX1RUWT15CitDT05GSUdfQlRfQk5FUD1tCitDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQorQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKK0NPTkZJR19CVF9DTVRQPW0KK0NPTkZJR19CVF9ISURQPW0KKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19CVF9IQ0lVU0I9bQorQ09ORklHX0JUX0hDSVVTQl9TQ089eQorQ09ORklHX0JUX0hDSVVBUlQ9bQorQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQorQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15CitDT05GSUdfQlRfSENJQkNNMjAzWD1tCisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorQ09ORklHX0JUX0hDSUJGVVNCPW0KK0NPTkZJR19CVF9IQ0lEVEwxPW0KK0NPTkZJR19CVF9IQ0lCVDNDPW0KK0NPTkZJR19CVF9IQ0lCTFVFQ0FSRD1tCitDT05GSUdfQlRfSENJQlRVQVJUPW0KK0NPTkZJR19CVF9IQ0lWSENJPW0KK0NPTkZJR19JRUVFODAyMTE9bQorIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVAgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9bQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9bQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPW0KK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9bQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMT0NLPW0KK0NPTkZJR19NVERfQkxPQ0tfUk89bQorQ09ORklHX0ZUTD1tCitDT05GSUdfTkZUTD1tCitDT05GSUdfTkZUTF9SVz15CitDT05GSUdfSU5GVEw9bQorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPW0KK0NPTkZJR19NVERfSkVERUNQUk9CRT1tCitDT05GSUdfTVREX0dFTl9QUk9CRT1tCisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPW0KK0NPTkZJR19NVERfQ0ZJX0FNRFNURD1tCitDT05GSUdfTVREX0NGSV9TVEFBPW0KK0NPTkZJR19NVERfQ0ZJX1VUSUw9bQorQ09ORklHX01URF9SQU09bQorQ09ORklHX01URF9ST009bQorQ09ORklHX01URF9BQlNFTlQ9bQorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPW0KK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHg0MDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01URF9TTFJBTT1tCitDT05GSUdfTVREX1BIUkFNPW0KK0NPTkZJR19NVERfTVREUkFNPW0KK0NPTkZJR19NVERSQU1fVE9UQUxfU0laRT00MDk2CitDT05GSUdfTVREUkFNX0VSQVNFX1NJWkU9MTI4CitDT05GSUdfTVREX0JMS01URD1tCisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfRE9DMjAwMD1tCitDT05GSUdfTVREX0RPQzIwMDE9bQorQ09ORklHX01URF9ET0MyMDAxUExVUz1tCitDT05GSUdfTVREX0RPQ1BST0JFPW0KK0NPTkZJR19NVERfRE9DRUNDPW0KKyMgQ09ORklHX01URF9ET0NQUk9CRV9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0RPQ1BST0JFX0FERFJFU1M9MAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfTkFORD1tCisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz1tCitDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUD1tCisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FERFJFU1M9MAorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9CQlRXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKworIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfUEFSUE9SVD1tCitDT05GSUdfUEFSUE9SVF9QQz1tCitDT05GSUdfUEFSUE9SVF9QQ19GSUZPPXkKKyMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0CitDT05GSUdfUEFSUE9SVF9QQ19QQ01DSUE9bQorQ09ORklHX1BBUlBPUlRfTk9UX1BDPXkKKyMgQ09ORklHX1BBUlBPUlRfQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUXzEyODQ9eQorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKK0NPTkZJR19QQVJJREU9bQorQ09ORklHX1BBUklERV9QQVJQT1JUPW0KKworIworIyBQYXJhbGxlbCBJREUgaGlnaC1sZXZlbCBkcml2ZXJzCisjCitDT05GSUdfUEFSSURFX1BEPW0KK0NPTkZJR19QQVJJREVfUENEPW0KK0NPTkZJR19QQVJJREVfUEY9bQorQ09ORklHX1BBUklERV9QVD1tCitDT05GSUdfUEFSSURFX1BHPW0KKworIworIyBQYXJhbGxlbCBJREUgcHJvdG9jb2wgbW9kdWxlcworIworQ09ORklHX1BBUklERV9BVEVOPW0KK0NPTkZJR19QQVJJREVfQlBDSz1tCitDT05GSUdfUEFSSURFX0JQQ0s2PW0KK0NPTkZJR19QQVJJREVfQ09NTT1tCitDT05GSUdfUEFSSURFX0RTVFI9bQorQ09ORklHX1BBUklERV9GSVQyPW0KK0NPTkZJR19QQVJJREVfRklUMz1tCitDT05GSUdfUEFSSURFX0VQQVQ9bQorIyBDT05GSUdfUEFSSURFX0VQQVRDOCBpcyBub3Qgc2V0CitDT05GSUdfUEFSSURFX0VQSUE9bQorQ09ORklHX1BBUklERV9GUklRPW0KK0NPTkZJR19QQVJJREVfRlJQVz1tCitDT05GSUdfUEFSSURFX0tCSUM9bQorQ09ORklHX1BBUklERV9LVFRJPW0KK0NPTkZJR19QQVJJREVfT04yMD1tCitDT05GSUdfUEFSSURFX09OMjY9bQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9bQorQ09ORklHX0JMS19ERVZfSURFPW0KKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz1tCisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9bQorQ09ORklHX0JMS19ERVZfSURFQ0Q9bQorQ09ORklHX0JMS19ERVZfSURFVEFQRT1tCitDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQorQ09ORklHX0JMS19ERVZfSURFU0NTST1tCisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPW0KKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9bQorQ09ORklHX0NIUl9ERVZfU1Q9bQorQ09ORklHX0NIUl9ERVZfT1NTVD1tCitDT05GSUdfQkxLX0RFVl9TUj1tCisjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz1tCitDT05GSUdfQ0hSX0RFVl9TQ0g9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CitDT05GSUdfU0NTSV9MT0dHSU5HPXkKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9bQorQ09ORklHX1NDU0lfRkNfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NBVEE9bQorQ09ORklHX1NDU0lfUFBBPW0KK0NPTkZJR19TQ1NJX0lNTT1tCisjIENPTkZJR19TQ1NJX0laSVBfRVBQMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JWklQX1NMT1dfQ1RSIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0RFQlVHPW0KKworIworIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKKyMKK0NPTkZJR19QQ01DSUFfQUhBMTUyWD1tCitDT05GSUdfUENNQ0lBX0ZET01BSU49bQorQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJPW0KK0NPTkZJR19QQ01DSUFfUUxPR0lDPW0KK0NPTkZJR19QQ01DSUFfU1lNNTNDNTAwPW0KKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCitDT05GSUdfTURfUkFJRDEwPW0KK0NPTkZJR19NRF9SQUlENT1tCisjIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KK0NPTkZJR19NRF9GQVVMVFk9bQorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KKyMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19CT05ESU5HPW0KK0NPTkZJR19FUVVBTElaRVI9bQorQ09ORklHX1RVTj1tCisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0NLRVQ9eQorQ09ORklHX0RFNjAwPW0KK0NPTkZJR19ERTYyMD1tCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKK0NPTkZJR19ORVRfUkFESU89eQorIyBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKKyMKK0NPTkZJR19TVFJJUD1tCitDT05GSUdfUENNQ0lBX1dBVkVMQU49bQorQ09ORklHX1BDTUNJQV9ORVRXQVZFPW0KKworIworIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAorIworQ09ORklHX1BDTUNJQV9SQVlDUz1tCisKKyMKKyMgV2lyZWxlc3MgODAyLjExYiBJU0EvUENJIGNhcmRzIHN1cHBvcnQKKyMKK0NPTkZJR19IRVJNRVM9bQorQ09ORklHX0FUTUVMPW0KKworIworIyBXaXJlbGVzcyA4MDIuMTFiIFBjbWNpYS9DYXJkYnVzIGNhcmRzIHN1cHBvcnQKKyMKK0NPTkZJR19QQ01DSUFfSEVSTUVTPW0KKyMgQ09ORklHX1BDTUNJQV9TUEVDVFJVTSBpcyBub3Qgc2V0CitDT05GSUdfQUlST19DUz1tCitDT05GSUdfUENNQ0lBX0FUTUVMPW0KK0NPTkZJR19QQ01DSUFfV0wzNTAxPW0KKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1dJUkVMRVNTPXkKKworIworIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVF9QQ01DSUE9eQorQ09ORklHX1BDTUNJQV8zQzU4OT1tCitDT05GSUdfUENNQ0lBXzNDNTc0PW0KK0NPTkZJR19QQ01DSUFfRk1WSjE4WD1tCitDT05GSUdfUENNQ0lBX1BDTkVUPW0KK0NPTkZJR19QQ01DSUFfTk1DTEFOPW0KK0NPTkZJR19QQ01DSUFfU01DOTFDOTI9bQorQ09ORklHX1BDTUNJQV9YSVJDMlBTPW0KK0NPTkZJR19QQ01DSUFfQVhORVQ9bQorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCitDT05GSUdfV0FOPXkKK0NPTkZJR19TWU5DTElOS19TWU5DUFBQPW0KK0NPTkZJR19IRExDPW0KK0NPTkZJR19IRExDX1JBVz15CitDT05GSUdfSERMQ19SQVdfRVRIPXkKK0NPTkZJR19IRExDX0NJU0NPPXkKK0NPTkZJR19IRExDX0ZSPXkKK0NPTkZJR19IRExDX1BQUD15CitDT05GSUdfSERMQ19YMjU9eQorQ09ORklHX0RMQ0k9bQorQ09ORklHX0RMQ0lfQ09VTlQ9MjQKK0NPTkZJR19ETENJX01BWD04CitDT05GSUdfV0FOX1JPVVRFUl9EUklWRVJTPXkKK0NPTkZJR19MQVBCRVRIRVI9bQorQ09ORklHX1gyNV9BU1k9bQorCisjCisjIEFUTSBkcml2ZXJzCisjCisjIENPTkZJR19BVE1fRFVNTVkgaXMgbm90IHNldAorQ09ORklHX0FUTV9UQ1A9bQorQ09ORklHX1BMSVA9bQorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPQVRNPW0KK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfU0hBUEVSPW0KK0NPTkZJR19ORVRDT05TT0xFPW0KK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworQ09ORklHX0lTRE49bQorCisjCisjIE9sZCBJU0RONExpbnV4CisjCitDT05GSUdfSVNETl9JNEw9bQorQ09ORklHX0lTRE5fUFBQPXkKK0NPTkZJR19JU0ROX1BQUF9WSj15CitDT05GSUdfSVNETl9NUFA9eQorQ09ORklHX0lQUFBfRklMVEVSPXkKK0NPTkZJR19JU0ROX1BQUF9CU0RDT01QPW0KK0NPTkZJR19JU0ROX0FVRElPPXkKK0NPTkZJR19JU0ROX1RUWV9GQVg9eQorQ09ORklHX0lTRE5fWDI1PXkKKworIworIyBJU0ROIGZlYXR1cmUgc3VibW9kdWxlcworIworQ09ORklHX0lTRE5fRFJWX0xPT1A9bQorQ09ORklHX0lTRE5fRElWRVJTSU9OPW0KKworIworIyBJU0RONExpbnV4IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBQYXNzaXZlIGNhcmRzCisjCitDT05GSUdfSVNETl9EUlZfSElTQVg9bQorCisjCisjIEQtY2hhbm5lbCBwcm90b2NvbCBmZWF0dXJlcworIworQ09ORklHX0hJU0FYX0VVUk89eQorQ09ORklHX0RFX0FPQz15CisjIENPTkZJR19ISVNBWF9OT19TRU5EQ09NUExFVEUgaXMgbm90IHNldAorIyBDT05GSUdfSElTQVhfTk9fTExDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJU0FYX05PX0tFWVBBRCBpcyBub3Qgc2V0CitDT05GSUdfSElTQVhfMVRSNj15CitDT05GSUdfSElTQVhfTkkxPXkKK0NPTkZJR19ISVNBWF9NQVhfQ0FSRFM9OAorCisjCisjIEhpU2F4IHN1cHBvcnRlZCBjYXJkcworIworQ09ORklHX0hJU0FYXzE2XzM9eQorQ09ORklHX0hJU0FYX1MwQk9YPXkKK0NPTkZJR19ISVNBWF9GUklUWlBDST15CitDT05GSUdfSElTQVhfQVZNX0ExX1BDTUNJQT15CitDT05GSUdfSElTQVhfRUxTQT15CitDT05GSUdfSElTQVhfRElFSExESVZBPXkKK0NPTkZJR19ISVNBWF9TRURMQkFVRVI9eQorQ09ORklHX0hJU0FYX05JQ0NZPXkKK0NPTkZJR19ISVNBWF9HQVpFTD15CitDT05GSUdfSElTQVhfSEZDX1NYPXkKKyMgQ09ORklHX0hJU0FYX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBIaVNheCBQQ01DSUEgY2FyZCBzZXJ2aWNlIG1vZHVsZXMKKyMKK0NPTkZJR19ISVNBWF9TRURMQkFVRVJfQ1M9bQorQ09ORklHX0hJU0FYX0VMU0FfQ1M9bQorQ09ORklHX0hJU0FYX0FWTV9BMV9DUz1tCitDT05GSUdfSElTQVhfVEVMRVNfQ1M9bQorCisjCisjIEhpU2F4IHN1YiBkcml2ZXIgbW9kdWxlcworIworQ09ORklHX0hJU0FYX1NUNTQ4MT1tCitDT05GSUdfSElTQVhfSEZDVVNCPW0KKyMgQ09ORklHX0hJU0FYX0hGQzRTOFMgaXMgbm90IHNldAorQ09ORklHX0hJU0FYX0hETEM9eQorCisjCisjIEFjdGl2ZSBjYXJkcworIworCisjCisjIFNpZW1lbnMgR2lnYXNldAorIworIyBDT05GSUdfSVNETl9EUlZfR0lHQVNFVCBpcyBub3Qgc2V0CisKKyMKKyMgQ0FQSSBzdWJzeXN0ZW0KKyMKK0NPTkZJR19JU0ROX0NBUEk9bQorQ09ORklHX0lTRE5fRFJWX0FWTUIxX1ZFUkJPU0VfUkVBU09OPXkKK0NPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRT15CitDT05GSUdfSVNETl9DQVBJX0NBUEkyMD1tCitDT05GSUdfSVNETl9DQVBJX0NBUElGU19CT09MPXkKK0NPTkZJR19JU0ROX0NBUElfQ0FQSUZTPW0KK0NPTkZJR19JU0ROX0NBUElfQ0FQSURSVj1tCisKKyMKKyMgQ0FQSSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQWN0aXZlIEFWTSBjYXJkcworIworQ09ORklHX0NBUElfQVZNPXkKK0NPTkZJR19JU0ROX0RSVl9BVk1CMV9CMVBDTUNJQT1tCitDT05GSUdfSVNETl9EUlZfQVZNQjFfQVZNX0NTPW0KKworIworIyBBY3RpdmUgRWljb24gRElWQSBTZXJ2ZXIgY2FyZHMKKyMKK0NPTkZJR19DQVBJX0VJQ09OPXkKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9bQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CitDT05GSUdfSU5QVVRfSk9ZREVWPW0KK0NPTkZJR19JTlBVVF9UU0RFVj1tCitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MjQwCitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCitDT05GSUdfSU5QVVRfRVZERVY9bQorQ09ORklHX0lOUFVUX0VWQlVHPW0KKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CitDT05GSUdfS0VZQk9BUkRfU1VOS0JEPW0KK0NPTkZJR19LRVlCT0FSRF9MS0tCRD1tCitDT05GSUdfS0VZQk9BUkRfWFRLQkQ9bQorQ09ORklHX0tFWUJPQVJEX05FV1RPTj1tCitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj1tCitDT05GSUdfTU9VU0VfU0VSSUFMPW0KK0NPTkZJR19NT1VTRV9WU1hYWEFBPW0KK0NPTkZJR19JTlBVVF9KT1lTVElDSz15CitDT05GSUdfSk9ZU1RJQ0tfQU5BTE9HPW0KK0NPTkZJR19KT1lTVElDS19BM0Q9bQorQ09ORklHX0pPWVNUSUNLX0FEST1tCitDT05GSUdfSk9ZU1RJQ0tfQ09CUkE9bQorQ09ORklHX0pPWVNUSUNLX0dGMks9bQorQ09ORklHX0pPWVNUSUNLX0dSSVA9bQorQ09ORklHX0pPWVNUSUNLX0dSSVBfTVA9bQorQ09ORklHX0pPWVNUSUNLX0dVSUxMRU1PVD1tCitDT05GSUdfSk9ZU1RJQ0tfSU5URVJBQ1Q9bQorQ09ORklHX0pPWVNUSUNLX1NJREVXSU5ERVI9bQorQ09ORklHX0pPWVNUSUNLX1RNREM9bQorQ09ORklHX0pPWVNUSUNLX0lGT1JDRT1tCitDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQj15CitDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFXzIzMj15CitDT05GSUdfSk9ZU1RJQ0tfV0FSUklPUj1tCitDT05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU49bQorQ09ORklHX0pPWVNUSUNLX1NQQUNFT1JCPW0KK0NPTkZJR19KT1lTVElDS19TUEFDRUJBTEw9bQorQ09ORklHX0pPWVNUSUNLX1NUSU5HRVI9bQorIyBDT05GSUdfSk9ZU1RJQ0tfVFdJREpPWSBpcyBub3Qgc2V0CitDT05GSUdfSk9ZU1RJQ0tfREI5PW0KK0NPTkZJR19KT1lTVElDS19HQU1FQ09OPW0KK0NPTkZJR19KT1lTVElDS19UVVJCT0dSQUZYPW0KK0NPTkZJR19KT1lTVElDS19KT1lEVU1QPW0KK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkU9bQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCitDT05GSUdfU0VSSU9fUEFSS0JEPW0KK0NPTkZJR19TRVJJT19MSUJQUzI9eQorQ09ORklHX1NFUklPX1JBVz1tCitDT05GSUdfR0FNRVBPUlQ9bQorQ09ORklHX0dBTUVQT1JUX05TNTU4PW0KK0NPTkZJR19HQU1FUE9SVF9MND1tCisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKK0NPTkZJR19DT01QVVRPTkU9bQorQ09ORklHX1JPQ0tFVFBPUlQ9bQorQ09ORklHX0NZQ0xBREVTPW0KKyMgQ09ORklHX0NZWl9JTlRSIGlzIG5vdCBzZXQKK0NPTkZJR19ESUdJRVBDQT1tCitDT05GSUdfTU9YQV9JTlRFTExJTz1tCitDT05GSUdfTU9YQV9TTUFSVElPPW0KKyMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CitDT05GSUdfU1lOQ0xJTktNUD1tCitDT05GSUdfTl9IRExDPW0KKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAorIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKK0NPTkZJR19TWD1tCitDT05GSUdfUklPPW0KK0NPTkZJR19SSU9fT0xEUENJPXkKK0NPTkZJR19TVEFMRFJWPXkKK0NPTkZJR19TVEFMTElPTj1tCitDT05GSUdfSVNUQUxMSU9OPW0KKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DUz1tCitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19QUklOVEVSPW0KKyMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1BQREVWPW0KK0NPTkZJR19USVBBUj1tCisKKyMKKyMgSVBNSQorIworQ09ORklHX0lQTUlfSEFORExFUj1tCisjIENPTkZJR19JUE1JX1BBTklDX0VWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQorQ09ORklHX0lQTUlfU0k9bQorQ09ORklHX0lQTUlfV0FUQ0hET0c9bQorQ09ORklHX0lQTUlfUE9XRVJPRkY9bQorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfU09GVF9XQVRDSERPRz1tCisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfVVNCUENXQVRDSERPRz1tCitDT05GSUdfTlZSQU09bQorQ09ORklHX0RUTEs9bQorQ09ORklHX1IzOTY0PW0KKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19TWU5DTElOS19DUz1tCisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKK0NPTkZJR19SQVdfRFJJVkVSPW0KK0NPTkZJR19NQVhfUkFXX0RFVlM9MjU2CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPW0KK0NPTkZJR19JMkNfQ0hBUkRFVj1tCisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKK0NPTkZJR19JMkNfQUxHT0JJVD1tCitDT05GSUdfSTJDX0FMR09QQ0Y9bQorQ09ORklHX0kyQ19BTEdPUENBPW0KKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfSVNBPW0KK0NPTkZJR19JMkNfUEFSUE9SVD1tCitDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQ9bQorQ09ORklHX0kyQ19TVFVCPW0KK0NPTkZJR19JMkNfUENBX0lTQT1tCisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19FRVBST009bQorQ09ORklHX1NFTlNPUlNfUENGODU3ND1tCisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfUENGODU5MT1tCisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCitDT05GSUdfVzE9bQorCisjCisjIDEtd2lyZSBCdXMgTWFzdGVycworIworIyBDT05GSUdfVzFfTUFTVEVSX0RTOTQ5MCBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9NQVNURVJfRFMyNDgyIGlzIG5vdCBzZXQKKworIworIyAxLXdpcmUgU2xhdmVzCisjCisjIENPTkZJR19XMV9TTEFWRV9USEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorQ09ORklHX0hXTU9OX1ZJRD1tCitDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KK0NPTkZJR19TRU5TT1JTX0FETTEwMjU9bQorQ09ORklHX1NFTlNPUlNfQURNMTAyNj1tCitDT05GSUdfU0VOU09SU19BRE0xMDMxPW0KKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19BU0IxMDA9bQorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19EUzE2MjE9bQorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0ZTQ0hFUj1tCisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19HTDUxOFNNPW0KKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19JVDg3PW0KK0NPTkZJR19TRU5TT1JTX0xNNjM9bQorQ09ORklHX1NFTlNPUlNfTE03NT1tCitDT05GSUdfU0VOU09SU19MTTc3PW0KK0NPTkZJR19TRU5TT1JTX0xNNzg9bQorQ09ORklHX1NFTlNPUlNfTE04MD1tCitDT05GSUdfU0VOU09SU19MTTgzPW0KK0NPTkZJR19TRU5TT1JTX0xNODU9bQorQ09ORklHX1NFTlNPUlNfTE04Nz1tCitDT05GSUdfU0VOU09SU19MTTkwPW0KKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19NQVgxNjE5PW0KK0NPTkZJR19TRU5TT1JTX1BDODczNjA9bQorQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE9bQorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1c4Mzc4MUQ9bQorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1c4M0w3ODVUUz1tCitDT05GSUdfU0VOU09SU19XODM2MjdIRj1tCisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCitDT05GSUdfRFZCPXkKK0NPTkZJR19EVkJfQ09SRT1tCisKKyMKKyMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycworIworIyBDT05GSUdfRFZCX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1RUVVNCX0JVREdFVD1tCitDT05GSUdfRFZCX1RUVVNCX0RFQz1tCitDT05GSUdfRFZCX0NJTkVSR1lUMj1tCitDT05GSUdfRFZCX0NJTkVSR1lUMl9UVU5JTkc9eQorQ09ORklHX0RWQl9DSU5FUkdZVDJfU1RSRUFNX1VSQl9DT1VOVD0zMgorQ09ORklHX0RWQl9DSU5FUkdZVDJfU1RSRUFNX0JVRl9TSVpFPTUxMgorQ09ORklHX0RWQl9DSU5FUkdZVDJfUVVFUllfSU5URVJWQUw9MjUwCitDT05GSUdfRFZCX0NJTkVSR1lUMl9FTkFCTEVfUkNfSU5QVVRfREVWSUNFPXkKK0NPTkZJR19EVkJfQ0lORVJHWVQyX1JDX1FVRVJZX0lOVEVSVkFMPTEwMAorCisjCisjIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcworIworCisjCisjIEN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzCisjCisKKyMKKyMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX1NUVjAyOTk9bQorQ09ORklHX0RWQl9DWDI0MTEwPW0KKyMgQ09ORklHX0RWQl9DWDI0MTIzIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVERBODA4Mz1tCitDT05GSUdfRFZCX01UMzEyPW0KK0NPTkZJR19EVkJfVkVTMVg5Mz1tCisjIENPTkZJR19EVkJfUzVIMTQyMCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfU1A4ODcwPW0KK0NPTkZJR19EVkJfU1A4ODdYPW0KK0NPTkZJR19EVkJfQ1gyMjcwMD1tCitDT05GSUdfRFZCX0NYMjI3MDI9bQorQ09ORklHX0RWQl9MNjQ3ODE9bQorQ09ORklHX0RWQl9UREExMDA0WD1tCitDT05GSUdfRFZCX05YVDYwMDA9bQorQ09ORklHX0RWQl9NVDM1Mj1tCisjIENPTkZJR19EVkJfWkwxMDM1MyBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0RJQjMwMDBNQj1tCitDT05GSUdfRFZCX0RJQjMwMDBNQz1tCisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfVkVTMTgyMD1tCitDT05GSUdfRFZCX1REQTEwMDIxPW0KK0NPTkZJR19EVkJfU1RWMDI5Nz1tCisKKyMKKyMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RlcmlhbCBEVFYpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTExMzIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0JDTTM1MTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0xHRFQzMzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPW0KKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCitDT05GSUdfU05EX0hXREVQPW0KK0NPTkZJR19TTkRfUkFXTUlEST1tCitDT05GSUdfU05EX1NFUVVFTkNFUj1tCitDT05GSUdfU05EX1NFUV9EVU1NWT1tCitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKK0NPTkZJR19TTkRfTVBVNDAxX1VBUlQ9bQorQ09ORklHX1NORF9EVU1NWT1tCitDT05GSUdfU05EX1ZJUk1JREk9bQorQ09ORklHX1NORF9NVFBBVj1tCitDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQorQ09ORklHX1NORF9NUFU0MDE9bQorCisjCisjIEFMU0EgQVJNIGRldmljZXMKKyMKKworIworIyBVU0IgZGV2aWNlcworIworQ09ORklHX1NORF9VU0JfQVVESU89bQorCisjCisjIFBDTUNJQSBkZXZpY2VzCisjCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKK0NPTkZJR19TT1VORF9QUklNRT1tCisjIENPTkZJR19PQlNPTEVURV9PU1NfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAorQ09ORklHX1NPVU5EX1RWTUlYRVI9bQorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPW0KKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0JBTkRXSURUSD15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9TTDgxMV9IQ0Q9bQorIyBDT05GSUdfVVNCX1NMODExX0NTIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfQUNNPW0KK0NPTkZJR19VU0JfUFJJTlRFUj1tCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CitDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15CitDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9VU0JBVD15CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQorQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD1tCitDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworQ09ORklHX1VTQl9LQkQ9bQorQ09ORklHX1VTQl9NT1VTRT1tCitDT05GSUdfVVNCX0FJUFRFSz1tCitDT05GSUdfVVNCX1dBQ09NPW0KKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9LQlRBQj1tCitDT05GSUdfVVNCX1BPV0VSTUFURT1tCitDT05GSUdfVVNCX01UT1VDSD1tCisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAorQ09ORklHX1VTQl9FR0FMQVg9bQorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAorQ09ORklHX1VTQl9YUEFEPW0KK0NPTkZJR19VU0JfQVRJX1JFTU9URT1tCisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCitDT05GSUdfVVNCX01EQzgwMD1tCitDT05GSUdfVVNCX01JQ1JPVEVLPW0KKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9bQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCitDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCisjIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KKyMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworQ09ORklHX1VTQl9VU1M3MjA9bQorCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KK0NPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FOWURBVEEgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KK0NPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVD1tCitDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOD1tCitDT05GSUdfVVNCX1NFUklBTF9FTVBFRz1tCitDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCitDT05GSUdfVVNCX1NFUklBTF9WSVNPUj1tCitDT05GSUdfVVNCX1NFUklBTF9JUEFRPW0KK0NPTkZJR19VU0JfU0VSSUFMX0lSPW0KK0NPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUPW0KK0NPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0lQVz1tCitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQT1tCitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5VyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVdMQyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9LTFNJPW0KK0NPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVD1tCitDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1tCisjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQorIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX1NBRkU9bQorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFX1BBRERFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSz1tCitDT05GSUdfVVNCX1NFUklBTF9YSVJDT009bQorQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCitDT05GSUdfVVNCX0VaVVNCPXkKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVVFUlNXQUxEPW0KK0NPTkZJR19VU0JfUklPNTAwPW0KK0NPTkZJR19VU0JfTEVHT1RPV0VSPW0KK0NPTkZJR19VU0JfTENEPW0KK0NPTkZJR19VU0JfTEVEPW0KK0NPTkZJR19VU0JfQ1lUSEVSTT1tCitDT05GSUdfVVNCX1BISURHRVRLSVQ9bQorQ09ORklHX1VTQl9QSElER0VUU0VSVk89bQorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVEVTVD1tCisKKyMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FUTT1tCitDT05GSUdfVVNCX1NQRUVEVE9VQ0g9bQorIyBDT05GSUdfVVNCX0NYQUNSVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVUVBR0xFQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YVVNCQVRNIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKK0NPTkZJR19VU0JfR0FER0VUPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0Q9eQorQ09ORklHX1VTQl9EVU1NWV9IQ0Q9bQorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKK0NPTkZJR19VU0JfWkVSTz1tCitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCitDT05GSUdfTU1DPW0KKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0JMT0NLPW0KKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9bQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KQkQ9bQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KRlNfRlM9bQorQ09ORklHX0pGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSkZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkZTX1NUQVRJU1RJQ1M9eQorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KK0NPTkZJR19YRlNfRVhQT1JUPXkKK0NPTkZJR19YRlNfUVVPVEE9eQorQ09ORklHX1hGU19TRUNVUklUWT15CitDT05GSUdfWEZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX1JUPXkKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz1tCitDT05GSUdfUk9NRlNfRlM9bQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX1FVT1RBPXkKK0NPTkZJR19RRk1UX1YxPW0KK0NPTkZJR19RRk1UX1YyPW0KK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPW0KK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPW0KKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19BREZTX0ZTPW0KKyMgQ09ORklHX0FERlNfRlNfUlcgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCitDT05GSUdfQkVGU19GUz1tCisjIENPTkZJR19CRUZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19CRlNfRlM9bQorQ09ORklHX0VGU19GUz1tCitDT05GSUdfSkZGU19GUz1tCitDT05GSUdfSkZGU19GU19WRVJCT1NFPTAKK0NPTkZJR19KRkZTX1BST0NfRlM9eQorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKK0NPTkZJR19WWEZTX0ZTPW0KK0NPTkZJR19IUEZTX0ZTPW0KK0NPTkZJR19RTlg0RlNfRlM9bQorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX05GU19ESVJFQ1RJTz15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCitDT05GSUdfU1VOUlBDX0dTUz1tCitDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KK0NPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KK0NPTkZJR19TTUJfRlM9bQorIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KK0NPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORz15CitDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORz15CitDT05GSUdfTkNQRlNfU1RST05HPXkKK0NPTkZJR19OQ1BGU19ORlNfTlM9eQorQ09ORklHX05DUEZTX09TMl9OUz15CisjIENPTkZJR19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkxTPXkKK0NPTkZJR19OQ1BGU19FWFRSQVM9eQorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19BRlNfRlM9bQorQ09ORklHX1JYUlBDPW0KKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX0FDT1JOX1BBUlRJVElPTj15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT05fQ1VNQU5BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9FRVNPWCBpcyBub3Qgc2V0CitDT05GSUdfQUNPUk5fUEFSVElUSU9OX0lDUz15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT05fQURGUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ09STl9QQVJUSVRJT05fUE9XRVJURUMgaXMgbm90IHNldAorQ09ORklHX0FDT1JOX1BBUlRJVElPTl9SSVNDSVg9eQorQ09ORklHX09TRl9QQVJUSVRJT049eQorQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CitDT05GSUdfQVRBUklfUEFSVElUSU9OPXkKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX0JTRF9ESVNLTEFCRUw9eQorQ09ORklHX01JTklYX1NVQlBBUlRJVElPTj15CitDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKK0NPTkZJR19VTklYV0FSRV9ESVNLTEFCRUw9eQorQ09ORklHX0xETV9QQVJUSVRJT049eQorIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TR0lfUEFSVElUSU9OPXkKK0NPTkZJR19VTFRSSVhfUEFSVElUSU9OPXkKK0NPTkZJR19TVU5fUEFSVElUSU9OPXkKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX09QUk9GSUxFPW0KKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVM9bQorQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHPW0KK0NPTkZJR19TRUNVUklUWV9TRUNMVkw9bQorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KK0NPTkZJR19DUkMzMj15CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfUkVFRF9TT0xPTU9OPW0KK0NPTkZJR19SRUVEX1NPTE9NT05fREVDMTY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IGRiY2IxMWEuLmI1YmNlYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTI3MSw3ICsyNzEsNyBAQAogQCByOCA9IHN5c2NhbGwgdGFibGUKIAkJLnR5cGUJc3lzX3N5c2NhbGwsICNmdW5jdGlvbgogc3lzX3N5c2NhbGw6Ci0JCWVvcglzY25vLCByMCwgI19fTlJfT0FCSV9TWVNDQUxMX0JBU0UKKwkJYmljCXNjbm8sIHIwLCAjX19OUl9PQUJJX1NZU0NBTExfQkFTRQogCQljbXAJc2NubywgI19fTlJfc3lzY2FsbCAtIF9fTlJfU1lTQ0FMTF9CQVNFCiAJCWNtcG5lCXNjbm8sICNOUl9zeXNjYWxscwlAIGNoZWNrIHJhbmdlCiAJCXN0bWxvaWEJc3AsIHtyNSwgcjZ9CQlAIHNodWZmbGUgYXJncwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2lycS5jIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCmluZGV4IDJkNTg5NmIuLmJjYzE5ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTM0MiwxMCArMzQyLDEwIEBACiAKICNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgogCWlmICghKGFjdGlvbi0+ZmxhZ3MgJiBTQV9USU1FUikgJiYgc3lzdGVtX3RpbWVyLT5keW5fdGljayAhPSBOVUxMKSB7Ci0JCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCQlzcGluX2xvY2soJnN5c3RlbV90aW1lci0+ZHluX3RpY2stPmxvY2spOwogCQlpZiAoc3lzdGVtX3RpbWVyLT5keW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKQogCQkJc3lzdGVtX3RpbWVyLT5keW5fdGljay0+aGFuZGxlcihpcnEsIDAsIHJlZ3MpOwotCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCQlzcGluX3VubG9jaygmc3lzdGVtX3RpbWVyLT5keW5fdGljay0+bG9jayk7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCmluZGV4IGQ2YmQ0MzUuLjljMTJkNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJaW50IHJldCA9IC1FTk9ERVY7CiAKIAlpZiAoZHluX3RpY2spIHsKLQkJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwogCQlyZXQgPSAwOwogCQlpZiAoIShkeW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKSkgewogCQkJcmV0ID0gZHluX3RpY2stPmVuYWJsZSgpOwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJCQlpZiAocmV0ID09IDApCiAJCQkJZHluX3RpY2stPnN0YXRlIHw9IERZTl9USUNLX0VOQUJMRUQ7CiAJCX0KLQkJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHluX3RpY2stPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJaW50IHJldCA9IC1FTk9ERVY7CiAKIAlpZiAoZHluX3RpY2spIHsKLQkJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwogCQlyZXQgPSAwOwogCQlpZiAoZHluX3RpY2stPnN0YXRlICYgRFlOX1RJQ0tfRU5BQkxFRCkgewogCQkJcmV0ID0gZHluX3RpY2stPmRpc2FibGUoKTsKQEAgLTQwOCw3ICs0MDgsNyBAQAogCQkJaWYgKHJldCA9PSAwKQogCQkJCWR5bl90aWNrLT5zdGF0ZSAmPSB+RFlOX1RJQ0tfRU5BQkxFRDsKIAkJfQotCQl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC00MjIsMTUgKzQyMiwyMCBAQAogdm9pZCB0aW1lcl9keW5fcmVwcm9ncmFtKHZvaWQpCiB7CiAJc3RydWN0IGR5bl90aWNrX3RpbWVyICpkeW5fdGljayA9IHN5c3RlbV90aW1lci0+ZHluX3RpY2s7Ci0JdW5zaWduZWQgbG9uZyBuZXh0LCBzZXE7CisJdW5zaWduZWQgbG9uZyBuZXh0LCBzZXEsIGZsYWdzOwogCi0JaWYgKGR5bl90aWNrICYmIChkeW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKSkgeworCWlmICghZHluX3RpY2spCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOworCWlmIChkeW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKSB7CiAJCW5leHQgPSBuZXh0X3RpbWVyX2ludGVycnVwdCgpOwogCQlkbyB7CiAJCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQkJCWR5bl90aWNrLT5yZXByb2dyYW0obmV4dF90aW1lcl9pbnRlcnJ1cHQoKSAtIGppZmZpZXMpOworCQkJZHluX3RpY2stPnJlcHJvZ3JhbShuZXh0IC0gamlmZmllcyk7CiAJCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3NpemVfdCB0aW1lcl9zaG93X2R5bl90aWNrKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKQEAgLTQ5OSw1ICs1MDQsMTAgQEAKIAlpZiAoc3lzdGVtX3RpbWVyLT5vZmZzZXQgPT0gTlVMTCkKIAkJc3lzdGVtX3RpbWVyLT5vZmZzZXQgPSBkdW1teV9nZXR0aW1lb2Zmc2V0OwogCXN5c3RlbV90aW1lci0+aW5pdCgpOworCisjaWZkZWYgQ09ORklHX05PX0lETEVfSFoKKwlpZiAoc3lzdGVtX3RpbWVyLT5keW5fdGljaykKKwkJc3lzdGVtX3RpbWVyLT5keW5fdGljay0+bG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKyNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9LY29uZmlnCmluZGV4IDhhMTc4NjdhLi41NThhMzRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZwpAQCAtMTQsNiArMTQsNyBAQAogCWJvb2wgIkxQRDdBNDAwIENhcmQgRW5naW5lIgogCXNlbGVjdCBBUkNIX0xIN0E0MDAKICMJc2VsZWN0IElERV9QT0xMCisJc2VsZWN0IEhBU19UT1VDSFNDUkVFTl9BRFM3ODQzX0xINwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50J3MKIAkgIExQRDdBNDAwIENhcmRFbmdpbmUuICBGb3IgdGhlIHRpbWUgYmVpbmcsIHRoZSBMUEQ3QTQwMCBhbmQKQEAgLTIzLDYgKzI0LDcgQEAKIAlib29sICJMUEQ3QTQwNCBDYXJkIEVuZ2luZSIKIAlzZWxlY3QgQVJDSF9MSDdBNDA0CiAjCXNlbGVjdCBJREVfUE9MTAorCXNlbGVjdCBIQVNfVE9VQ0hTQ1JFRU5fQURDX0xINwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50J3MKIAkgIExQRDdBNDA0IENhcmRFbmdpbmUuIEZvciB0aGUgdGltZSBiZWluZywgdGhlIExQRDdBNDAwIGFuZApAQCAtMzQsNiArMzYsOSBAQAogY29uZmlnIEFSQ0hfTEg3QTQwNAogCWJvb2wKIAorY29uZmlnIExQRDdBNDBYX0NQTERfU1NQCisJYm9vbAorCiBjb25maWcgTEg3QTQwWF9DT05USUdNRU0KIAlib29sICJEaXNhYmxlIE5VTUEgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfTEg3QTQwWApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L01ha2VmaWxlCmluZGV4IGU5MDUxMmQuLjk0Yjg2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvTWFrZWZpbGUKQEAgLTQsMTEgKzQsMTQgQEAKIAogIyBPYmplY3QgZmlsZSBsaXN0cy4KIAotb2JqLXkJCQk6PSB0aW1lLm8KLW9iai0kKENPTkZJR19NQUNIX0tFVjdBNDAwKSArPSBhcmNoLWtldjdhNDAwLm8gaXJxLWxoN2E0MDAubwotb2JqLSQoQ09ORklHX01BQ0hfTFBEN0E0MDApICs9IGFyY2gtbHBkN2E0MHgubyBpcnEtbGg3YTQwMC5vCi1vYmotJChDT05GSUdfTUFDSF9MUEQ3QTQwNCkgKz0gYXJjaC1scGQ3YTQweC5vIGlycS1saDdhNDA0Lm8KK29iai15CQkJCTo9IHRpbWUubyBjbG9ja3Mubworb2JqLW0JCQkJOj0KK29iai1uCQkJCTo9CitvYmotCQkJCTo9CiAKLW9iai1tCQkJOj0KLW9iai1uCQkJOj0KLW9iai0JCQk6PQorb2JqLSQoQ09ORklHX01BQ0hfS0VWN0E0MDApCSs9IGFyY2gta2V2N2E0MDAubyBpcnEtbGg3YTQwMC5vCitvYmotJChDT05GSUdfTUFDSF9MUEQ3QTQwMCkJKz0gYXJjaC1scGQ3YTQweC5vIGlycS1saDdhNDAwLm8KK29iai0kKENPTkZJR19NQUNIX0xQRDdBNDA0KQkrPSBhcmNoLWxwZDdhNDB4Lm8gaXJxLWxoN2E0MDQubworb2JqLSQoQ09ORklHX0xQRDdBNDBYX0NQTERfU1NQKQkrPSBzc3AtY3BsZC5vCitvYmotJChDT05GSUdfRkJfQVJNQ0xDRCkJKz0gY2xjZC5vCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9hcmNoLWxwZDdhNDB4LmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvYXJjaC1scGQ3YTQweC5jCmluZGV4IDEyZTIzMjcuLmMwZTY4NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9hcmNoLWxwZDdhNDB4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gtbHBkN2E0MHguYwpAQCAtMjMsNiArMjMsMjggQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCisjZGVmaW5lIENQTERfSU5UX05FVEhFUk5FVAkoMTw8MCkKKyNkZWZpbmUgQ1BMRF9JTlRNQVNLX0VUSEVSTkVUCSgxPDwyKQorI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDAwKQorIyBkZWZpbmUgQ1BMRF9JTlRfTlRPVUNICQkoMTw8MSkKKyMgZGVmaW5lIENQTERfSU5UTUFTS19UT1VDSAkoMTw8MykKKyMgZGVmaW5lIENQTERfSU5UX1BFTgkJKDE8PDQpCisjIGRlZmluZSBDUExEX0lOVE1BU0tfUEVOCSgxPDw0KQorIyBkZWZpbmUgQ1BMRF9JTlRfUElSUQkJKDE8PDQpCisjZW5kaWYKKyNkZWZpbmUgQ1BMRF9JTlRNQVNLX0NQTEQJKDE8PDcpCisjZGVmaW5lIENQTERfSU5UX0NQTEQJCSgxPDw2KQorCisjZGVmaW5lIENQTERfQ09OVFJPTF9TV0lOVAkJKDE8PDcpIC8qIERpc2FibGUgYWxsIENQTEQgSVJRcyAqLworI2RlZmluZSBDUExEX0NPTlRST0xfT0NNU0sJCSgxPDw2KSAvKiBNYXNrIFVTQjEgY29ubmVjdCBJUlEgKi8KKyNkZWZpbmUgQ1BMRF9DT05UUk9MX1BEUlYJCSgxPDw1KSAvKiBQQ0NfbkRSViBoaWdoICovCisjZGVmaW5lIENQTERfQ09OVFJPTF9VU0IxQwkJKDE8PDQpIC8qIFVTQjEgY29ubmVjdCBJUlEgYWN0aXZlICovCisjZGVmaW5lIENQTERfQ09OVFJPTF9VU0IxUAkJKDE8PDMpIC8qIFVTQjEgcG93ZXIgZGlzYWJsZSAqLworI2RlZmluZSBDUExEX0NPTlRST0xfQVdLUAkJKDE8PDIpIC8qIEF1dG8td2FrZXVwIGRpc2FibGVkICAqLworI2RlZmluZSBDUExEX0NPTlRST0xfTENEX0VOQUJMRQkJKDE8PDEpIC8qIExDRCBWZWUgZW5hYmxlICovCisjZGVmaW5lIENQTERfQ09OVFJPTF9XUkxBTl9ORU5BQkxFCSgxPDwwKSAvKiBTTUM5MXggcG93ZXIgZGlzYWJsZSAqLworCisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gQ1BMRDAwX1BIWVMsCkBAIC00OCwxMiArNzAsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGg3YTQweF91c2JjbGllbnRfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBVU0JfUEhZUywKLQkJLmVuZAk9IChVU0JfUEhZUyArIDB4RkYpLAorCQkuZW5kCT0gKFVTQl9QSFlTICsgUEFHRV9TSVpFKSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9VU0JJTlRSLAotCQkuZW5kCT0gSVJRX1VTQklOVFIsCisJCS5zdGFydAk9IElSUV9VU0IsCisJCS5lbmQJPSBJUlFfVVNCLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTYxLDcgKzgzLDggQEAKIHN0YXRpYyB1NjQgbGg3YTQweF91c2JjbGllbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUw7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxoN2E0MHhfdXNiY2xpZW50X2RldmljZSA9IHsKLQkubmFtZQkJPSAibGg3YTQweF91ZGMiLAorLy8JLm5hbWUJCT0gImxoN2E0MHhfdWRjIiwKKwkubmFtZQkJPSAibGg3LXVkYyIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5kbWFfbWFzayA9ICZsaDdhNDB4X3VzYmNsaWVudF9kbWFfbWFzaywKQEAgLTEwMSw3ICsxMjQsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxwZDdhNDB4X2RldnNbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIGxwZDdhNDB4X2RldnNbXSBfX2luaXRkYXRhID0gewogCSZzbWM5MXhfZGV2aWNlLAogCSZsaDdhNDB4X3VzYmNsaWVudF9kZXZpY2UsCiAjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKQEAgLTExMywyOSArMTM2LDUyIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBscGQ3YTQweF9pbml0ICh2b2lkKQogewotCUNQTERfQ09OVFJPTCB8PSAgICAgKDE8PDYpOyAvKiBNYXNrIFVTQjEgY29ubmVjdGlvbiBJUlEgKi8KKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwMCkKKwlDUExEX0NPTlRST0wgfD0gMAorCQl8IENQTERfQ09OVFJPTF9TV0lOVCAvKiBEaXNhYmxlIHNvZnR3YXJlIGludGVycnVwdCAqLworCQl8IENQTERfQ09OVFJPTF9PQ01TSzsgLyogTWFzayBVU0IxIGNvbm5lY3Rpb24gSVJRICovCiAJQ1BMRF9DT05UUk9MICY9IH4oMAotCQkJICB8ICgxPDwxKSAvKiBEaXNhYmxlIExDRCAqLwotCQkJICB8ICgxPDwwKSAvKiBFbmFibGUgV0xBTiAqLworCQkJICB8IENQTERfQ09OVFJPTF9MQ0RfRU5BQkxFCS8qIERpc2FibGUgTENEICovCisJCQkgIHwgQ1BMRF9DT05UUk9MX1dSTEFOX05FTkFCTEUJLyogRW5hYmxlIFNNQzkxeCAqLwogCQkpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwNCkKKwlDUExEX0NPTlRST0wgJj0gfigwCisJCQkgIHwgQ1BMRF9DT05UUk9MX1dSTEFOX05FTkFCTEUJLyogRW5hYmxlIFNNQzkxeCAqLworCQkpOworI2VuZGlmCiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyAobHBkN2E0MHhfZGV2cywgQVJSQVlfU0laRSAobHBkN2E0MHhfZGV2cykpOworI2lmIGRlZmluZWQgKENPTkZJR19GQl9BUk1DTENEKQorICAgICAgICBsaDdhNDB4X2NsY2RfaW5pdCAoKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBsaDdhNDB4X2Fja19jcGxkX2lycSAodTMyIGlycSkKIHsKLQkvKiBDUExEIGRvZXNuJ3QgaGF2ZSBhY2sgY2FwYWJpbGl0eSAqLworCS8qIENQTEQgZG9lc24ndCBoYXZlIGFjayBjYXBhYmlsaXR5LCBidXQgc29tZSBkZXZpY2VzIG1heSAqLworCisjaWYgZGVmaW5lZCAoQ1BMRF9JTlRNQVNLX1RPVUNIKQorCS8qIFRoZSB0b3VjaCBjb250cm9sICptdXN0KiBtYXNrIHRoZSB0aGUgaW50ZXJydXB0IGJlY2F1c2UgdGhlCisJICogaW50ZXJydXB0IGJpdCBpcyByZWFkIGJ5IHRoZSBkcml2ZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwZW4KKwkgKiBpcyBzdGlsbCBkb3duLiAqLworCWlmIChpcnEgPT0gSVJRX1RPVUNIKQorCQlDUExEX0lOVEVSUlVQVFMgfD0gQ1BMRF9JTlRNQVNLX1RPVUNIOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGxoN2E0MHhfbWFza19jcGxkX2lycSAodTMyIGlycSkKIHsKIAlzd2l0Y2ggKGlycSkgewogCWNhc2UgSVJRX0xQRDdBNDBYX0VUSF9JTlQ6Ci0JCUNQTERfSU5URVJSVVBUUyA9IENQTERfSU5URVJSVVBUUyB8IDB4NDsKKwkJQ1BMRF9JTlRFUlJVUFRTIHw9IENQTERfSU5UTUFTS19FVEhFUk5FVDsKIAkJYnJlYWs7Ci0JY2FzZSBJUlFfTFBEN0E0MDBfVFM6Ci0JCUNQTERfSU5URVJSVVBUUyA9IENQTERfSU5URVJSVVBUUyB8IDB4ODsKKyNpZiBkZWZpbmVkIChJUlFfVE9VQ0gpCisJY2FzZSBJUlFfVE9VQ0g6CisJCUNQTERfSU5URVJSVVBUUyB8PSBDUExEX0lOVE1BU0tfVE9VQ0g7CiAJCWJyZWFrOworI2VuZGlmCiAJfQogfQogCkBAIC0xNDMsMTEgKzE4OSwxMyBAQAogewogCXN3aXRjaCAoaXJxKSB7CiAJY2FzZSBJUlFfTFBEN0E0MFhfRVRIX0lOVDoKLQkJQ1BMRF9JTlRFUlJVUFRTID0gQ1BMRF9JTlRFUlJVUFRTICYgfiAweDQ7CisJCUNQTERfSU5URVJSVVBUUyAmPSB+Q1BMRF9JTlRNQVNLX0VUSEVSTkVUOwogCQlicmVhazsKLQljYXNlIElSUV9MUEQ3QTQwMF9UUzoKLQkJQ1BMRF9JTlRFUlJVUFRTID0gQ1BMRF9JTlRFUlJVUFRTICYgfiAweDg7CisjaWYgZGVmaW5lZCAoSVJRX1RPVUNIKQorCWNhc2UgSVJRX1RPVUNIOgorCQlDUExEX0lOVEVSUlVQVFMgJj0gfkNQTERfSU5UTUFTS19UT1VDSDsKIAkJYnJlYWs7CisjZW5kaWYKIAl9CiB9CiAKQEAgLTE2NCwxMSArMjEyLDEzIEBACiAKIAlkZXNjLT5jaGlwLT5hY2sgKGlycSk7CiAKLQlpZiAoKG1hc2sgJiAweDEpID09IDApCS8qIFdMQU4gKi8KKwlpZiAoKG1hc2sgJiAoMTw8MCkpID09IDApCS8qIFdMQU4gKi8KIAkJSVJRX0RJU1BBVENIIChJUlFfTFBEN0E0MFhfRVRIX0lOVCk7CiAKLQlpZiAoKG1hc2sgJiAweDIpID09IDApCS8qIFRvdWNoICovCi0JCUlSUV9ESVNQQVRDSCAoSVJRX0xQRDdBNDAwX1RTKTsKKyNpZiBkZWZpbmVkIChJUlFfVE9VQ0gpCisJaWYgKChtYXNrICYgKDE8PDEpKSA9PSAwKQkvKiBUb3VjaCAqLworCQlJUlFfRElTUEFUQ0ggKElSUV9UT1VDSCk7CisjZW5kaWYKIAogCWRlc2MtPmNoaXAtPnVubWFzayAoaXJxKTsgLyogTGV2ZWwtdHJpZ2dlcmVkIG5lZWQgdGhpcyAqLwogfQpAQCAtMjA0LDkgKzI1NCwyMSBAQAogCiAJCS8qIFRoZW4sIGNvbmZpZ3VyZSBDUExEIGludGVycnVwdCAqLwogCi0JQ1BMRF9JTlRFUlJVUFRTCT0gICAweDljOyAvKiBEaXNhYmxlIGFsbCBDUExEIGludGVycnVwdHMgKi8KKwkJCS8qIERpc2FibGUgYWxsIENQTEQgaW50ZXJydXB0cyAqLworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDAwKQorCUNQTERfSU5URVJSVVBUUwk9IENQTERfSU5UTUFTS19UT1VDSCB8IENQTERfSU5UTUFTS19QRU4KKwkJfCBDUExEX0lOVE1BU0tfRVRIRVJORVQ7CisJLyogKioqIEZJWE1FOiBkb24ndCBrbm93IHdoeSB3ZSBuZWVkIDcgYW5kIDQuIDcgaXMgd2F5IHdyb25nCisgICAgICAgICAgICAgICBhbmQgNCBpcyB1bmNlZmluZWQuICovCisJLy8gKDE8PDcpfCgxPDw0KXwoMTw8Myl8KDE8PDIpOworI2VuZGlmCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDQpCisJQ1BMRF9JTlRFUlJVUFRTCT0gQ1BMRF9JTlRNQVNLX0VUSEVSTkVUOworCS8qICoqKiBGSVhNRTogZG9uJ3Qga25vdyB3aHkgd2UgbmVlZCA2IGFuZCA1LCBuZWl0aGVyIGlzIGRlZmluZWQuICovCisJLy8gKDE8PDYpfCgxPDw1KXwoMTw8Myk7CisjZW5kaWYKIAlHUElPX1BGREQJJj0gfigxIDw8IHBpbkNQTEQpOyAvKiBNYWtlIGlucHV0ICovCi0JR1BJT19JTlRUWVBFMQl8PSAgKDEgPDwgcGluQ1BMRCk7IC8qIEVkZ2UgdHJpZ2dlcmVkICovCisJR1BJT19JTlRUWVBFMQkmPSB+KDEgPDwgcGluQ1BMRCk7IC8qIExldmVsIHRyaWdnZXJlZCAqLwogCUdQSU9fSU5UVFlQRTIJJj0gfigxIDw8IHBpbkNQTEQpOyAvKiBBY3RpdmUgbG93ICovCiAJYmFycmllciAoKTsKIAlHUElPX0dQSU9GSU5URU4gfD0gICgxIDw8IHBpbkNQTEQpOyAvKiBFbmFibGUgKi8KQEAgLTIxNiw3ICsyNzgsNyBAQAogCWZvciAoaXJxID0gSVJRX0JPQVJEX1NUQVJUOwogCSAgICAgaXJxIDwgSVJRX0JPQVJEX1NUQVJUICsgTlJfSVJRX0JPQVJEOyArK2lycSkgewogCQlzZXRfaXJxX2NoaXAgKGlycSwgJmxwZDdhNDB4X2NwbGRfY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlciAoaXJxLCBkb19lZGdlX0lSUSk7CisJCXNldF9pcnFfaGFuZGxlciAoaXJxLCBkb19sZXZlbF9JUlEpOwogCQlzZXRfaXJxX2ZsYWdzIChpcnEsIElSUUZfVkFMSUQpOwogCX0KIApAQCAtMjI2LDkxICsyODgsMTA5IEBACiAJCQkJIGxwZDdhNDB4X2NwbGRfaGFuZGxlcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbHBkN2E0MDBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGxwZDdhNDB4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKLQkJLnZpcnR1YWwJPSAgICAgSU9fVklSVCwKKwkJLnZpcnR1YWwJPSBJT19WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oSU9fUEhZUyksCi0JCS5sZW5ndGgJCT0gCSAgICBJT19TSVpFLAorCQkubGVuZ3RoCQk9IElPX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsJLyogTWFwcGluZyBhZGRlZCB0byB3b3JrIGFyb3VuZCBjaGlwIHNlbGVjdCBwcm9ibGVtcyAqLworCX0sCisJewkvKiBNYXBwaW5nIGFkZGVkIHRvIHdvcmsgYXJvdW5kIGNoaXAgc2VsZWN0IHByb2JsZW1zICovCiAJCS52aXJ0dWFsCT0gSU9CQVJSSUVSX1ZJUlQsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihJT0JBUlJJRVJfUEhZUyksCiAJCS5sZW5ndGgJCT0gSU9CQVJSSUVSX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKKwl9LAorCXsKIAkJLnZpcnR1YWwJPSBDRl9WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ0ZfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNGX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMDJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwMl9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDAyX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMDZfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwNl9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDA2X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMDhfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwOF9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDA4X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMENfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwQ19QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDBDX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMEVfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwRV9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDBFX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMTBfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxMF9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDEwX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMTJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxMl9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDEyX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMTRfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxNF9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDE0X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMTZfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxNl9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDE2X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMThfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxOF9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDE4X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMUFfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxQV9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDFBX1NJWkUsCisJCS5sZW5ndGgJCT0gQ0ZfU0laRSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwKLQkvKiBUaGlzIG1hcHBpbmcgaXMgcmVkdW5kYW50IHNpbmNlIHRoZSBzbWMgZHJpdmVyIHBlcmZvcm1zIGFub3RoZXIuICovCi0vKgl7IENQTEQwMF9WSVJULCAgQ1BMRDAwX1BIWVMsCUNQTEQwMF9TSVpFLAlNVF9ERVZJQ0UgfSwgKi8KKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDAyX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMDJfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDAyX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQwNl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDA2X1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQwNl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMDhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwOF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMDhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDA4X1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMDhfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDA4X1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQwQV9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDBBX1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQwQV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMENfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwQ19QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMENfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDBFX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMEVfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDBFX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQxMF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDEwX1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQxMF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMTJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxMl9QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMTJfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDE0X1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMTRfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDE0X1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQxNl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDE2X1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQxNl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMThfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxOF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMThfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDFBX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMUFfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDFBX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCiB9OwogCiB2b2lkIF9faW5pdAotbHBkN2E0MDBfbWFwX2lvKHZvaWQpCitscGQ3YTQweF9tYXBfaW8odm9pZCkKIHsKLQlpb3RhYmxlX2luaXQgKGxwZDdhNDAwX2lvX2Rlc2MsIEFSUkFZX1NJWkUgKGxwZDdhNDAwX2lvX2Rlc2MpKTsKLQotCQkvKiBGaXh1cCAoaW1wcm92ZSkgU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIHNldHRpbmdzICovCi0JU01DX0JDUjAgPSAweDIwMDAzOWFmOwkvKiBCb290IEZsYXNoICovCi0JU01DX0JDUjYgPSAweDEwMDBmYmUwOwkvKiBDUExEICovCi0JU01DX0JDUjcgPSAweDEwMDBiMmMyOwkvKiBDb21wYWN0IEZsYXNoICovCisJaW90YWJsZV9pbml0IChscGQ3YTQweF9pb19kZXNjLCBBUlJBWV9TSVpFIChscGQ3YTQweF9pb19kZXNjKSk7CiB9CiAKICNpZmRlZiBDT05GSUdfTUFDSF9MUEQ3QTQwMApAQCAtMzIwLDcgKzQwMCw3IEBACiAJLnBoeXNfaW8JPSAweDgwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9ICgoaW9fcDJ2ICgweDgwMDAwMDAwKSk+PjE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweGMwMDAwMTAwLAotCS5tYXBfaW8JCT0gbHBkN2E0MDBfbWFwX2lvLAorCS5tYXBfaW8JCT0gbHBkN2E0MHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGxoN2E0MDBfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZsaDdhNDB4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBscGQ3YTQweF9pbml0LApAQCAtMzM1LDcgKzQxNSw3IEBACiAJLnBoeXNfaW8JPSAweDgwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9ICgoaW9fcDJ2ICgweDgwMDAwMDAwKSk+PjE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweGMwMDAwMTAwLAotCS5tYXBfaW8JCT0gbHBkN2E0MDBfbWFwX2lvLAorCS5tYXBfaW8JCT0gbHBkN2E0MHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGxoN2E0MDRfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZsaDdhNDB4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBscGQ3YTQweF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2NsY2QuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3NTFmZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbGNkLmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC1saDdhNDB4L2NsY2QuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFyYyBTaW5nZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisvLyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKy8vI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKy8vI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisvLyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLmg+CisKKyNkZWZpbmUgSFJURlRDX0hSU0VUVVAJCV9fUkVHKEhSVEZUQ19QSFlTICsgMHgwMCkKKyNkZWZpbmUgSFJURlRDX0hSQ09OCQlfX1JFRyhIUlRGVENfUEhZUyArIDB4MDQpCisjZGVmaW5lIEhSVEZUQ19IUlRJTUlORzEJX19SRUcoSFJURlRDX1BIWVMgKyAweDA4KQorI2RlZmluZSBIUlRGVENfSFJUSU1JTkcyCV9fUkVHKEhSVEZUQ19QSFlTICsgMHgwYykKKworI2RlZmluZSBBTElfU0VUVVAJCV9fUkVHKEFMSV9QSFlTICsgMHgwMCkKKyNkZWZpbmUgQUxJX0NPTlRST0wJCV9fUkVHKEFMSV9QSFlTICsgMHgwNCkKKyNkZWZpbmUgQUxJX1RJTUlORzEJCV9fUkVHKEFMSV9QSFlTICsgMHgwOCkKKyNkZWZpbmUgQUxJX1RJTUlORzIJCV9fUkVHKEFMSV9QSFlTICsgMHgwYykKKworI2luY2x1ZGUgImxjZC1wYW5lbC5oIgorCitzdGF0aWMgdm9pZCBsaDdhNDB4X2NsY2RfZGlzYWJsZSAoc3RydWN0IGNsY2RfZmIgKmZiKQoreworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDAwKQorCUNQTERfQ09OVFJPTCAmPSB+KDE8PDEpOwkvKiBEaXNhYmxlIExDRCBWZWUgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDQpCisJR1BJT19QQ0QgICY9IH4oMTw8Myk7CQkvKiBEaXNhYmxlIExDRCBWZWUgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkKKwlIUlRGVENfSFJTRVRVUCAmPSB+KDE8PDEzKTsJLyogRGlzYWJsZSBIUlRGVCBjb250cm9sbGVyICovCisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDQpCisJQUxJX1NFVFVQICY9IH4oMTw8MTMpOwkJLyogRGlzYWJsZSBBTEkgKi8KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBsaDdhNDB4X2NsY2RfZW5hYmxlIChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJc3RydWN0IGNsY2RfcGFuZWxfZXh0cmEqIGV4dHJhCisJCT0gKHN0cnVjdCBjbGNkX3BhbmVsX2V4dHJhKikgZmItPmJvYXJkX2RhdGE7CisKKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwMCkKKwlDUExEX0NPTlRST0wgfD0gKDE8PDEpOwkJLyogRW5hYmxlIExDRCBWZWUgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDQpCisJR1BJT19QQ0REICY9IH4oMTw8Myk7CQkvKiBFbmFibGUgTENEIFZlZSAqLworCUdQSU9fUENEICB8PSAgKDE8PDMpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDAwKQorCisJaWYgKGV4dHJhKSB7CisJCUhSVEZUQ19IUlNFVFVQCisJCQk9ICgxIDw8IDEzKQorCQkJfCAoKGZiLT5mYi52YXIueHJlcyAtIDEpIDw8IDQpCisJCQl8IDB4YworCQkJfCAoZXh0cmEtPmhybW9kZSA/IDEgOiAwKTsKKwkJSFJURlRDX0hSQ09OCisJCQk9ICgoZXh0cmEtPmNsc2VuID8gMSA6IDApIDw8IDEpCisJCQl8ICgoZXh0cmEtPnNwc2VuID8gMSA6IDApIDw8IDApOworCQlIUlRGVENfSFJUSU1JTkcxCisJCQk9IChleHRyYS0+cGNkZWwgPDwgOCkKKwkJCXwgKGV4dHJhLT5yZXZkZWwgPDwgNCkKKwkJCXwgKGV4dHJhLT5scGRlbCA8PCAwKTsKKwkJSFJURlRDX0hSVElNSU5HMgorCQkJPSAoZXh0cmEtPnNwbGRlbCA8PCA5KQorCQkJfCAoZXh0cmEtPnBjMmRlbCA8PCAwKTsKKwl9CisJZWxzZQorCQlIUlRGVENfSFJTRVRVUAorCQkJPSAoMSA8PCAxMykKKwkJCXwgMHhjOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDA0KQorCisJaWYgKGV4dHJhKSB7CisJCUFMSV9TRVRVUAorCQkJPSAoMSA8PCAxMykKKwkJCXwgKChmYi0+ZmIudmFyLnhyZXMgLSAxKSA8PCA0KQorCQkJfCAweGMKKwkJCXwgKGV4dHJhLT5ocm1vZGUgPyAxIDogMCk7CisJCUFMSV9DT05UUk9MCisJCQk9ICgoZXh0cmEtPmNsc2VuID8gMSA6IDApIDw8IDEpCisJCQl8ICgoZXh0cmEtPnNwc2VuID8gMSA6IDApIDw8IDApOworCQlBTElfVElNSU5HMQorCQkJPSAoZXh0cmEtPnBjZGVsIDw8IDgpCisJCQl8IChleHRyYS0+cmV2ZGVsIDw8IDQpCisJCQl8IChleHRyYS0+bHBkZWwgPDwgMCk7CisJCUFMSV9USU1JTkcyCisJCQk9IChleHRyYS0+c3BsZGVsIDw8IDkpCisJCQl8IChleHRyYS0+cGMyZGVsIDw8IDApOworCX0KKwllbHNlCisJCUFMSV9TRVRVUAorCQkJPSAoMSA8PCAxMykKKwkJCXwgMHhjOworI2VuZGlmCisKK30KKworI2RlZmluZSBGUkFNRVNJWkUocykgKCgocykgKyBQQUdFX1NJWkUgLSAxKSZQQUdFX01BU0spCisKK3N0YXRpYyBpbnQgbGg3YTQweF9jbGNkX3NldHVwIChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJZG1hX2FkZHJfdCBkbWE7CisJdTMyIGxlbiA9IEZSQU1FU0laRSAobGNkX3BhbmVsLm1vZGUueHJlcypsY2RfcGFuZWwubW9kZS55cmVzCisJCQkgICAgICoobGNkX3BhbmVsLmJwcC84KSk7CisKKwlmYi0+cGFuZWwgPSAmbGNkX3BhbmVsOworCisJCS8qIEVuZm9yY2UgdGhlIHN5bmMgcG9sYXJpdHkgZGVmYXVsdHMgKi8KKwlpZiAoIShmYi0+cGFuZWwtPnRpbTIgJiBUSU0yX0lIUykpCisJCWZiLT5mYi52YXIuc3luYyB8PSBGQl9TWU5DX0hPUl9ISUdIX0FDVDsKKwlpZiAoIShmYi0+cGFuZWwtPnRpbTIgJiBUSU0yX0lWUykpCisJCWZiLT5mYi52YXIuc3luYyB8PSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1Q7CisKKyNpZiBkZWZpbmVkIChIQVNfTENEX1BBTkVMX0VYVFJBKQorCWZiLT5ib2FyZF9kYXRhID0gJmxjZF9wYW5lbF9leHRyYTsKKyNlbmRpZgorCisJZmItPmZiLnNjcmVlbl9iYXNlCisJCT0gZG1hX2FsbG9jX3dyaXRlY29tYmluZSAoJmZiLT5kZXYtPmRldiwgbGVuLAorCQkJCQkgICZkbWEsIEdGUF9LRVJORUwpOworCXByaW50ayAoIkNMQ0Q6IExDRCBzZXR1cCBmYiB2aXJ0IDB4JXAgcGh5cyAweCVwIGwgJXggaW8gMHglcCBcbiIsCisJCWZiLT5mYi5zY3JlZW5fYmFzZSwgKHZvaWQqKSBkbWEsIGxlbiwKKwkJKHZvaWQqKSBpb19wMnYgKENMQ0RDX1BIWVMpKTsKKwlwcmludGsgKCJDTENEOiBwaXhjbG9jayAlZFxuIiwgbGNkX3BhbmVsLm1vZGUucGl4Y2xvY2spOworCisJaWYgKCFmYi0+ZmIuc2NyZWVuX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDTENEOiB1bmFibGUgdG8gbWFwIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisjaWYgZGVmaW5lZCAoVVNFX1JHQjU1NSkKKwlmYi0+ZmIudmFyLmdyZWVuLmxlbmd0aCA9IDU7IC8qIFBhbmVsIHVzZXMgUkdCIDU6NTo1ICovCisjZW5kaWYKKworCWZiLT5mYi5maXguc21lbV9zdGFydCA9IGRtYTsKKwlmYi0+ZmIuZml4LnNtZW1fbGVuID0gbGVuOworCisJCS8qIERyaXZlIFBFNCBoaWdoIHRvIHByZXZlbnQgQ1BMRCBjcmFzaCAqLworCUdQSU9fUEVERCB8PSAoMTw8NCk7CisJR1BJT19QRUQgIHw9ICgxPDw0KTsKKworCUdQSU9fUElOTVVYIHw9ICgxPDwxKSB8ICgxPDwwKTsgLyogTENEVkRbMTU6NF0gKi8KKworLy8JZmItPmZiLmZib3BzLT5mYl9jaGVja192YXIgKCZmYi0+ZmIudmFyLCAmZmItPmZiKTsKKy8vCWZiLT5mYi5mYm9wcy0+ZmJfc2V0X3BhciAoJmZiLT5mYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaDdhNDB4X2NsY2RfbW1hcCAoc3RydWN0IGNsY2RfZmIgKmZiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKCZmYi0+ZGV2LT5kZXYsIHZtYSwKKwkJCQkgICAgIGZiLT5mYi5zY3JlZW5fYmFzZSwKKwkJCQkgICAgIGZiLT5mYi5maXguc21lbV9zdGFydCwKKwkJCQkgICAgIGZiLT5mYi5maXguc21lbV9sZW4pOworfQorCitzdGF0aWMgdm9pZCBsaDdhNDB4X2NsY2RfcmVtb3ZlIChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJZG1hX2ZyZWVfd3JpdGVjb21iaW5lICgmZmItPmRldi0+ZGV2LCBmYi0+ZmIuZml4LnNtZW1fbGVuLAorCQkJICAgICAgIGZiLT5mYi5zY3JlZW5fYmFzZSwgZmItPmZiLmZpeC5zbWVtX3N0YXJ0KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGNkX2JvYXJkIGNsY2RfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZQkJPSAibGg3YTQweCBGQiIsCisJLmNoZWNrCQk9IGNsY2RmYl9jaGVjaywKKwkuZGVjb2RlCQk9IGNsY2RmYl9kZWNvZGUsCisJLmVuYWJsZQkJPSBsaDdhNDB4X2NsY2RfZW5hYmxlLAorCS5zZXR1cAkJPSBsaDdhNDB4X2NsY2Rfc2V0dXAsCisJLm1tYXAJCT0gbGg3YTQweF9jbGNkX21tYXAsCisJLnJlbW92ZQkJPSBsaDdhNDB4X2NsY2RfcmVtb3ZlLAorCS5kaXNhYmxlCT0gbGg3YTQweF9jbGNkX2Rpc2FibGUsCit9OworCisjZGVmaW5lIElSUV9DTENEQyAoSVJRX0xDRElOVFIpCisKKyNkZWZpbmUgQU1CQV9ERVZJQ0UobmFtZSxidXNpZCxiYXNlLHBsYXQscGlkKQkJCVwKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgbmFtZSMjX2RldmljZSA9IHsJCQlcCisJLmRldiA9IHsJCQkJCQlcCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IH4wLAkJCVwKKwkJLmJ1c19pZAk9IGJ1c2lkLAkJCQlcCisJCS5wbGF0Zm9ybV9kYXRhID0gcGxhdCwJCQkJXAorCQl9LAkJCQkJCVwKKwkucmVzID0gewkJCQkJCVwKKwkJLnN0YXJ0CT0gYmFzZSMjX1BIWVMsCQkJCVwKKwkJLmVuZAk9IChiYXNlIyNfUEhZUykgKyAoNCoxMDI0KSAtIDEsCQlcCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkJCVwKKwkJfSwJCQkJCQlcCisJLmRtYV9tYXNrCT0gfjAsCQkJCQlcCisJLmlycQkJPSB7IElSUV8jI2Jhc2UsIH0sCQkJXAorCS8qIC5kbWEJCT0gYmFzZSMjX0RNQSwqLwkJCQlcCisJLnBlcmlwaGlkID0gcGlkLAkJCQkJXAorfQorCitBTUJBX0RFVklDRShjbGNkLCAgImNsZGMtbGg3YTQweCIsICBDTENEQywgICAgICZjbGNkX3BsYXRmb3JtX2RhdGEsIDB4NDExMTApOworCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0geworCSZjbGNkX2RldmljZSwKK307CisKK3ZvaWQgX19pbml0IGxoN2E0MHhfY2xjZF9pbml0ICh2b2lkKQoreworCWludCBpOworCWludCByZXN1bHQ7CisJcHJpbnRrICgiQ0xDRDogcmVnaXN0ZXJpbmcgYW1iYSBkZXZpY2VzXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKKwkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOworCQlyZXN1bHQgPSBhbWJhX2RldmljZV9yZWdpc3RlcihkLCAmaW9tZW1fcmVzb3VyY2UpOworCQlwcmludGsgKCIgICVkIC0+ICVkXG4iLCBpICxyZXN1bHQpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbG9ja3MuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbG9ja3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjkxYWZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2Nsb2Nrcy5jCkBAIC0wLDAgKzEsMTk5IEBACisvKiBhcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xvY2tzLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmMgU2luZ2VyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9ja3MuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworc3RydWN0IG1vZHVsZTsKK3N0cnVjdCBpY3N0NTI1X3BhcmFtczsKKworc3RydWN0IGNsayB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwljb25zdCBjaGFyICpuYW1lOworLy8Jdm9pZCAqZGF0YTsKKy8vCWNvbnN0IHN0cnVjdCBpY3N0NTI1X3BhcmFtcyAqcGFyYW1zOworLy8Jdm9pZCAoKnNldHZjbykoc3RydWN0IGNsayAqLCBzdHJ1Y3QgaWNzdDUyNV92Y28gdmNvKTsKK307CisKK2ludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKK3ZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKKworLyogLS0tLS0gKi8KKworI2RlZmluZSBNQUlORElWMShjKQkoKChjKSA+PiAgNykgJiAweDBmKQorI2RlZmluZSBNQUlORElWMihjKQkoKChjKSA+PiAxMSkgJiAweDFmKQorI2RlZmluZSBQUyhjKQkJKCgoYykgPj4gMTgpICYgMHgwMykKKyNkZWZpbmUgUFJFRElWKGMpCSgoKGMpID4+ICAyKSAmIDB4MWYpCisjZGVmaW5lIEhDTEtESVYoYykJKCgoYykgPj4gIDApICYgMHgwMikKKyNkZWZpbmUgUENMS0RJVihjKQkoKChjKSA+PiAxNikgJiAweDAzKQorCit1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQgKHVuc2lnbmVkIGludCBjcHUpIC8qIGluIGtIeiAqLworeworCXJldHVybiBmY2xrZnJlcV9nZXQgKCkvMTAwMDsKK30KK0VYUE9SVF9TWU1CT0woY3B1ZnJlcV9nZXQpOworCit1bnNpZ25lZCBpbnQgZmNsa2ZyZXFfZ2V0ICh2b2lkKQoreworCXVuc2lnbmVkIGludCBjbGtzZXQgPSBDU0NfQ0xLU0VUOworCXVuc2lnbmVkIGludCBnY2xrCisJCT0gWFRBTF9JTgorCQkvICgxIDw8IFBTKGNsa3NldCkpCisJCSogKE1BSU5ESVYxKGNsa3NldCkgKyAyKQorCQkvIChQUkVESVYoY2xrc2V0KSAgICsgMikKKwkJKiAoTUFJTkRJVjIoY2xrc2V0KSArIDIpCisJCTsKKwlyZXR1cm4gZ2NsazsKK30KKwordW5zaWduZWQgaW50IGhjbGtmcmVxX2dldCAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY2xrc2V0ID0gQ1NDX0NMS1NFVDsKKwl1bnNpZ25lZCBpbnQgaGNsayA9IGZjbGtmcmVxX2dldCAoKSAvIChIQ0xLRElWKGNsa3NldCkgKyAxKTsKKworCXJldHVybiBoY2xrOworfQorCit1bnNpZ25lZCBpbnQgcGNsa2ZyZXFfZ2V0ICh2b2lkKQoreworCXVuc2lnbmVkIGludCBjbGtzZXQgPSBDU0NfQ0xLU0VUOworCWludCBwY2xrZGl2ID0gUENMS0RJVihjbGtzZXQpOworCXVuc2lnbmVkIGludCBwY2xrOworCWlmIChwY2xrZGl2ID09IDB4MykKKwkJcGNsa2RpdiA9IDB4MjsKKwlwY2xrID0gaGNsa2ZyZXFfZ2V0ICgpIC8gKDEgPDwgcGNsa2Rpdik7CisKKwlyZXR1cm4gcGNsazsKK30KKworLyogLS0tLS0gKi8KKworc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOworc3RhdGljIERFQ0xBUkVfTVVURVgoY2xvY2tzX3NlbSk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXQgKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqcDsKKwlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOworCisJZG93biAoJmNsb2Nrc19zZW0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHAsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKHN0cmNtcCAoaWQsIHAtPm5hbWUpID09IDAKKwkJICAgICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgeworCQkJY2xrID0gcDsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwICgmY2xvY2tzX3NlbSk7CisKKwlyZXR1cm4gY2xrOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKKwordm9pZCBjbGtfcHV0IChzdHJ1Y3QgY2xrICpjbGspCit7CisJbW9kdWxlX3B1dChjbGstPm93bmVyKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3B1dCk7CisKK2ludCBjbGtfZW5hYmxlIChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlIChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKworaW50IGNsa191c2UgKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VzZSk7CisKK3ZvaWQgY2xrX3VudXNlIChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa191bnVzZSk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlIChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cmF0ZTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKKworbG9uZyBjbGtfcm91bmRfcmF0ZSAoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJcmV0dXJuIHJhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKKworaW50IGNsa19zZXRfcmF0ZSAoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IHJldCA9IC1FSU87CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKKworI2lmIDAKKy8qCisgKiBUaGVzZSBhcmUgZml4ZWQgY2xvY2tzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBrbWlfY2xrID0geworCS5uYW1lCT0gIktNSVJFRkNMSyIsCisJLnJhdGUJPSAyNDAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfY2xrID0geworCS5uYW1lCT0gIlVBUlRDTEsiLAorCS5yYXRlCT0gMjQwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNpX2NsayA9IHsKKwkubmFtZQk9ICJNQ0xLIiwKKwkucmF0ZQk9IDMzMDAwMDAwLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNsayBjbGNkX2NsayA9IHsKKwkubmFtZQk9ICJDTENEQ0xLIiwKKwkucmF0ZQk9IDAsCit9OworCitpbnQgY2xrX3JlZ2lzdGVyIChzdHJ1Y3QgY2xrICpjbGspCit7CisJZG93biAoJmNsb2Nrc19zZW0pOworCWxpc3RfYWRkICgmY2xrLT5ub2RlLCAmY2xvY2tzKTsKKwl1cCAoJmNsb2Nrc19zZW0pOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfcmVnaXN0ZXIpOworCit2b2lkIGNsa191bnJlZ2lzdGVyIChzdHJ1Y3QgY2xrICpjbGspCit7CisJZG93biAoJmNsb2Nrc19zZW0pOworCWxpc3RfZGVsICgmY2xrLT5ub2RlKTsKKwl1cCAoJmNsb2Nrc19zZW0pOworfQorRVhQT1JUX1NZTUJPTChjbGtfdW5yZWdpc3Rlcik7CisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19pbml0ICh2b2lkKQoreworCWNsa19yZWdpc3RlcigmY2xjZF9jbGspOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChjbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY29tbW9uLmgKaW5kZXggZWE4ZGU3ZS4uMThlOGJiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jb21tb24uaApAQCAtMTIsNiArMTIsNyBAQAogCiBleHRlcm4gdm9pZCBsaDdhNDAwX2luaXRfaXJxICh2b2lkKTsKIGV4dGVybiB2b2lkIGxoN2E0MDRfaW5pdF9pcnEgKHZvaWQpOworZXh0ZXJuIHZvaWQgbGg3YTQweF9jbGNkX2luaXQgKHZvaWQpOwogZXh0ZXJuIHZvaWQgbGg3YTQweF9pbml0X2JvYXJkX2lycSAodm9pZCk7CiAKICNkZWZpbmUgSVJRX0RJU1BBVENIKGlycSkgZGVzY19oYW5kbGVfaXJxKChpcnEpLChpcnFfZGVzYyArIGlycSksIHJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDQuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwNC5jCmluZGV4IGU5MDJlM2QuLjI2ODVhODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwNC5jCkBAIC0yOCwxMyArMjgsMTcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaXJxX3ByaV92aWMxW10gPSB7CiAjaWYgZGVmaW5lZCAoVVNFX1BSSU9SSVRJRVMpCi1JUlFfR1BJTzNJTlRSLAorCUlSUV9HUElPM0lOVFIsCQkJLyogQ1BMRCAqLworCUlSUV9ETUFNMlA0LCBJUlFfRE1BTTJQNSwJLyogQUM5NyAqLwogI2VuZGlmCiB9Owogc3RhdGljIHVuc2lnbmVkIGNoYXIgaXJxX3ByaV92aWMyW10gPSB7CiAjaWYgZGVmaW5lZCAoVVNFX1BSSU9SSVRJRVMpCi0JSVJRX1QzVUksIElSUV9HUElPN0lOVFIsCisJSVJRX1QzVUksCQkJLyogVGltZXIgKi8KKwlJUlFfR1BJTzdJTlRSLAkJCS8qIENQTEQgKi8KIAlJUlFfVUFSVDFJTlRSLCBJUlFfVUFSVDJJTlRSLCBJUlFfVUFSVDNJTlRSLAorCUlSUV9MQ0RJTlRSLAkJCS8qIExDRCAqLworCUlSUV9UU0NJTlRSLAkJCS8qIEFEQy9Ub3VjaHNjcmVlbiAqLwogI2VuZGlmCiB9OwogCkBAIC05OCwxMCArMTAyLDE5IEBACiAKICAgLyogSVJRIGluaXRpYWxpemF0aW9uICovCiAKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDAwKSAmJiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDA0KQorZXh0ZXJuIHZvaWQqIGJyYW5jaF9pcnFfbGg3YTQwMDsKKyNlbmRpZgorCiB2b2lkIF9faW5pdCBsaDdhNDA0X2luaXRfaXJxICh2b2lkKQogewogCWludCBpcnE7CiAKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDAwKSAmJiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDA0KQorI2RlZmluZSBOT1AgMHhlMWEwMDAwMAkJCS8qIG1vdiByMCwgcjAgKi8KKwlicmFuY2hfaXJxX2xoN2E0MDAgPSBOT1A7CisjZW5kaWYKKwogCVZJQzFfSU5URU5DTFIgPSAweGZmZmZmZmZmOwogCVZJQzJfSU5URU5DTFIgPSAweGZmZmZmZmZmOwogCVZJQzFfSU5UU0VMID0gMDsJCS8qIEFsbCBJUlFzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvbGNkLXBhbmVsLmggYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvbGNkLXBhbmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiMmVmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9sY2QtcGFuZWwuaApAQCAtMCwwICsxLDM0NiBAQAorLyogbGNkLXBhbmVsLmgKKyAgICAgJElkJAorCisgICB3cml0dGVuIGJ5IE1hcmMgU2luZ2VyCisgICAxOCBKdWwgMjAwNQorCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFyYyBTaW5nZXIKKworICAgLS0tLS0tLS0tLS0KKyAgIERFU0NSSVBUSU9OCisgICAtLS0tLS0tLS0tLQorCisgICBPbmx5IG9uZSBwYW5lbCBtYXkgYmUgZGVmaW5lZCBhdCBhIHRpbWUuCisKKyAgIFRoZSBwaXhlbCBjbG9jayBpcyBjYWxjdWxhdGVkIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgdGFyZ2V0LgorCisgICBFYWNoIHRpbWluZyB2YWx1ZSBpcyBhY2NvbXBhbmllZCBieSBhIHNwZWNpZmljYXRpb24gY29tbWVudC4KKworICAgICBVTklUUy9NSU4vVFlQL01BWAorCisgICBNb3N0IG9mIHRoZSB1bml0cyB3aWxsIGJlIGluIGNsb2Nrcy4KKworICAgVVNFX1JHQjU1NQorCisgICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGNvbmZpZ3VyZSB0aGUgQU1CQSBMQ0QgY29udHJvbGxlciB0byB1c2UgYW4KKyAgICAgUkdCNTU1IGVuY29kaW5nIGZvciB0aGUgcGVscyBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgUkdCNTY1LgorCisgICBMUEQ5NTIwLCBMUEQ3OTUyNCwgTFBEN0E0MDAsIExQRDdBNDA0LTEwLCBMUEQ3QTQwNC0xMQorCisgICAgIFRoZXNlIGJvYXJkcyBhcmUgYmVzdCBhcHByb3hpbWF0ZWQgYnkgNTU1IGZvciBhbGwgcGFuZWxzLiAgU29tZQorICAgICBjYW4gdXNlIGFuIGV4dHJhIGxvdy1vcmRlciBiaXQgb2YgYmx1ZSBpbiBiaXQgMTYgb2YgdGhlIGNvbG9yCisgICAgIHZhbHVlLCBidXQgd2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBjb21tdW5pY2F0ZSB0aGlzIG5vbi1saW5lYXIKKyAgICAgbWFwcGluZyB0byB0aGUga2VybmVsLgorCisqLworCisjaWYgIWRlZmluZWQgKF9fTENEX1BBTkVMX0hfXykKKyMgICAgZGVmaW5lICAgX19MQ0RfUEFORUxfSF9fCisKKyNpZiBkZWZpbmVkIChNQUNIX0xQRDc5NTIwKVwKKyB8fCBkZWZpbmVkIChNQUNIX0xQRDc5NTI0KVwKKyB8fCBkZWZpbmVkIChNQUNIX0xQRDdBNDAwKVwKKyB8fCBkZWZpbmVkIChNQUNIX0xQRDdBNDA0KQorIyBkZWZpbmUgVVNFX1JHQjU1NQorI2VuZGlmCisKK3N0cnVjdCBjbGNkX3BhbmVsX2V4dHJhIHsKKwl1bnNpZ25lZCBpbnQgaHJtb2RlOworCXVuc2lnbmVkIGludCBjbHNlbjsKKwl1bnNpZ25lZCBpbnQgc3BzZW47CisJdW5zaWduZWQgaW50IHBjZGVsOworCXVuc2lnbmVkIGludCByZXZkZWw7CisJdW5zaWduZWQgaW50IGxwZGVsOworCXVuc2lnbmVkIGludCBzcGxkZWw7CisJdW5zaWduZWQgaW50IHBjMmRlbDsKK307CisKKyNkZWZpbmUgTlNfVE9fQ0xPQ0sobnMsYykJKCgoKG5zKSooKGMpLzEwMDApICsgKDEwMDAwMDAgLSAxKSkvMTAwMDAwMCkpCisjZGVmaW5lIENMT0NLX1RPX0RJVihlLGMpCSgoKGMpICsgKGUpIC0gMSkvKGUpKQorCisjaWYgZGVmaW5lZCBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTAzNVE3REIwMl9IUlRGVAorCisJLyogTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudCBMQ0QgMy41IiBRVkdBIEhSVEZUIC0xMCAqLworCS8qIFNoYXJwIFBOIExRMDM1UTdEQjAyIHcvSFJURlQgY29udHJvbGxlciBjaGlwICovCisKKyNkZWZpbmUgUElYX0NMT0NLX1RBUkdFVAkoNjgwMDAwMCkKKyNkZWZpbmUgUElYX0NMT0NLX0RJVklERVIJQ0xPQ0tfVE9fRElWIChQSVhfQ0xPQ0tfVEFSR0VULCBIQ0xLKQorI2RlZmluZSBQSVhfQ0xPQ0sJCShIQ0xLL1BJWF9DTE9DS19ESVZJREVSKQorCitzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgbGNkX3BhbmVsID0geworCS5tb2RlCT0geworCQkubmFtZQkJPSAiMy41aW4gUVZHQSAoTFEwMzVRN0RCMDIpIiwKKwkJLnhyZXMJCT0gMjQwLAorCQkueXJlcwkJPSAzMjAsCisJCS5waXhjbG9jawk9IFBJWF9DTE9DSywKKwkJLmxlZnRfbWFyZ2luCT0gMTYsCisJCS5yaWdodF9tYXJnaW4JPSAyMSwKKwkJLnVwcGVyX21hcmdpbgk9IDgsCQkJLy8gbGluZS84LzgvOAorCQkubG93ZXJfbWFyZ2luCT0gNSwKKwkJLmhzeW5jX2xlbgk9IDYxLAorCQkudnN5bmNfbGVuCT0gTlNfVE9fQ0xPQ0sgKDYwLCBQSVhfQ0xPQ0spLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfSVBDIHwgKFBJWF9DTE9DS19ESVZJREVSIC0gMiksCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX1dBVEVSTUFSSywKKwkuYnBwCQk9IDE2LAorfTsKKworI2RlZmluZSBIQVNfTENEX1BBTkVMX0VYVFJBCisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbF9leHRyYSBsY2RfcGFuZWxfZXh0cmEgPSB7CisJLmhybW9kZSA9IDEsCisJLmNsc2VuID0gMSwKKwkuc3BzZW4gPSAxLAorCS5wY2RlbCA9IDgsCisJLnJldmRlbCA9IDcsCisJLmxwZGVsID0gMTMsCisJLnNwbGRlbCA9IDc3LAorCS5wYzJkZWwgPSAyMDgsCit9OworCisjZW5kaWYKKworI2lmIGRlZmluZWQgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFEwNTdRM0RDMDIKKworCS8qIExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQgTENEIDUuNyIgUVZHQSAtMTAgKi8KKwkvKiBTaGFycCBQTiBMUTA1N1EzREMwMiAqLworCS8qIFFWR0EgbW9kZSwgVi9RPUxPVyAqLworCisvKiBGcm9tIFNoYXJwIG9uIDIwMDYuMS4zLiAgSSBiZWxpZXZlIHNvbWUgb2YgdGhlIHZhbHVlcyBhcmUgaW5jb3JyZWN0CisgKiBiYXNlZCBvbiB0aGUgZGF0YXNoZWV0LgorCisgICAgVGltaW5nMAlUSU1JTkcxCQlUSU1JTkcyCQlDT05UUk9MCisgICAgMHgxNDBBMEM0QwkweDA4MDUwNEVGCTB4MDEzRjM4MEQJMHgwMDAwMDgyOQorICAgIEhCUD0gMjAJVkJQPSAgOAkJQkNEPSAgMAorICAgIEhGUD0gMTAJVkZQPSAgNQkJQ1BMPTMxOQorICAgIEhTVz0gMTIJVlNXPSAgMQkJSU9FPSAgMAorICAgIFBQTD0gMTkJTFBQPTIzOQkJSVBDPSAgMQorCQkJCUlIUz0gIDEKKwkJCQlJVlM9ICAxCisJCQkJQUNCPSAgMAorCQkJCUNTRUw9IDAKKwkJCQlQQ0Q9IDEzCisKKyAqLworCisvKiBUaGUgZnVsbCBob3Jvem9udGFsIGN5Y2xlIChUaCkgaXMgY2xvY2svMzYwLzQwMC80NTAuICovCisvKiBUaGUgZnVsbCB2ZXJ0aWNhbCAgIGN5Y2xlIChUdikgaXMgbGluZS8yNTEvMjYyLzI4MC4gKi8KKworI2RlZmluZSBQSVhfQ0xPQ0tfVEFSR0VUCSg2MzAwMDAwKSAvKiAtLzYuMy83IE1IeiAqLworI2RlZmluZSBQSVhfQ0xPQ0tfRElWSURFUglDTE9DS19UT19ESVYgKFBJWF9DTE9DS19UQVJHRVQsIEhDTEspCisjZGVmaW5lIFBJWF9DTE9DSwkJKEhDTEsvUElYX0NMT0NLX0RJVklERVIpCisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbCBsY2RfcGFuZWwgPSB7CisJLm1vZGUJPSB7CisJCS5uYW1lCQk9ICI1LjdpbiBRVkdBIChMUTA1N1EzREMwMikiLAorCQkueHJlcwkJPSAzMjAsCisJCS55cmVzCQk9IDI0MCwKKwkJLnBpeGNsb2NrCT0gUElYX0NMT0NLLAorCQkubGVmdF9tYXJnaW4JPSAxMSwKKwkJLnJpZ2h0X21hcmdpbgk9IDQwMC0xMS0zMjAtMiwKKwkJLnVwcGVyX21hcmdpbgk9IDcsCQkJLy8gbGluZS83LzcvNworCQkubG93ZXJfbWFyZ2luCT0gMjYyLTctMjQwLTIsCisJCS5oc3luY19sZW4JPSAyLAkJCS8vIGNsay8yLzk2LzIwMAorCQkudnN5bmNfbGVuCT0gMiwJCQkvLyBsaW5lLzIvLS8zNAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfSUhTIHwgVElNMl9JVlMKKwkJCXwgKFBJWF9DTE9DS19ESVZJREVSIC0gMiksCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX1dBVEVSTUFSSywKKwkuYnBwCQk9IDE2LAorfTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRNjREMzQzCisKKwkvKiBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50IExDRCA2LjQiIFZHQSAtMTAgKi8KKwkvKiBTaGFycCBQTiBMUTY0RDM0MyAqLworCisvKiBUaGUgZnVsbCBob3Jvem9udGFsIGN5Y2xlIChUaCkgaXMgY2xvY2svNzUwLzgwMC85MDAuICovCisvKiBUaGUgZnVsbCB2ZXJ0aWNhbCAgIGN5Y2xlIChUdikgaXMgbGluZS81MTUvNTI1LzU2MC4gKi8KKworI2RlZmluZSBQSVhfQ0xPQ0tfVEFSR0VUCSgyODMzMDAwMCkKKyNkZWZpbmUgUElYX0NMT0NLX0RJVklERVIJQ0xPQ0tfVE9fRElWIChQSVhfQ0xPQ0tfVEFSR0VULCBIQ0xLKQorI2RlZmluZSBQSVhfQ0xPQ0sJCShIQ0xLL1BJWF9DTE9DS19ESVZJREVSKQorCitzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgbGNkX3BhbmVsID0geworCS5tb2RlCT0geworCQkubmFtZQkJPSAiNi40aW4gUVZHQSAoTFE2NEQzNDMpIiwKKwkJLnhyZXMJCT0gNjQwLAorCQkueXJlcwkJPSA0ODAsCisJCS5waXhjbG9jawk9IFBJWF9DTE9DSywKKwkJLmxlZnRfbWFyZ2luCT0gMzIsCisJCS5yaWdodF9tYXJnaW4JPSA4MDAtMzItNjQwLTk2LAorCQkudXBwZXJfbWFyZ2luCT0gMzIsCQkJLy8gbGluZS8zNC8zNC8zNAorCQkubG93ZXJfbWFyZ2luCT0gNTQwLTMyLTQ4MC0yLAorCQkuaHN5bmNfbGVuCT0gOTYsCQkJLy8gY2xrLzIvOTYvMjAwCisJCS52c3luY19sZW4JPSAyLAkJCS8vIGxpbmUvMi8tLzM0CisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCisJLndpZHRoCQk9IC0xLAorCS5oZWlnaHQJCT0gLTEsCisJLnRpbTIJCT0gVElNMl9JSFMgfCBUSU0yX0lWUworCQkJfCAoUElYX0NMT0NLX0RJVklERVIgLSAyKSwKKwkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfV0FURVJNQVJLLAorCS5icHAJCT0gMTYsCit9OworCisjZW5kaWYKKworI2lmIGRlZmluZWQgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFExMEQzNjgKKworCS8qIExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQgTENEIDEwLjQiIFZHQSAtMTAgKi8KKwkvKiBTaGFycCBQTiBMUTEwRDM2OCAqLworCisjZGVmaW5lIFBJWF9DTE9DS19UQVJHRVQJKDI4MzMwMDAwKQorI2RlZmluZSBQSVhfQ0xPQ0tfRElWSURFUglDTE9DS19UT19ESVYgKFBJWF9DTE9DS19UQVJHRVQsIEhDTEspCisjZGVmaW5lIFBJWF9DTE9DSwkJKEhDTEsvUElYX0NMT0NLX0RJVklERVIpCisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbCBsY2RfcGFuZWwgPSB7CisJLm1vZGUJPSB7CisJCS5uYW1lCQk9ICIxMC40aW4gVkdBIChMUTEwRDM2OCkiLAorCQkueHJlcwkJPSA2NDAsCisJCS55cmVzCQk9IDQ4MCwKKwkJLnBpeGNsb2NrCT0gUElYX0NMT0NLLAorCQkubGVmdF9tYXJnaW4JPSAyMSwKKwkJLnJpZ2h0X21hcmdpbgk9IDE1LAorCQkudXBwZXJfbWFyZ2luCT0gMzQsCisJCS5sb3dlcl9tYXJnaW4JPSA1LAorCQkuaHN5bmNfbGVuCT0gOTYsCisJCS52c3luY19sZW4JPSAxNiwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0lIUyB8IFRJTTJfSVZTCisJCQl8IChQSVhfQ0xPQ0tfRElWSURFUiAtIDIpLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9XQVRFUk1BUkssCisJLmJwcAkJPSAxNiwKK307CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTEyMVMxREc0MQorCisJLyogTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudCBMQ0QgMTIuMSIgU1ZHQSAtMTAgKi8KKwkvKiBTaGFycCBQTiBMUTEyMVMxREc0MSwgd2FzIExRMTIxUzFERzMxICovCisKKy8qIE5vdGUgdGhhdCB3aXRoIGEgOTk5OTM5MDAgSHogSENMSywgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGhpdCB0aGUKKyAqIHRhcmdldCBjbG9jayBmcmVxdWVuY3kgcmFuZ2Ugb2YgMzVNSHogdG8gNDJNSHouICovCisKKy8qIElmIHRoZSB0YXJnZXQgcGl4ZWwgY2xvY2sgaXMgc3Vic3RhbnRpYWxseSBsb3dlciB0aGFuIHRoZSBwYW5lbAorICogc3BlYywgdGhpcyBpcyBkb25lIHRvIHByZXZlbnQgdGhlIExDRCBkaXNwbGF5IGZyb20gZ2xpdGNoaW5nIHdoZW4KKyAqIHRoZSBDUFUgaXMgdW5kZXIgbG9hZC4gIEEgcGl4ZWwgY2xvY2sgaGlnaGVyIHRoYW4gMjVNSHoKKyAqIChlbXBpcmljYWxseSBkZXRlcm1pbmVkKSB3aWxsIGNvbXBldGUgd2l0aCB0aGUgQ1BVIGZvciBidXMgY3ljbGVzCisgKiBmb3IgdGhlIEV0aGVybmV0IGNoaXAuICBIb3dldmVyLCBldmVuIGEgcGl4ZWwgY2xvY2sgb2YgMTBNSHoKKyAqIGNvbXBldGVzIHdpdGggQ29tcGFjdCBGbGFzaCBpbnRlcmZhY2UgZHVyaW5nIHNvbWUgb3BlcmF0aW9ucworICogKGZkaXNrLCBlMmZzY2spLiAgQW5kLCBhdCB0aGF0IHNwZWVkIHRoZSBkaXNwbGF5IG1heSBoYXZlIGEgdmlzaWJsZQorICogZmxpY2tlci4gKi8KKworLyogVGhlIGZ1bGwgaG9yb3pvbnRhbCBjeWNsZSAoVGgpIGlzIGNsb2NrLzgzMi8xMDU2LzEzOTUuICovCisKKyNkZWZpbmUgUElYX0NMT0NLX1RBUkdFVAkoMjAwMDAwMDApCisjZGVmaW5lIFBJWF9DTE9DS19ESVZJREVSCUNMT0NLX1RPX0RJViAoUElYX0NMT0NLX1RBUkdFVCwgSENMSykKKyNkZWZpbmUgUElYX0NMT0NLCQkoSENMSy9QSVhfQ0xPQ0tfRElWSURFUikKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIGxjZF9wYW5lbCA9IHsKKwkubW9kZQk9IHsKKwkJLm5hbWUJCT0gIjEyLjFpbiBTVkdBIChMUTEyMVMxREc0MSkiLAorCQkueHJlcwkJPSA4MDAsCisJCS55cmVzCQk9IDYwMCwKKwkJLnBpeGNsb2NrCT0gUElYX0NMT0NLLAorCQkubGVmdF9tYXJnaW4JPSA4OSwJCS8vIG5zLzUvLS8oMS9QSVhfQ0xPQ0spLTEwCisJCS5yaWdodF9tYXJnaW4JPSAxMDU2LTgwMC04OS0xMjgsCisJCS51cHBlcl9tYXJnaW4JPSAyMywJCS8vIGxpbmUvMjMvMjMvMjMKKwkJLmxvd2VyX21hcmdpbgk9IDQ0LAorCQkuaHN5bmNfbGVuCT0gMTI4LAkJLy8gY2xrLzIvMTI4LzIwMAorCQkudnN5bmNfbGVuCT0gNCwJCS8vIGxpbmUvMi80LzYKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0lIUyB8IFRJTTJfSVZTCisJCQl8IChQSVhfQ0xPQ0tfRElWSURFUiAtIDIpLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9XQVRFUk1BUkssCisJLmJwcAkJPSAxNiwKK307CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBDT05GSUdfRkJfQVJNQ0xDRF9ISVRBQ0hJCisKKwkvKiBIaXRhY2hpKi8KKwkvKiBTdWJtaXR0ZWQgYnkgTWljaGVsZSBEYSBSb2xkIDxtaWNoZWxlLmRhcm9sZEBlY3Nwcm9qZWN0LmNvbT4gKi8KKworI2RlZmluZSBQSVhfQ0xPQ0tfVEFSR0VUCSg0OTAwMDAwMCkKKyNkZWZpbmUgUElYX0NMT0NLX0RJVklERVIJQ0xPQ0tfVE9fRElWIChQSVhfQ0xPQ0tfVEFSR0VULCBIQ0xLKQorI2RlZmluZSBQSVhfQ0xPQ0sJCShIQ0xLL1BJWF9DTE9DS19ESVZJREVSKQorCitzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgbGNkX3BhbmVsID0geworCS5tb2RlCT0geworCQkubmFtZQkJPSAiSGl0YWNoaSA4MDB4NDgwIiwKKwkJLnhyZXMJCT0gODAwLAorCQkueXJlcwkJPSA0ODAsCisJCS5waXhjbG9jawk9IFBJWF9DTE9DSywKKwkJLmxlZnRfbWFyZ2luCT0gODgsCisJCS5yaWdodF9tYXJnaW4JPSA0MCwKKwkJLnVwcGVyX21hcmdpbgk9IDMyLAorCQkubG93ZXJfbWFyZ2luCT0gMTEsCisJCS5oc3luY19sZW4JPSAxMjgsCisJCS52c3luY19sZW4JPSAyLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfSVBDIHwgVElNMl9JSFMgfCBUSU0yX0lWUworCQkJfCAoUElYX0NMT0NLX0RJVklERVIgLSAyKSwKKwkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfV0FURVJNQVJLLAorCS5icHAJCT0gMTYsCit9OworCisjZW5kaWYKKworCisjaWYgZGVmaW5lZCBDT05GSUdfRkJfQVJNQ0xDRF9BVU9fQTA3MFZXMDFfV0lERQorCisJLyogQVUgT3B0b3Ryb25pY3MgIEEwNzBWVzAxIDcuMCBXaWRlIFNjcmVlbiBjb2xvciBEaXNwbGF5Ki8KKwkvKiBTdWJtaXR0ZWQgYnkgTWljaGVsZSBEYSBSb2xkIDxtaWNoZWxlLmRhcm9sZEBlY3Nwcm9qZWN0LmNvbT4gKi8KKworI2RlZmluZSBQSVhfQ0xPQ0tfVEFSR0VUCSgxMDAwMDAwMCkKKyNkZWZpbmUgUElYX0NMT0NLX0RJVklERVIJQ0xPQ0tfVE9fRElWIChQSVhfQ0xPQ0tfVEFSR0VULCBIQ0xLKQorI2RlZmluZSBQSVhfQ0xPQ0sJCShIQ0xLL1BJWF9DTE9DS19ESVZJREVSKQorCitzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgbGNkX3BhbmVsID0geworCS5tb2RlCT0geworCQkubmFtZQkJPSAiNy4waW4gV2lkZSAoQTA3MFZXMDEpIiwKKwkJLnhyZXMJCT0gNDgwLAorCQkueXJlcwkJPSAyMzQsCisJCS5waXhjbG9jawk9IFBJWF9DTE9DSywKKwkJLmxlZnRfbWFyZ2luCT0gMzAsCisJCS5yaWdodF9tYXJnaW4JPSAyNSwKKwkJLnVwcGVyX21hcmdpbgk9IDE0LAorCQkubG93ZXJfbWFyZ2luCT0gMTIsCisJCS5oc3luY19sZW4JPSAxMDAsCisJCS52c3luY19sZW4JPSAxLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfSVBDIHwgVElNMl9JSFMgfCBUSU0yX0lWUworCQkJfCAoUElYX0NMT0NLX0RJVklERVIgLSAyKSwKKwkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfV0FURVJNQVJLLAorCS5icHAJCT0gMTYsCit9OworCisjZW5kaWYKKworI3VuZGVmIE5TX1RPX0NMT0NLCisjdW5kZWYgQ0xPQ0tfVE9fRElWCisKKyNlbmRpZiAgLyogX19MQ0RfUEFORUxfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvc3NwLWNwbGQuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9zc3AtY3BsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMDgzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvc3NwLWNwbGQuYwpAQCAtMCwwICsxLDM0MyBAQAorLyogYXJjaC9hcm0vbWFjaC1saDdhNDB4L3NzcC1jcGxkLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgTWFyYyBTaW5nZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFNTUC9TUEkgZHJpdmVyIGZvciB0aGUgQ2FyZEVuZ2luZSBDUExELgorICoKKyAqLworCisvKiBOT1RFUworICAgLS0tLS0KKworICAgbyAqKiogVGhpcyBkcml2ZXIgaXMgY3JpYmJlZCBmcm9tIHRoZSA3OTUyeCBpbXBsZW1lbnRhdGlvbi4KKwkgU29tZSBjb21tZW50cyBtYXkgbm90IGFwcGx5LgorCisgICBvIFRoaXMgZHJpdmVyIGNvbnRhaW5zIHN1ZmZpY2llbnQgbG9naWMgdG8gY29udHJvbCBlaXRoZXIgdGhlCisgICAgIHNlcmlhbCBFRVBST01zIG9yIHRoZSBhdWRpbyBjb2RlYy4gIEl0IGlzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwKKyAgICAgdG8gc3VwcG9ydCB0aGUgY29kZWMuICBUaGUgRUVQUk9NcyBhcmUgcmVhbGx5IHRoZSByZXNwb25zaWJpbGl0eQorICAgICBvZiB0aGUgYm9vdCBsb2FkZXIgYW5kIHNob3VsZCBwcm9iYWJseSBiZSBsZWZ0IGFsb25lLgorCisgICBvIFRoZSBjb2RlIG11c3QgYmUgYXVnbWVudGVkIHRvIGNvcGUgd2l0aCBtdWx0aXBsZSwgc2ltdWx0YW5lb3VzCisgICAgIGNsaWVudHMuCisgICAgIG8gVGhlIGF1ZGlvIGNvZGVjIHdyaXRlcyB0byB0aGUgY29kZWMgY2hpcCB3aGVuZXZlciBwbGF5YmFjaworICAgICAgIHN0YXJ0cy4KKyAgICAgbyBUaGUgdG91Y2hzY3JlZW4gZHJpdmVyIHdyaXRlcyB0byB0aGUgYWRzIGNoaXAgZXZlcnkgdGltZSBpdAorICAgICAgIHNhbXBsZXMuCisgICAgIG8gVGhlIGF1ZGlvIGNvZGVjIG11c3Qgd3JpdGUgMTYgYml0cywgYnV0IHRoZSB0b3VjaCBjaGlwIHdyaXRlcworICAgICAgIGFyZSA4IGJpdHMgbG9uZy4KKyAgICAgbyBXZSBuZWVkIHRvIGJlIGFibGUgdG8ga2VlcCB0aGVzZSBjb25maWd1cmF0aW9ucyBzZXBhcmF0ZSB3aGlsZQorICAgICAgIHNpbXVsdGFuZW91c2x5IGFjdGl2ZS4KKworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKy8vI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKy8vI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9zc3AuaD4KKworLy8jZGVmaW5lIFRBTEsKKworI2lmIGRlZmluZWQgKFRBTEspCisjZGVmaW5lIFBSSU5USyhmLi4uKQkJcHJpbnRrIChmKQorI2Vsc2UKKyNkZWZpbmUgUFJJTlRLKGYuLi4pCQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkKKyMgZGVmaW5lIENQTERfU1BJRAkJX19SRUdQMTYoQ1BMRDA2X1ZJUlQpIC8qIFNQSSBkYXRhICovCisjIGRlZmluZSBDUExEX1NQSUMJCV9fUkVHUDE2KENQTEQwOF9WSVJUKSAvKiBTUEkgY29udHJvbCAqLworIyBkZWZpbmUgQ1BMRF9TUElDX0NTX0NPREVDCSgxPDwwKQorIyBkZWZpbmUgQ1BMRF9TUElDX0NTX1RPVUNICSgxPDwxKQorIyBkZWZpbmUgQ1BMRF9TUElDX1dSSVRFCSgwPDwyKQorIyBkZWZpbmUgQ1BMRF9TUElDX1JFQUQJCSgxPDwyKQorIyBkZWZpbmUgQ1BMRF9TUElDX0RPTkUJCSgxPDwzKSAvKiByL28gKi8KKyMgZGVmaW5lIENQTERfU1BJQ19MT0FECQkoMTw8NCkKKyMgZGVmaW5lIENQTERfU1BJQ19TVEFSVAkoMTw8NCkKKyMgZGVmaW5lIENQTERfU1BJQ19MT0FERUQJKDE8PDUpIC8qIHIvbyAqLworI2VuZGlmCisKKyNkZWZpbmUgQ1BMRF9TUEkJCV9fUkVHUDE2KENQTEQwQV9WSVJUKSAvKiBTUEkgb3BlcmF0aW9uICovCisjZGVmaW5lIENQTERfU1BJX0NTX0VFUFJPTQkoMTw8MykKKyNkZWZpbmUgQ1BMRF9TUElfU0NMSwkJKDE8PDIpCisjZGVmaW5lIENQTERfU1BJX1RYX1NISUZUCSgxKQorI2RlZmluZSBDUExEX1NQSV9UWAkJKDE8PENQTERfU1BJX1RYX1NISUZUKQorI2RlZmluZSBDUExEX1NQSV9SWF9TSElGVAkoMCkKKyNkZWZpbmUgQ1BMRF9TUElfUlgJCSgxPDxDUExEX1NQSV9SWF9TSElGVCkKKworLyogKioqIEZJWE1FOiB0aGVzZSB0aW1pbmcgdmFsdWVzIGFyZSBzdWJzdGFudGlhbGx5IGxhcmdlciB0aGFuIHRoZQorICAgKioqIGNoaXAgcmVxdWlyZXMuIFdlIG1heSBpbXBsZW1lbnQgYW4gbnNsZWVwICgpIGZ1bmN0aW9uLiAqLworI2RlZmluZSBUX1NLSAkxCQkvKiBDbG9jayB0aW1lIGhpZ2ggKHVzKSAqLworI2RlZmluZSBUX1NLTAkxCQkvKiBDbG9jayB0aW1lIGxvdyAodXMpICovCisjZGVmaW5lIFRfQ1MJMQkJLyogTWluaW11bSBjaGlwIHNlbGVjdCBsb3cgdGltZSAodXMpICAqLworI2RlZmluZSBUX0NTUwkxCQkvKiBNaW5pbXVtIGNoaXAgc2VsZWN0IHNldHVwIHRpbWUgKHVzKSAgKi8KKyNkZWZpbmUgVF9ESVMJMQkJLyogRGF0YSBzZXR1cCB0aW1lICh1cykgKi8KKworCSAvKiBFRVBST00gU1BJIGJpdHMgKi8KKyNkZWZpbmUgUF9TVEFSVAkJKDE8PDkpCisjZGVmaW5lIFBfV1JJVEUJCSgxPDw3KQorI2RlZmluZSBQX1JFQUQJCSgyPDw3KQorI2RlZmluZSBQX0VSQVNFCQkoMzw8NykKKyNkZWZpbmUgUF9FV0RTCQkoMDw8NykKKyNkZWZpbmUgUF9XUkFMCQkoMDw8NykKKyNkZWZpbmUgUF9FUkFMCQkoMDw8NykKKyNkZWZpbmUgUF9FV0VOCQkoMDw8NykKKyNkZWZpbmUgUF9BX0VXRFMJKDA8PDUpCisjZGVmaW5lIFBfQV9XUkFMCSgxPDw1KQorI2RlZmluZSBQX0FfRVJBTAkoMjw8NSkKKyNkZWZpbmUgUF9BX0VXRU4JKDM8PDUpCisKK3N0cnVjdCBzc3BfY29uZmlndXJhdGlvbiB7CisJaW50IGRldmljZTsKKwlpbnQgbW9kZTsKKwlpbnQgc3BlZWQ7CisJaW50IGZyYW1lX3NpemVfd3JpdGU7CisJaW50IGZyYW1lX3NpemVfcmVhZDsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3NwX2NvbmZpZ3VyYXRpb24gc3NwX2NvbmZpZ3VyYXRpb247CitzdGF0aWMgc3BpbmxvY2tfdCBzc3BfbG9jazsKKworc3RhdGljIHZvaWQgZW5hYmxlX2NzICh2b2lkKQoreworCXN3aXRjaCAoc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlKSB7CisJY2FzZSBERVZJQ0VfRUVQUk9NOgorCQlDUExEX1NQSSB8PSBDUExEX1NQSV9DU19FRVBST007CisJCWJyZWFrOworCX0KKwl1ZGVsYXkgKFRfQ1NTKTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9jcyAodm9pZCkKK3sKKwlzd2l0Y2ggKHNzcF9jb25maWd1cmF0aW9uLmRldmljZSkgeworCWNhc2UgREVWSUNFX0VFUFJPTToKKwkJQ1BMRF9TUEkgJj0gfkNQTERfU1BJX0NTX0VFUFJPTTsKKwkJYnJlYWs7CisJfQorCXVkZWxheSAoVF9DUyk7Cit9CisKK3N0YXRpYyB2b2lkIHB1bHNlX2Nsb2NrICh2b2lkKQoreworCUNQTERfU1BJIHw9ICBDUExEX1NQSV9TQ0xLOworCXVkZWxheSAoVF9TS0gpOworCUNQTERfU1BJICY9IH5DUExEX1NQSV9TQ0xLOworCXVkZWxheSAoVF9TS0wpOworfQorCisKKy8qIGV4ZWN1dGVfc3BpX2NvbW1hbmQKKworICAgc2VuZHMgYW4gc3BpIGNvbW1hbmQgdG8gYSBkZXZpY2UuICBJdCBmaXJzdCBzZW5kcyBjd3JpdGUgYml0cyBmcm9tCisgICB2LiAgSWYgY3JlYWQgaXMgZ3JlYXRlciB0aGFuIHplcm8gaXQgd2lsbCByZWFkIGNyZWFkIGJpdHMKKyAgIChkaXNjYXJkaW5nIHRoZSBsZWFkaW5nIDAgYml0KSBhbmQgcmV0dXJuIHRoZW0uICBJZiBjcmVhZCBpcyBsZXNzCisgICB0aGFuIHplcm8gaXQgd2lsbCBjaGVjayBmb3IgY29tcGxldGV0aW9uIHN0YXR1cyBhbmQgcmV0dXJuIDAgb24KKyAgIHN1Y2Nlc3Mgb3IgLTEgb24gdGltZW91dC4gIElmIGNyZWFkIGlzIHplcm8gaXQgZG9lcyBub3RoaW5nIG90aGVyCisgICB0aGFuIHNlbmRpbmcgdGhlIGNvbW1hbmQuCisKKyAgIE9uIHRoZSBMUEQ3QTQwMCwgd2UgY2FuIG9ubHkgcmVhZCBvciB3cml0ZSBtdWx0aXBsZXMgb2YgOCBiaXRzIG9uCisgICB0aGUgY29kZWMgYW5kIHRoZSB0b3VjaCBzY3JlZW4gZGV2aWNlLiAgSGVyZSwgd2Ugcm91bmQgdXAuCisKKyovCisKK3N0YXRpYyBpbnQgZXhlY3V0ZV9zcGlfY29tbWFuZCAoaW50IHYsIGludCBjd3JpdGUsIGludCBjcmVhZCkKK3sKKwl1bnNpZ25lZCBsb25nIGwgPSAwOworCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApCisJLyogVGhlIGNvZGVjIGFuZCB0b3VjaCBkZXZpY2VzIGNhbm5vdCBiZSBiaXQtYmFuZ2VkLiAgSW5zdGVhZCwKKwkgKiB0aGUgQ1BMRCBwcm92aWRlcyBhbiBlaWdodC1iaXQgc2hpZnQgcmVnaXN0ZXIgYW5kIGEgY3J1ZGUKKwkgKiBpbnRlcmZhY2UuICAqLworCWlmICggICBzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UgPT0gREVWSUNFX0NPREVDCisJICAgIHx8IHNzcF9jb25maWd1cmF0aW9uLmRldmljZSA9PSBERVZJQ0VfVE9VQ0gpIHsKKwkJaW50IHNlbGVjdCA9IDA7CisKKwkJUFJJTlRLICgic3BpKCVkICVkLiVkKSAweCUwNHgiLAorCQkJc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlLCBjd3JpdGUsIGNyZWFkLAorCQkJdik7CisjaWYgZGVmaW5lZCAoVEFMSykKKwkJaWYgKHNzcF9jb25maWd1cmF0aW9uLmRldmljZSA9PSBERVZJQ0VfQ09ERUMpCisJCQlQUklOVEsgKCIgMHglMDN4IC0+ICUyZCIsIHYgJiAweDFmZiwgKHYgPj4gOSkgJiAweDdmKTsKKyNlbmRpZgorCQlQUklOVEsgKCJcbiIpOworCisJCWlmIChzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UgPT0gREVWSUNFX0NPREVDKQorCQkJc2VsZWN0ID0gQ1BMRF9TUElDX0NTX0NPREVDOworCQlpZiAoc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlID09IERFVklDRV9UT1VDSCkKKwkJCXNlbGVjdCA9IENQTERfU1BJQ19DU19UT1VDSDsKKwkJaWYgKGN3cml0ZSkgeworCQkJZm9yIChjd3JpdGUgPSAoY3dyaXRlICsgNykvODsgY3dyaXRlLS0gPiAwOyApIHsKKwkJCQlDUExEX1NQSUQgPSAodiA+PiAoOCpjd3JpdGUpKSAmIDB4ZmY7CisJCQkJQ1BMRF9TUElDID0gc2VsZWN0IHwgQ1BMRF9TUElDX0xPQUQ7CisJCQkJd2hpbGUgKCEoQ1BMRF9TUElDICYgQ1BMRF9TUElDX0xPQURFRCkpCisJCQkJCTsKKwkJCQlDUExEX1NQSUMgPSBzZWxlY3Q7CisJCQkJd2hpbGUgKCEoQ1BMRF9TUElDICYgQ1BMRF9TUElDX0RPTkUpKQorCQkJCQk7CisJCQl9CisJCQl2ID0gMDsKKwkJfQorCQlpZiAoY3JlYWQpIHsKKwkJCW1kZWxheSAoMik7CS8qICoqKiBGSVhNRTogcmVxdWlyZWQgYnkgYWRzNzg0Mz8gKi8KKwkJCXYgPSAwOworCQkJZm9yIChjcmVhZCA9IChjcmVhZCArIDcpLzg7IGNyZWFkLS0gPiAwOykgeworCQkJCUNQTERfU1BJRCA9IDA7CisJCQkJQ1BMRF9TUElDID0gc2VsZWN0IHwgQ1BMRF9TUElDX1JFQUQKKwkJCQkJfCBDUExEX1NQSUNfU1RBUlQ7CisJCQkJd2hpbGUgKCEoQ1BMRF9TUElDICYgQ1BMRF9TUElDX0xPQURFRCkpCisJCQkJCTsKKwkJCQlDUExEX1NQSUMgPSBzZWxlY3QgfCBDUExEX1NQSUNfUkVBRDsKKwkJCQl3aGlsZSAoIShDUExEX1NQSUMgJiBDUExEX1NQSUNfRE9ORSkpCisJCQkJCTsKKwkJCQl2ID0gKHYgPDwgOCkgfCBDUExEX1NQSUQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIHY7CisJfQorI2VuZGlmCisKKwlQUklOVEsgKCJzcGkoJWQpIDB4JTA0eCAtPiAweCV4XHJcbiIsIHNzcF9jb25maWd1cmF0aW9uLmRldmljZSwKKwkJdiAmIDB4MWZmLCAodiA+PiA5KSAmIDB4N2YpOworCisJZW5hYmxlX2NzICgpOworCisJdiA8PD0gQ1BMRF9TUElfVFhfU0hJRlQ7IC8qIENvcnJlY3Rpb24gZm9yIHBvc2l0aW9uIG9mIFNQSV9UWCBiaXQgKi8KKwl3aGlsZSAoY3dyaXRlLS0pIHsKKwkJQ1BMRF9TUEkKKwkJCT0gKENQTERfU1BJICYgfkNQTERfU1BJX1RYKQorCQkJfCAoKHYgPj4gY3dyaXRlKSAmIENQTERfU1BJX1RYKTsKKwkJdWRlbGF5IChUX0RJUyk7CisJCXB1bHNlX2Nsb2NrICgpOworCX0KKworCWlmIChjcmVhZCA8IDApIHsKKwkJaW50IGRlbGF5ID0gMTA7CisJCWRpc2FibGVfY3MgKCk7CisJCXVkZWxheSAoMSk7CisJCWVuYWJsZV9jcyAoKTsKKworCQlsID0gLTE7CisJCWRvIHsKKwkJCWlmIChDUExEX1NQSSAmIENQTERfU1BJX1JYKSB7CisJCQkJbCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gd2hpbGUgKHVkZWxheSAoMSksIC0tZGVsYXkpOworCX0KKwllbHNlCisJLyogV2UgcHVsc2UgdGhlIGNsb2NrIGJlZm9yZSB0aGUgZGF0YSB0byBza2lwIHRoZSBsZWFkaW5nIHplcm8uICovCisJCXdoaWxlIChjcmVhZC0tID4gMCkgeworCQkJcHVsc2VfY2xvY2sgKCk7CisJCQlsID0gKGw8PDEpCisJCQkJfCAoKChDUExEX1NQSSAmIENQTERfU1BJX1JYKQorCQkJCSAgICA+PiBDUExEX1NQSV9SWF9TSElGVCkgJiAweDEpOworCQl9CisKKwlkaXNhYmxlX2NzICgpOworCXJldHVybiBsOworfQorCitzdGF0aWMgaW50IHNzcF9pbml0ICh2b2lkKQoreworCXNwaW5fbG9ja19pbml0ICgmc3NwX2xvY2spOworCW1lbXNldCAoJnNzcF9jb25maWd1cmF0aW9uLCAwLCBzaXplb2YgKHNzcF9jb25maWd1cmF0aW9uKSk7CisJcmV0dXJuIDA7Cit9CisKKworLyogc3NwX2NoaXBfc2VsZWN0CisKKyAgIGRyb3BzIHRoZSBjaGlwIHNlbGVjdCBsaW5lIGZvciB0aGUgQ1BMRCBzaGlmdC1yZWdpc3RlciBjb250cm9sbGVkCisgICBkZXZpY2VzLiAgSXQgZG9lc24ndCBlbmFibGUgY2hpcAorCisqLworCitzdGF0aWMgdm9pZCBzc3BfY2hpcF9zZWxlY3QgKGludCBlbmFibGUpCit7CisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApCisJaW50IHNlbGVjdDsKKworCWlmIChzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UgPT0gREVWSUNFX0NPREVDKQorCQlzZWxlY3QgPSBDUExEX1NQSUNfQ1NfQ09ERUM7CisJZWxzZSBpZiAoc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlID09IERFVklDRV9UT1VDSCkKKwkJc2VsZWN0ID0gQ1BMRF9TUElDX0NTX1RPVUNIOworCWVsc2UKKwkJcmV0dXJuOworCisJaWYgKGVuYWJsZSkKKwkJQ1BMRF9TUElDID0gc2VsZWN0OworCWVsc2UKKwkJQ1BMRF9TUElDID0gMDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBzc3BfYWNxdWlyZSAodm9pZCkKK3sKKwlzcGluX2xvY2sgKCZzc3BfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHNzcF9yZWxlYXNlICh2b2lkKQoreworCXNzcF9jaGlwX3NlbGVjdCAoMCk7CS8qIGp1c3QgaW4gY2FzZSAqLworCXNwaW5fdW5sb2NrICgmc3NwX2xvY2spOworfQorCitzdGF0aWMgaW50IHNzcF9jb25maWd1cmUgKGludCBkZXZpY2UsIGludCBtb2RlLCBpbnQgc3BlZWQsCisJCQkgICBpbnQgZnJhbWVfc2l6ZV93cml0ZSwgaW50IGZyYW1lX3NpemVfcmVhZCkKK3sKKwlzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UJCT0gZGV2aWNlOworCXNzcF9jb25maWd1cmF0aW9uLm1vZGUJCQk9IG1vZGU7CisJc3NwX2NvbmZpZ3VyYXRpb24uc3BlZWQJCQk9IHNwZWVkOworCXNzcF9jb25maWd1cmF0aW9uLmZyYW1lX3NpemVfd3JpdGUJPSBmcmFtZV9zaXplX3dyaXRlOworCXNzcF9jb25maWd1cmF0aW9uLmZyYW1lX3NpemVfcmVhZAk9IGZyYW1lX3NpemVfcmVhZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzcF9yZWFkICh2b2lkKQoreworCXJldHVybiBleGVjdXRlX3NwaV9jb21tYW5kICgwLCAwLCBzc3BfY29uZmlndXJhdGlvbi5mcmFtZV9zaXplX3JlYWQpOworfQorCitzdGF0aWMgaW50IHNzcF93cml0ZSAodTE2IGRhdGEpCit7CisJZXhlY3V0ZV9zcGlfY29tbWFuZCAoZGF0YSwgc3NwX2NvbmZpZ3VyYXRpb24uZnJhbWVfc2l6ZV93cml0ZSwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3NwX3dyaXRlX3JlYWQgKHUxNiBkYXRhKQoreworCXJldHVybiBleGVjdXRlX3NwaV9jb21tYW5kIChkYXRhLCBzc3BfY29uZmlndXJhdGlvbi5mcmFtZV9zaXplX3dyaXRlLAorCQkJCSAgICBzc3BfY29uZmlndXJhdGlvbi5mcmFtZV9zaXplX3JlYWQpOworfQorCitzdHJ1Y3Qgc3NwX2RyaXZlciBsaDdhNDB4X2NwbGRfc3NwX2RyaXZlciA9IHsKKwkuaW5pdAkJPSBzc3BfaW5pdCwKKwkuYWNxdWlyZQk9IHNzcF9hY3F1aXJlLAorCS5yZWxlYXNlCT0gc3NwX3JlbGVhc2UsCisJLmNvbmZpZ3VyZQk9IHNzcF9jb25maWd1cmUsCisJLmNoaXBfc2VsZWN0CT0gc3NwX2NoaXBfc2VsZWN0LAorCS5yZWFkCQk9IHNzcF9yZWFkLAorCS53cml0ZQkJPSBzc3Bfd3JpdGUsCisJLndyaXRlX3JlYWQJPSBzc3Bfd3JpdGVfcmVhZCwKK307CisKKworTU9EVUxFX0FVVEhPUigiTWFyYyBTaW5nZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTFBEN0E0MFggQ1BMRCBTUEkgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L3RpbWUuYwppbmRleCBiZTM3N2UzLi5lZjlhZjM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC90aW1lLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiAgYXJjaC9hcm0vbWFjaC1saDdhNDB4L3RpbWUuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudApAQCAtNTcsNyArNTcsNyBAQAogCS5oYW5kbGVyCT0gbGg3YTQweF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbGg3YTQweF90aW1lcl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbGg3YTQweF90aW1lcl9pbml0ICh2b2lkKQogewogCQkJCS8qIFN0b3AvZGlzYWJsZSBhbGwgdGltZXJzICovCiAJVElNRVJfQ09OVFJPTDEgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTdjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvTWFrZWZpbGUKQEAgLTAsMCArMSwxMiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworb2JqLXkJCQk6PSBjb3JlLm8gaXJxLm8gdGltZS5vIGNsb2NrLm8gZ3Bpby5vIHNlcmlhbC5vIGRtYS5vCitvYmotbQkJCTo9CitvYmotbgkJCTo9CitvYmotCQkJOj0KKworIyBQb3dlciBNYW5hZ2VtZW50CitvYmotJChDT05GSUdfUE0pICs9IHBtLm8gc2xlZXAubworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YzcxMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDQgQEAKKyAgIHpyZWxhZGRyLXkJCTo9IDB4ODAwMDgwMDAKK3BhcmFtc19waHlzLXkJCTo9IDB4ODAwMDAxMDAKK2luaXRyZF9waHlzLXkJCTo9IDB4ODA4MDAwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODViMjJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMKQEAgLTAsMCArMSwxMDEwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMKKyAqCisgKiBDbG9jayBjb250cm9sIGRyaXZlciBmb3IgUE5YNDAwOAorICoKKyAqIEF1dGhvcnM6IFZpdGFseSBXb29sLCBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICogR2VuZXJpYyBjbG9jayBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhcmUgcGFydGlhbGx5IGJhc2VkIG9uOgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9jbG9jay5jCisgKgorICogMjAwNS0yMDA2IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlICJjbG9jay5oIgorCisvKmZvcndhcmQgZGVjbGFyYXRpb24qLworc3RhdGljIHN0cnVjdCBjbGsgcGVyX2NrOworc3RhdGljIHN0cnVjdCBjbGsgaGNsa19jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrXzFNSHo7CitzdGF0aWMgc3RydWN0IGNsayBja18xM01IejsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrX3BsbDE7CitzdGF0aWMgaW50IGxvY2FsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xvY2tfbG9jayh2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbG9ja191bmxvY2sodm9pZCkKK3sKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlzdHJ1Y3QgY2xrICp0bXBfY2xrOworCisJdG1wX2NsayA9IGNsazsKKwl3aGlsZSAodG1wX2Nsay0+cHJvcGFnYXRlX25leHQpIHsKKwkJdG1wX2NsayA9IHRtcF9jbGstPnByb3BhZ2F0ZV9uZXh0OworCQlsb2NhbF9zZXRfcmF0ZSh0bXBfY2xrLCB0bXBfY2xrLT51c2VyX3JhdGUpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsa19yZWdfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+ZW5hYmxlX3JlZykKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgJgorCQkJICAgICB+KDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpLCBjbGstPmVuYWJsZV9yZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xrX3JlZ19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPmVuYWJsZV9yZWcpCisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpIHwKKwkJCSAgICAgKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpLCBjbGstPmVuYWJsZV9yZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xrX3JlZ19kaXNhYmxlMShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+ZW5hYmxlX3JlZzEpCisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcxKSAmCisJCQkgICAgIH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdDEpLCBjbGstPmVuYWJsZV9yZWcxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsa19yZWdfZW5hYmxlMShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+ZW5hYmxlX3JlZzEpCisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcxKSB8CisJCQkgICAgICgxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0MSksIGNsay0+ZW5hYmxlX3JlZzEpOworfQorCitzdGF0aWMgaW50IGNsa193YWl0X2Zvcl9wbGxfbG9jayhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGk7CisJaSA9IDA7CisJd2hpbGUgKGkrKyA8IDB4RkZGICYmICEoX19yYXdfcmVhZGwoY2xrLT5zY2FsZV9yZWcpICYgMSkpIDsJLyp3YWl0IGZvciBQTEwgdG8gbG9jayAqLworCisJaWYgKCEoX19yYXdfcmVhZGwoY2xrLT5zY2FsZV9yZWcpICYgMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXMgRVJST1I6IGZhaWxlZCB0byBsb2NrLCBzY2FsZSByZWcgZGF0YTogJXhcbiIsCisJCSAgICAgICBjbGstPm5hbWUsIF9fcmF3X3JlYWRsKGNsay0+c2NhbGVfcmVnKSk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3dpdGNoX3RvX2RpcnR5XzEzbWh6KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCXUzMiB0bXBfcmVnOworCisJcmV0ID0gMDsKKworCWlmICghY2xrLT5yYXRlKQorCQljbGtfcmVnX2VuYWJsZTEoY2xrKTsKKworCXRtcF9yZWcgPSBfX3Jhd19yZWFkbChjbGstPnBhcmVudF9zd2l0Y2hfcmVnKTsKKwkvKmlmIDEzTWh6IGNsb2NrIHNlbGVjdGVkLCBzZWxlY3QgMTMnTUh6IChkaXJ0eSkgc291cmNlIGZyb20gT1NDICovCisJaWYgKCEodG1wX3JlZyAmIDEpKSB7CisJCXRtcF9yZWcgfD0gKDEgPDwgMSk7CS8qIFRyaWdnZXIgc3dpdGNoIHRvIDEzJ01IeiAoZGlydHkpIGNsb2NrICovCisJCV9fcmF3X3dyaXRlbCh0bXBfcmVnLCBjbGstPnBhcmVudF9zd2l0Y2hfcmVnKTsKKwkJaSA9IDA7CisJCXdoaWxlIChpKysgPCAweEZGRiAmJiAhKF9fcmF3X3JlYWRsKGNsay0+cGFyZW50X3N3aXRjaF9yZWcpICYgMSkpIDsJLyp3YWl0IGZvciAxMydNSHogc2VsZWN0aW9uIHN0YXR1cyAqLworCisJCWlmICghKF9fcmF3X3JlYWRsKGNsay0+cGFyZW50X3N3aXRjaF9yZWcpICYgMSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlcyBFUlJPUjogZmFpbGVkIHRvIHNlbGVjdCAxMydNSHosIHBhcmVudCBzdyByZWcgZGF0YTogJXhcbiIsCisJCQkgICAgICAgY2xrLT5uYW1lLCBfX3Jhd19yZWFkbChjbGstPnBhcmVudF9zd2l0Y2hfcmVnKSk7CisJCQlyZXQgPSAtMTsKKwkJfQorCX0KKworCWlmICghY2xrLT5yYXRlKQorCQljbGtfcmVnX2Rpc2FibGUxKGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN3aXRjaF90b19jbGVhbl8xM21oeihzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGk7CisJaW50IHJldDsKKwl1MzIgdG1wX3JlZzsKKworCXJldCA9IDA7CisKKwlpZiAoIWNsay0+cmF0ZSkKKwkJY2xrX3JlZ19lbmFibGUxKGNsayk7CisKKwl0bXBfcmVnID0gX19yYXdfcmVhZGwoY2xrLT5wYXJlbnRfc3dpdGNoX3JlZyk7CisJLyppZiAxMydNaHogY2xvY2sgc2VsZWN0ZWQsIHNlbGVjdCAxM01IeiAoY2xlYW4pIHNvdXJjZSBmcm9tIE9TQyAqLworCWlmICh0bXBfcmVnICYgMSkgeworCQl0bXBfcmVnICY9IH4oMSA8PCAxKTsJLyogVHJpZ2dlciBzd2l0Y2ggdG8gMTNNSHogKGNsZWFuKSBjbG9jayAqLworCQlfX3Jhd193cml0ZWwodG1wX3JlZywgY2xrLT5wYXJlbnRfc3dpdGNoX3JlZyk7CisJCWkgPSAwOworCQl3aGlsZSAoaSsrIDwgMHhGRkYgJiYgKF9fcmF3X3JlYWRsKGNsay0+cGFyZW50X3N3aXRjaF9yZWcpICYgMSkpIDsJLyp3YWl0IGZvciAxM01IeiBzZWxlY3Rpb24gc3RhdHVzICovCisKKwkJaWYgKF9fcmF3X3JlYWRsKGNsay0+cGFyZW50X3N3aXRjaF9yZWcpICYgMSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzIEVSUk9SOiBmYWlsZWQgdG8gc2VsZWN0IDEzTUh6LCBwYXJlbnQgc3cgcmVnIGRhdGE6ICV4XG4iLAorCQkJICAgICAgIGNsay0+bmFtZSwgX19yYXdfcmVhZGwoY2xrLT5wYXJlbnRfc3dpdGNoX3JlZykpOworCQkJcmV0ID0gLTE7CisJCX0KKwl9CisKKwlpZiAoIWNsay0+cmF0ZSkKKwkJY2xrX3JlZ19kaXNhYmxlMShjbGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZXRfMTNNSHpfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKHBhcmVudCA9PSAmY2tfMTNNSHopCisJCXJldCA9IHN3aXRjaF90b19jbGVhbl8xM21oeihjbGspOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2tfcGxsMSkKKwkJcmV0ID0gc3dpdGNoX3RvX2RpcnR5XzEzbWh6KGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFBMTDE2MF9NSU5fRkNDTyAxNTYwMDAKKyNkZWZpbmUgUExMMTYwX01BWF9GQ0NPIDMyMDAwMAorCisvKgorICogQ2FsY3VsYXRlIHBsbDE2MCBzZXR0aW5ncy4KKyAqIFBvc3NpYmxlIGlucHV0OiB1cCB0byAzMjBNSHogd2l0aCBzdGVwIG9mIGNsay0+cGFyZW50LT5yYXRlLgorICogSW4gUE5YNDAwOCBwYXJlbnQgcmF0ZSBmb3IgcGxsMTYwcyBtYXkgYmUgZWl0aGVyIDEgb3IgMTNNSHouCisgKiBJZ25vcmVkIHBhdGhzOiAiZmVlZGJhY2siIChiaXQgMTMgc2V0KSwgImRpdi1ieS1OIi4KKyAqIFNldHRpbmcgQVJNIFBMTDQgcmF0ZSB0byAwIHdpbGwgcHV0IENQVSBpbnRvIGRpcmVjdCBydW4gbW9kZS4KKyAqIFNldHRpbmcgUExMNSBhbmQgUExMMyByYXRlIHRvIDAgd2lsbCBkaXNhYmxlIFVTQiBhbmQgRFNQIGNsb2NrIGlucHV0LgorICogUGxlYXNlIHJlZmVyIHRvIFBOWDQwMDggSUMgbWFudWFsIGZvciBkZXRhaWxzLgorICovCisKK3N0YXRpYyBpbnQgcGxsMTYwX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJdTMyIHRtcF9yZWcsIHRtcF9tLCB0bXBfMnAsIGk7CisJdTMyIHBhcmVudF9yYXRlOworCWludCByZXQgPSAtRUlOVkFMOworCisJcGFyZW50X3JhdGUgPSBjbGstPnBhcmVudC0+cmF0ZTsKKworCWlmICghcGFyZW50X3JhdGUpCisJCWdvdG8gb3V0OworCisJLyogc2V0IGRpcmVjdCBydW4gZm9yIEFSTSBvciBkaXNhYmxlIG91dHB1dCBmb3Igb3RoZXJzICAqLworCWNsa19yZWdfZGlzYWJsZShjbGspOworCisJLyogZGlzYWJsZSBzb3VyY2UgaW5wdXQgYXMgd2VsbCAoaWdub3JlZCBmb3IgQVJNKSAqLworCWNsa19yZWdfZGlzYWJsZTEoY2xrKTsKKworCXRtcF9yZWcgPSBfX3Jhd19yZWFkbChjbGstPnNjYWxlX3JlZyk7CisJdG1wX3JlZyAmPSB+MHgxZmZmZjsJLypjbGVhciBhbGwgc2V0dGluZ3MsIHBvd2VyIGRvd24gKi8KKwlfX3Jhd193cml0ZWwodG1wX3JlZywgY2xrLT5zY2FsZV9yZWcpOworCisJcmF0ZSAtPSByYXRlICUgcGFyZW50X3JhdGU7CS8qcm91bmQgZG93biB0aGUgaW5wdXQgKi8KKworCWlmIChyYXRlID4gUExMMTYwX01BWF9GQ0NPKQorCQlyYXRlID0gUExMMTYwX01BWF9GQ0NPOworCisJaWYgKCFyYXRlKSB7CisJCWNsay0+cmF0ZSA9IDA7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWNsa19yZWdfZW5hYmxlMShjbGspOworCXRtcF9yZWcgPSBfX3Jhd19yZWFkbChjbGstPnNjYWxlX3JlZyk7CisKKwlpZiAocmF0ZSA9PSBwYXJlbnRfcmF0ZSkgeworCQkvKmVudGVyIGRpcmVjdCBieXBhc3MgbW9kZSAqLworCQl0bXBfcmVnIHw9ICgoMSA8PCAxNCkgfCAoMSA8PCAxNSkpOworCQlfX3Jhd193cml0ZWwodG1wX3JlZywgY2xrLT5zY2FsZV9yZWcpOworCQljbGstPnJhdGUgPSBwYXJlbnRfcmF0ZTsKKwkJY2xrX3JlZ19lbmFibGUoY2xrKTsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJaSA9IDA7CisJZm9yICh0bXBfMnAgPSAxOyB0bXBfMnAgPCAxNjsgdG1wXzJwIDw8PSAxKSB7CisJCWlmIChyYXRlICogdG1wXzJwID49IFBMTDE2MF9NSU5fRkNDTykKKwkJCWJyZWFrOworCQlpKys7CisJfQorCisJaWYgKHRtcF8ycCA+IDEpCisJCXRtcF9yZWcgfD0gKChpIC0gMSkgPDwgMTEpOworCWVsc2UKKwkJdG1wX3JlZyB8PSAoMSA8PCAxNCk7CS8qZGlyZWN0IG1vZGUsIG5vIGRpdmlkZSAqLworCisJdG1wX20gPSByYXRlICogdG1wXzJwOworCXRtcF9tIC89IHBhcmVudF9yYXRlOworCisJdG1wX3JlZyB8PSAodG1wX20gLSAxKSA8PCAxOwkvKmNhbGN1bGF0ZSBNICovCisJdG1wX3JlZyB8PSAoMSA8PCAxNik7CS8qcG93ZXIgdXAgUExMICovCisJX19yYXdfd3JpdGVsKHRtcF9yZWcsIGNsay0+c2NhbGVfcmVnKTsKKworCWlmIChjbGtfd2FpdF9mb3JfcGxsX2xvY2soY2xrKSA8IDApIHsKKwkJY2xrX3JlZ19kaXNhYmxlKGNsayk7CisJCWNsa19yZWdfZGlzYWJsZTEoY2xrKTsKKworCQl0bXBfcmVnID0gX19yYXdfcmVhZGwoY2xrLT5zY2FsZV9yZWcpOworCQl0bXBfcmVnICY9IH4weDFmZmZmOwkvKmNsZWFyIGFsbCBzZXR0aW5ncywgcG93ZXIgZG93biAqLworCQlfX3Jhd193cml0ZWwodG1wX3JlZywgY2xrLT5zY2FsZV9yZWcpOworCQljbGstPnJhdGUgPSAwOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwljbGstPnJhdGUgPSAodG1wX20gKiBwYXJlbnRfcmF0ZSkgLyB0bXBfMnA7CisKKwlpZiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKworCWNsa19yZWdfZW5hYmxlKGNsayk7CisJcmV0ID0gMDsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qY29uZmlndXJlIFBFUl9DTEsqLworc3RhdGljIGludCBwZXJfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJdTMyIHRtcDsKKworCXRtcCA9IF9fcmF3X3JlYWRsKGNsay0+c2NhbGVfcmVnKTsKKwl0bXAgJj0gfigweDFmIDw8IDIpOworCXRtcCB8PSAoKGNsay0+cGFyZW50LT5yYXRlIC8gY2xrLT5yYXRlKSAtIDEpIDw8IDI7CisJX19yYXdfd3JpdGVsKHRtcCwgY2xrLT5zY2FsZV9yZWcpOworCWNsay0+cmF0ZSA9IHJhdGU7CisJcmV0dXJuIDA7Cit9CisKKy8qY29uZmlndXJlIEhDTEsqLworc3RhdGljIGludCBoY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJdTMyIHRtcDsKKwl0bXAgPSBfX3Jhd19yZWFkbChjbGstPnNjYWxlX3JlZyk7CisJdG1wID0gdG1wICYgfjB4MzsKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDE6CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdG1wIHw9IDE7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdG1wIHw9IDI7CisJCWJyZWFrOworCX0KKworCV9fcmF3X3dyaXRlbCh0bXAsIGNsay0+c2NhbGVfcmVnKTsKKwljbGstPnJhdGUgPSByYXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGhjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMToKKwljYXNlIDQ6CisJCXJldHVybiByYXRlOworCX0KKwlyZXR1cm4gMjsKK30KKworc3RhdGljIHUzMiBwZXJfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlyZXR1cm4gQ0xLX1JBVEVfMTNNSFo7Cit9CisKK3N0YXRpYyBpbnQgb25fb2ZmX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJaWYgKHJhdGUpIHsKKwkJY2xrX3JlZ19lbmFibGUoY2xrKTsKKwkJY2xrLT5yYXRlID0gMTsKKwl9IGVsc2UgeworCQljbGtfcmVnX2Rpc2FibGUoY2xrKTsKKwkJY2xrLT5yYXRlID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb25fb2ZmX2ludl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCWlmIChyYXRlKSB7CisJCWNsa19yZWdfZGlzYWJsZShjbGspOwkvKmVuYWJsZSBiaXQgaXMgaW52ZXJ0ZWQgKi8KKwkJY2xrLT5yYXRlID0gMTsKKwl9IGVsc2UgeworCQljbGtfcmVnX2VuYWJsZShjbGspOworCQljbGstPnJhdGUgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBvbl9vZmZfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCXJldHVybiAocmF0ZSA/IDEgOiAwKTsKK30KKworc3RhdGljIHUzMiBwbGw0X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlpZiAocmF0ZSA+IENMS19SQVRFXzIwOE1IWikKKwkJcmF0ZSA9IENMS19SQVRFXzIwOE1IWjsKKwlpZiAocmF0ZSA9PSBDTEtfUkFURV8yMDhNSFogJiYgaGNsa19jay51c2VyX3JhdGUgPT0gMSkKKwkJcmF0ZSA9IENMS19SQVRFXzIwOE1IWiAtIENMS19SQVRFXzEzTUhaOworCXJldHVybiAocmF0ZSAtIChyYXRlICUgKGhjbGtfY2sudXNlcl9yYXRlICogQ0xLX1JBVEVfMTNNSFopKSk7Cit9CisKK3N0YXRpYyB1MzIgcGxsM19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJaWYgKHJhdGUgPiBDTEtfUkFURV8yMDhNSFopCisJCXJhdGUgPSBDTEtfUkFURV8yMDhNSFo7CisJcmV0dXJuIChyYXRlIC0gcmF0ZSAlIENMS19SQVRFXzEzTUhaKTsKK30KKworc3RhdGljIHUzMiBwbGw1X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlyZXR1cm4gKHJhdGUgPyBDTEtfUkFURV80OE1IWiA6IDApOworfQorCitzdGF0aWMgdTMyIGNrXzEzTUh6X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlyZXR1cm4gKHJhdGUgPyBDTEtfUkFURV8xM01IWiA6IDApOworfQorCitzdGF0aWMgaW50IGNrXzEzTUh6X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJaWYgKHJhdGUpIHsKKwkJY2xrX3JlZ19kaXNhYmxlKGNsayk7CS8qZW5hYmxlIGJpdCBpcyBpbnZlcnRlZCAqLworCQl1ZGVsYXkoNTAwKTsKKwkJY2xrLT5yYXRlID0gQ0xLX1JBVEVfMTNNSFo7CisJCWNrXzFNSHoucmF0ZSA9IENMS19SQVRFXzFNSFo7CisJfSBlbHNlIHsKKwkJY2xrX3JlZ19lbmFibGUoY2xrKTsKKwkJY2xrLT5yYXRlID0gMDsKKwkJY2tfMU1Iei5yYXRlID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGxsMV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworI2lmIDAgLyogZG9lc24ndCB3b3JrIG9uIHNvbWUgYm9hcmRzLCBwcm9iYWJseSBhIEhXIEJVRyAqLworCWlmIChyYXRlKSB7CisJCWNsa19yZWdfZGlzYWJsZShjbGspOwkvKmVuYWJsZSBiaXQgaXMgaW52ZXJ0ZWQgKi8KKwkJaWYgKCFjbGtfd2FpdF9mb3JfcGxsX2xvY2soY2xrKSkgeworCQkJY2xrLT5yYXRlID0gQ0xLX1JBVEVfMTNNSFo7CisJCX0gZWxzZSB7CisJCQljbGtfcmVnX2VuYWJsZShjbGspOworCQkJY2xrLT5yYXRlID0gMDsKKwkJfQorCisJfSBlbHNlIHsKKwkJY2xrX3JlZ19lbmFibGUoY2xrKTsKKwkJY2xrLT5yYXRlID0gMDsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyogQ2xvY2sgc291cmNlcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBvc2NfMTNNSHogPSB7CisJLm5hbWUgPSAib3NjXzEzTUh6IiwKKwkuZmxhZ3MgPSBGSVhFRF9SQVRFLAorCS5yYXRlID0gQ0xLX1JBVEVfMTNNSFosCit9OworCitzdGF0aWMgc3RydWN0IGNsayBja18xM01IeiA9IHsKKwkubmFtZSA9ICJja18xM01IeiIsCisJLnBhcmVudCA9ICZvc2NfMTNNSHosCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmY2tfMTNNSHpfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmY2tfMTNNSHpfc2V0X3JhdGUsCisJLmVuYWJsZV9yZWcgPSBPU0MxM0NUUkxfUkVHLAorCS5lbmFibGVfc2hpZnQgPSAwLAorCS5yYXRlID0gQ0xLX1JBVEVfMTNNSFosCit9OworCitzdGF0aWMgc3RydWN0IGNsayBvc2NfMzJLSHogPSB7CisJLm5hbWUgPSAib3NjXzMyS0h6IiwKKwkuZmxhZ3MgPSBGSVhFRF9SQVRFLAorCS5yYXRlID0gQ0xLX1JBVEVfMzJLSFosCit9OworCisvKmF0dGFjaGVkIHRvIFBMTDUqLworc3RhdGljIHN0cnVjdCBjbGsgY2tfMU1IeiA9IHsKKwkubmFtZSA9ICJja18xTUh6IiwKKwkuZmxhZ3MgPSBGSVhFRF9SQVRFIHwgUEFSRU5UX1NFVF9SQVRFLAorCS5wYXJlbnQgPSAmY2tfMTNNSHosCit9OworCisvKiBQTEwxICgzOTcpIC0gcHJvdmlkZXMgMTMnIE1IeiBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgY2tfcGxsMSA9IHsKKwkubmFtZSA9ICJja19wbGwxIiwKKwkucGFyZW50ID0gJm9zY18zMktIeiwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZja18xM01Iel9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZwbGwxX3NldF9yYXRlLAorCS5lbmFibGVfcmVnID0gUExMQ1RSTF9SRUcsCisJLmVuYWJsZV9zaGlmdCA9IDEsCisJLnNjYWxlX3JlZyA9IFBMTENUUkxfUkVHLAorCS5yYXRlID0gQ0xLX1JBVEVfMTNNSFosCit9OworCisvKiBDUFUvQnVzIFBMTCAqLworc3RhdGljIHN0cnVjdCBjbGsgY2tfcGxsNCA9IHsKKwkubmFtZSA9ICJja19wbGw0IiwKKwkucGFyZW50ID0gJmNrX3BsbDEsCisJLmZsYWdzID0gUkFURV9QUk9QQUdBVEVTIHwgTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnByb3BhZ2F0ZV9uZXh0ID0gJnBlcl9jaywKKwkucm91bmRfcmF0ZSA9ICZwbGw0X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJnBsbDE2MF9zZXRfcmF0ZSwKKwkucmF0ZSA9IENMS19SQVRFXzIwOE1IWiwKKwkuc2NhbGVfcmVnID0gSENMS1BMTENUUkxfUkVHLAorCS5lbmFibGVfcmVnID0gUFdSQ1RSTF9SRUcsCisJLmVuYWJsZV9zaGlmdCA9IDIsCisJLnBhcmVudF9zd2l0Y2hfcmVnID0gU1lTQ0xLQ1RSTF9SRUcsCisJLnNldF9wYXJlbnQgPSAmc2V0XzEzTUh6X3BhcmVudCwKK307CisKKy8qIFVTQiBQTEwgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrX3BsbDUgPSB7CisJLm5hbWUgPSAiY2tfcGxsNSIsCisJLnBhcmVudCA9ICZja18xTUh6LAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJnBsbDVfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmcGxsMTYwX3NldF9yYXRlLAorCS5zY2FsZV9yZWcgPSBVU0JDVFJMX1JFRywKKwkuZW5hYmxlX3JlZyA9IFVTQkNUUkxfUkVHLAorCS5lbmFibGVfc2hpZnQgPSAxOCwKKwkuZW5hYmxlX3JlZzEgPSBVU0JDVFJMX1JFRywKKwkuZW5hYmxlX3NoaWZ0MSA9IDE3LAorfTsKKworLyogWFBFUlRUZWFrIERTUCBQTEwgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrX3BsbDMgPSB7CisJLm5hbWUgPSAiY2tfcGxsMyIsCisJLnBhcmVudCA9ICZja19wbGwxLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJnBsbDNfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmcGxsMTYwX3NldF9yYXRlLAorCS5zY2FsZV9yZWcgPSBEU1BQTExDVFJMX1JFRywKKwkuZW5hYmxlX3JlZyA9IERTUENMS0NUUkxfUkVHLAorCS5lbmFibGVfc2hpZnQgPSAzLAorCS5lbmFibGVfcmVnMSA9IERTUENMS0NUUkxfUkVHLAorCS5lbmFibGVfc2hpZnQxID0gMiwKKwkucGFyZW50X3N3aXRjaF9yZWcgPSBEU1BDTEtDVFJMX1JFRywKKwkuc2V0X3BhcmVudCA9ICZzZXRfMTNNSHpfcGFyZW50LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGNsa19jayA9IHsKKwkubmFtZSA9ICJoY2xrX2NrIiwKKwkucGFyZW50ID0gJmNrX3BsbDQsCisJLmZsYWdzID0gUEFSRU5UX1NFVF9SQVRFLAorCS5zZXRfcmF0ZSA9ICZoY2xrX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlID0gJmhjbGtfcm91bmRfcmF0ZSwKKwkuc2NhbGVfcmVnID0gSENMS0RJVkNUUkxfUkVHLAorCS5yYXRlID0gMiwKKwkudXNlcl9yYXRlID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9jayA9IHsKKwkubmFtZSA9ICJwZXJfY2siLAorCS5wYXJlbnQgPSAmY2tfcGxsNCwKKwkuZmxhZ3MgPSBGSVhFRF9SQVRFLAorCS5wcm9wYWdhdGVfbmV4dCA9ICZoY2xrX2NrLAorCS5zZXRfcmF0ZSA9ICZwZXJfY2xrX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlID0gJnBlcl9jbGtfcm91bmRfcmF0ZSwKKwkuc2NhbGVfcmVnID0gSENMS0RJVkNUUkxfUkVHLAorCS5yYXRlID0gQ0xLX1JBVEVfMTNNSFosCisJLnVzZXJfcmF0ZSA9IENMS19SQVRFXzEzTUhaLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbTJoY2xrX2NrID0geworCS5uYW1lID0gIm0yaGNsa19jayIsCisJLnBhcmVudCA9ICZoY2xrX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfaW52X3NldF9yYXRlLAorCS5yYXRlID0gMSwKKwkuZW5hYmxlX3NoaWZ0ID0gNiwKKwkuZW5hYmxlX3JlZyA9IFBXUkNUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmZwOV9jayA9IHsKKwkubmFtZSA9ICJ2ZnA5X2NrIiwKKwkucGFyZW50ID0gJmNrX3BsbDQsCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkucmF0ZSA9IDEsCisJLmVuYWJsZV9zaGlmdCA9IDQsCisJLmVuYWJsZV9yZWcgPSBWRlA5Q0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBrZXlzY2FuX2NrID0geworCS5uYW1lID0gImtleXNjYW5fY2siLAorCS5wYXJlbnQgPSAmb3NjXzMyS0h6LAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDAsCisJLmVuYWJsZV9yZWcgPSBLRVlDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRvdWNoX2NrID0geworCS5uYW1lID0gInRvdWNoX2NrIiwKKwkucGFyZW50ID0gJm9zY18zMktIeiwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAwLAorCS5lbmFibGVfcmVnID0gVFNDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHB3bTFfY2sgPSB7CisJLm5hbWUgPSAicHdtMV9jayIsCisJLnBhcmVudCA9ICZvc2NfMzJLSHosCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMCwKKwkuZW5hYmxlX3JlZyA9IFBXTUNMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcHdtMl9jayA9IHsKKwkubmFtZSA9ICJwd20yX2NrIiwKKwkucGFyZW50ID0gJm9zY18zMktIeiwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAyLAorCS5lbmFibGVfcmVnID0gUFdNQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBqcGVnX2NrID0geworCS5uYW1lID0gImpwZWdfY2siLAorCS5wYXJlbnQgPSAmaGNsa19jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAwLAorCS5lbmFibGVfcmVnID0gSlBFR0NMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNfY2sgPSB7CisJLm5hbWUgPSAibXNfY2siLAorCS5wYXJlbnQgPSAmY2tfcGxsNCwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSA1LAorCS5lbmFibGVfcmVnID0gTVNDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGR1bV9jayA9IHsKKwkubmFtZSA9ICJkdW1fY2siLAorCS5wYXJlbnQgPSAmaGNsa19jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAwLAorCS5lbmFibGVfcmVnID0gRFVNQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmbGFzaF9jayA9IHsKKwkubmFtZSA9ICJmbGFzaF9jayIsCisJLnBhcmVudCA9ICZoY2xrX2NrLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDEsCS8qIE9ubHkgTUxDIGNsb2NrIHN1cHBvcnRlZCAqLworCS5lbmFibGVfcmVnID0gRkxBU0hDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzBfY2sgPSB7CisJLm5hbWUgPSAiaTJjMF9jayIsCisJLnBhcmVudCA9ICZwZXJfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMCwKKwkuZW5hYmxlX3JlZyA9IEkyQ0NMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9jayA9IHsKKwkubmFtZSA9ICJpMmMxX2NrIiwKKwkucGFyZW50ID0gJnBlcl9jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAxLAorCS5lbmFibGVfcmVnID0gSTJDQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2NrID0geworCS5uYW1lID0gImkyYzJfY2siLAorCS5wYXJlbnQgPSAmcGVyX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDIsCisJLmVuYWJsZV9yZWcgPSBVU0JfT1RHX0NMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jayA9IHsKKwkubmFtZSA9ICJzcGkwX2NrIiwKKwkucGFyZW50ID0gJmhjbGtfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMCwKKwkuZW5hYmxlX3JlZyA9IFNQSUNUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jayA9IHsKKwkubmFtZSA9ICJzcGkxX2NrIiwKKwkucGFyZW50ID0gJmhjbGtfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gNCwKKwkuZW5hYmxlX3JlZyA9IFNQSUNUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NrID0geworCS5uYW1lID0gImRtYV9jayIsCisJLnBhcmVudCA9ICZoY2xrX2NrLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDAsCisJLmVuYWJsZV9yZWcgPSBETUFDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2NrID0geworCS5uYW1lID0gInVhcnQzX2NrIiwKKwkucGFyZW50ID0gJnBlcl9jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5yYXRlID0gMSwKKwkuZW5hYmxlX3NoaWZ0ID0gMCwKKwkuZW5hYmxlX3JlZyA9IFVBUlRDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQ0X2NrID0geworCS5uYW1lID0gInVhcnQ0X2NrIiwKKwkucGFyZW50ID0gJnBlcl9jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAxLAorCS5lbmFibGVfcmVnID0gVUFSVENMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDVfY2sgPSB7CisJLm5hbWUgPSAidWFydDVfY2siLAorCS5wYXJlbnQgPSAmcGVyX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLnJhdGUgPSAxLAorCS5lbmFibGVfc2hpZnQgPSAyLAorCS5lbmFibGVfcmVnID0gVUFSVENMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDZfY2sgPSB7CisJLm5hbWUgPSAidWFydDZfY2siLAorCS5wYXJlbnQgPSAmcGVyX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDMsCisJLmVuYWJsZV9yZWcgPSBVQVJUQ0xLQ1RSTF9SRUcsCit9OworCisvKiBUaGVzZSBjbG9ja3MgYXJlIHZpc2libGUgb3V0c2lkZSB0aGlzIG1vZHVsZQorICogYW5kIGNhbiBiZSBpbml0aWFsaXplZAorICovCitzdGF0aWMgc3RydWN0IGNsayAqb25jaGlwX2Nsa3NbXSA9IHsKKwkmY2tfMTNNSHosCisJJmNrX3BsbDEsCisJJmNrX3BsbDQsCisJJmNrX3BsbDUsCisJJmNrX3BsbDMsCisJJnZmcDlfY2ssCisJJm0yaGNsa19jaywKKwkmaGNsa19jaywKKwkmZG1hX2NrLAorCSZmbGFzaF9jaywKKwkmZHVtX2NrLAorCSZrZXlzY2FuX2NrLAorCSZwd20xX2NrLAorCSZwd20yX2NrLAorCSZqcGVnX2NrLAorCSZtc19jaywKKwkmdG91Y2hfY2ssCisJJmkyYzBfY2ssCisJJmkyYzFfY2ssCisJJmkyYzJfY2ssCisJJnNwaTBfY2ssCisJJnNwaTFfY2ssCisJJnVhcnQzX2NrLAorCSZ1YXJ0NF9jaywKKwkmdWFydDVfY2ssCisJJnVhcnQ2X2NrLAorfTsKKworc3RhdGljIGludCBsb2NhbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCWludCByZXQgPSAtRUlOVkFMOworCWlmIChjbGstPnNldF9yYXRlKSB7CisKKwkJaWYgKGNsay0+dXNlcl9yYXRlID09IGNsay0+cmF0ZSAmJiBjbGstPnBhcmVudC0+cmF0ZSkgeworCQkJLyogaWYgY2xvY2sgZW5hYmxlZCBvciByYXRlIG5vdCBzZXQgKi8KKwkJCWNsay0+dXNlcl9yYXRlID0gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgY2xrLT51c2VyX3JhdGUpOworCQl9IGVsc2UKKwkJCWNsay0+dXNlcl9yYXRlID0gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJCXJldCA9IDA7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoY2xrLT5mbGFncyAmIEZJWEVEX1JBVEUpCisJCWdvdG8gb3V0OworCisJY2xvY2tfbG9jaygpOworCWlmICgoY2xrLT5mbGFncyAmIFBBUkVOVF9TRVRfUkFURSkgJiYgY2xrLT5wYXJlbnQpIHsKKworCQljbGstPnVzZXJfcmF0ZSA9IGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOworCQkvKiBwYXJlbnQgY2xvY2sgbmVlZHMgdG8gYmUgcmVmcmVzaGVkCisJCSAgIGZvciB0aGUgc2V0dGluZyB0byB0YWtlIGVmZmVjdCAqLworCX0gZWxzZSB7CisJCXJldCA9IGxvY2FsX3NldF9yYXRlKGNsaywgcmF0ZSk7CisJfQorCXJldCA9IDA7CisJY2xvY2tfdW5sb2NrKCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOworCXN0cnVjdCBjbGsgKipjbGtwOworCisJY2xvY2tfbG9jaygpOworCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MgKyBBUlJBWV9TSVpFKG9uY2hpcF9jbGtzKTsKKwkgICAgIGNsa3ArKykgeworCQlpZiAoc3RyY21wKGlkLCAoKmNsa3ApLT5uYW1lKSA9PSAwCisJCSAgICAmJiB0cnlfbW9kdWxlX2dldCgoKmNsa3ApLT5vd25lcikpIHsKKwkJCWNsayA9ICgqY2xrcCk7CisJCQlicmVhazsKKwkJfQorCX0KKwljbG9ja191bmxvY2soKTsKKworCXJldHVybiBjbGs7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXQpOworCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworCWNsb2NrX2xvY2soKTsKKwlpZiAoY2xrICYmICFJU19FUlIoY2xrKSkKKwkJbW9kdWxlX3B1dChjbGstPm93bmVyKTsKKwljbG9ja191bmxvY2soKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3B1dCk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJldDsKKwljbG9ja19sb2NrKCk7CisJcmV0ID0gY2xrLT5yYXRlOworCWNsb2NrX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKK3N0YXRpYyBpbnQgbG9jYWxfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIShjbGstPmZsYWdzICYgRklYRURfUkFURSkgJiYgIWNsay0+cmF0ZSAmJiBjbGstPnNldF9yYXRlCisJICAgICYmIGNsay0+dXNlcl9yYXRlKQorCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgY2xrLT51c2VyX3JhdGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGxvY2FsX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIShjbGstPmZsYWdzICYgRklYRURfUkFURSkgJiYgY2xrLT5yYXRlICYmIGNsay0+c2V0X3JhdGUpCisJCWNsay0+c2V0X3JhdGUoY2xrLCAwKTsKK30KKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCisJY2xvY2tfbG9jaygpOworCXJldCA9IGxvY2FsX2Nsa19lbmFibGUoY2xrKTsKKwljbG9ja191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbG9ja19sb2NrKCk7CisJbG9jYWxfY2xrX2Rpc2FibGUoY2xrKTsKKwljbG9ja191bmxvY2soKTsKK30KKworRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK3N0YXRpYyB2b2lkIGxvY2FsX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgeworCQlsb2NhbF9jbGtfZGlzYWJsZShjbGspOworCQlpZiAoY2xrLT5wYXJlbnQpCisJCQlsb2NhbF9jbGtfdW51c2UoY2xrLT5wYXJlbnQpOworCX0KK30KKworc3RhdGljIGludCBsb2NhbF9jbGtfdXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0ID0gMDsKKwlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKKwkJaWYgKGNsay0+cGFyZW50KQorCQkJcmV0ID0gbG9jYWxfY2xrX3VzZShjbGstPnBhcmVudCk7CisKKwkJaWYgKHJldCAhPSAwKSB7CisJCQljbGstPnVzZWNvdW50LS07CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldCA9IGxvY2FsX2Nsa19lbmFibGUoY2xrKTsKKworCQlpZiAocmV0ICE9IDAgJiYgY2xrLT5wYXJlbnQpIHsKKwkJCWxvY2FsX2Nsa191bnVzZShjbGstPnBhcmVudCk7CisJCQljbGstPnVzZWNvdW50LS07CisJCX0KKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyogVGhlIG1haW4gcHVycG9zZSBvZiBjbGtfdXNlIGFucyBjbGtfdW51c2UgZnVuY3Rpb25zCisgKiBpcyB0byBjb250cm9sIHN3aXRjaGluZyAxM01IeiBvc2NpbGxhdG9yIGFuZCBQTEwxICgxMydNSHopLAorICogc28gdGhhdCB0aGV5IGFyZSBkaXNhYmxlZCB3aGVuZXZlciBub25lIG9mIFBMTDItNSBpcyB1c2luZyB0aGVtLgorICogQWx0aG91Z2ggaW4gdGhlb3J5IHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgd29yayB3aXRoIGFueSBjbG9jaywKKyAqIHBsZWFzZSB1c2UgdGhlbSBvbmx5IG9uIFBMTDIgLSBQTEw1IHRvIGF2b2lkIGNvbmZ1c2lvbi4KKyAqLworaW50IGNsa191c2Uoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCisJY2xvY2tfbG9jaygpOworCXJldCA9IGxvY2FsX2Nsa191c2UoY2xrKTsKKwljbG9ja191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfdXNlKTsKKwordm9pZCBjbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKQoreworCisJY2xvY2tfbG9jaygpOworCWxvY2FsX2Nsa191bnVzZShjbGspOworCWNsb2NrX3VubG9jaygpOworfQorCitFWFBPUlRfU1lNQk9MKGNsa191bnVzZSk7CisKK2xvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJbG9uZyByZXQ7CisJY2xvY2tfbG9jaygpOworCWlmIChjbGstPnJvdW5kX3JhdGUpCisJCXJldCA9IGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOworCWVsc2UKKwkJcmV0ID0gY2xrLT5yYXRlOworCWNsb2NrX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOworCitpbnQgY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaW50IHJldCA9IC1FTk9ERVY7CisJaWYgKCFjbGstPnNldF9wYXJlbnQpCisJCWdvdG8gb3V0OworCisJY2xvY2tfbG9jaygpOworCXJldCA9IGNsay0+c2V0X3BhcmVudChjbGssIHBhcmVudCk7CisJaWYgKCFyZXQpCisJCWNsay0+cGFyZW50ID0gcGFyZW50OworCWNsb2NrX3VubG9jaygpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqKmNsa3A7CisKKwkvKiBEaXNhYmxlIGF1dG9jbG9ja2luZywgYXMgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsgKi8KKwlfX3Jhd193cml0ZWwoMHhmZiwgQVVUT0NMS19DVFJMKTsKKworCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MgKyBBUlJBWV9TSVpFKG9uY2hpcF9jbGtzKTsKKwkgICAgIGNsa3ArKykgeworCQlpZiAoKCgqY2xrcCktPmZsYWdzICYgTkVFRFNfSU5JVElBTElaQVRJT04pCisJCSAgICAmJiAoKCpjbGtwKS0+c2V0X3JhdGUpKSB7CisJCQkoKmNsa3ApLT51c2VyX3JhdGUgPSAoKmNsa3ApLT5yYXRlOworCQkJbG9jYWxfc2V0X3JhdGUoKCpjbGtwKSwgKCpjbGtwKS0+dXNlcl9yYXRlKTsKKwkJCWlmICgoKmNsa3ApLT5zZXRfcGFyZW50KQorCQkJCSgqY2xrcCktPnNldF9wYXJlbnQoKCpjbGtwKSwgKCpjbGtwKS0+cGFyZW50KTsKKwkJfQorCQlwcl9kZWJ1ZygiJXM6IGNsb2NrICVzLCByYXRlICVsZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgKCpjbGtwKS0+bmFtZSwgKCpjbGtwKS0+cmF0ZSk7CisJfQorCisJY2xrX3VzZSgmY2tfcGxsNCk7CisKKwkvKiBpZiBja18xM01IeiBpcyBub3QgdXNlZCwgZGlzYWJsZSBpdC4gKi8KKwlpZiAoY2tfMTNNSHoudXNlY291bnQgPT0gMCkKKwkJbG9jYWxfY2xrX2Rpc2FibGUoJmNrXzEzTUh6KTsKKworCS8qIERpc2FibGUgYXV0b2Nsb2NraW5nICovCisJX19yYXdfd3JpdGViKDB4ZmYsIEFVVE9DTEtfQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChjbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNThmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suaApAQCAtMCwwICsxLDQzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmgKKyAqCisgKiBDbG9jayBjb250cm9sIGRyaXZlciBmb3IgUE5YNDAwOCAtIGludGVybmFsIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yOiBWaXRhbHkgV29vbCA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBfX0FSQ0hfQVJNX1BOWDQwMDhfQ0xPQ0tfSF9fCisjZGVmaW5lIF9fQVJDSF9BUk1fUE5YNDAwOF9DTE9DS19IX18KKworc3RydWN0IGNsayB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGNsayAqcGFyZW50OworCXN0cnVjdCBjbGsgKnByb3BhZ2F0ZV9uZXh0OworCXUzMiByYXRlOworCXUzMiB1c2VyX3JhdGU7CisJczggdXNlY291bnQ7CisJdTMyIGZsYWdzOworCXUzMiBzY2FsZV9yZWc7CisJdTggZW5hYmxlX3NoaWZ0OworCXUzMiBlbmFibGVfcmVnOworCXU4IGVuYWJsZV9zaGlmdDE7CisJdTMyIGVuYWJsZV9yZWcxOworCXUzMiBwYXJlbnRfc3dpdGNoX3JlZzsKKwkgdTMyKCpyb3VuZF9yYXRlKSAoc3RydWN0IGNsayAqLCB1MzIpOworCWludCAoKnNldF9yYXRlKSAoc3RydWN0IGNsayAqLCB1MzIpOworCWludCAoKnNldF9wYXJlbnQpIChzdHJ1Y3QgY2xrICogY2xrLCBzdHJ1Y3QgY2xrICogcGFyZW50KTsKK307CisKKy8qIEZsYWdzICovCisjZGVmaW5lIFJBVEVfUFJPUEFHQVRFUyAgICAgICgxPDwwKQorI2RlZmluZSBORUVEU19JTklUSUFMSVpBVElPTiAoMTw8MSkKKyNkZWZpbmUgUEFSRU5UX1NFVF9SQVRFICAgICAgKDE8PDIpCisjZGVmaW5lIEZJWEVEX1JBVEUgICAgICAgICAgICgxPDwzKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOTFkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY29yZS5jCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1wbng0MDA4L2NvcmUuYworICoKKyAqIFBOWDQwMDggY29yZSBzdGFydHVwIGNvZGUKKyAqCisgKiBBdXRob3JzOiBWaXRhbHkgV29vbCwgRG1pdHJ5IENoaWdpcmV2LAorICogR3JpZ29yeSBUb2xzdG9seXRraW4sIERtaXRyeSBQZXJ2dXNoaW4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIEJhc2VkIG9uIHJlZmVyZW5jZSBjb2RlIHJlY2VpdmVkIGZyb20gUGhpbGlwczoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBQaGlsaXBzIFNlbWljb25kdWN0b3JzCisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CisKK3N0cnVjdCByZXNvdXJjZSBzcGlwbnhfMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IFBOWDQwMDhfU1BJMV9CQVNFLAorCQkuZW5kID0gUE5YNDAwOF9TUEkxX0JBU0UgKyBTWl80SywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBQRVJfU1BJMV9SRUNfWE1JVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwgeworCQkuc3RhcnQgPSBTUEkxX0lOVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0sCit9OworCitzdHJ1Y3QgcmVzb3VyY2Ugc3BpcG54XzFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBQTlg0MDA4X1NQSTJfQkFTRSwKKwkJLmVuZCA9IFBOWDQwMDhfU1BJMl9CQVNFICsgU1pfNEssCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gUEVSX1NQSTJfUkVDX1hNSVQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sIHsKKwkJLnN0YXJ0ID0gU1BJMl9JTlQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLmZsYWdzID0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcwk9ICJtMjVwODAiLAorCQkubWF4X3NwZWVkX2h6CT0gMTAwMDAwMCwKKwkJLmJ1c19udW0JPSAxLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGlwbnhfMSA9IHsKKwkubmFtZSA9ICJzcGlwbngiLAorCS5pZCA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHNwaXBueF8wX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gc3BpcG54XzBfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4RkZGRkZGRkYsCisJCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGlwbnhfMiA9IHsKKwkubmFtZSA9ICJzcGlwbngiLAorCS5pZCA9IDIsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHNwaXBueF8xX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gc3BpcG54XzFfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4RkZGRkZGRkYsCisJCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHBsYXRmb3JtX3NlcmlhbF9wb3J0c1tdID0geworCXsKKwkJLm1lbWJhc2UgPSAodm9pZCAqKV9faW9tZW0oSU9fQUREUkVTUyhQTlg0MDA4X1VBUlQ1X0JBU0UpKSwKKwkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZylQTlg0MDA4X1VBUlQ1X0JBU0UsCisJCS5pcnEgPSBJSVI1X0lOVCwKKwkJLnVhcnRjbGsgPSBQTlg0MDA4X1VBUlRfQ0xLLAorCQkucmVnc2hpZnQgPSAyLAorCQkuaW90eXBlID0gVVBJT19NRU0sCisJCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX0JVR0dZX1VBUlQgfCBVUEZfU0tJUF9URVNULAorCX0sCisJeworCQkubWVtYmFzZSA9ICh2b2lkICopX19pb21lbShJT19BRERSRVNTKFBOWDQwMDhfVUFSVDNfQkFTRSkpLAorCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKVBOWDQwMDhfVUFSVDNfQkFTRSwKKwkJLmlycSA9IElJUjNfSU5ULAorCQkudWFydGNsayA9IFBOWDQwMDhfVUFSVF9DTEssCisJCS5yZWdzaGlmdCA9IDIsCisJCS5pb3R5cGUgPSBVUElPX01FTSwKKwkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfQlVHR1lfVUFSVCB8IFVQRl9TS0lQX1RFU1QsCisJIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUgPSAic2VyaWFsODI1MCIsCisJLmlkID0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBsYXRmb3JtX3NlcmlhbF9wb3J0cywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzcGlwbnhfMSwKKwkmc3BpcG54XzIsCisJJnNlcmlhbF9kZXZpY2UsCit9OworCisKK2V4dGVybiB2b2lkIHBueDQwMDhfdWFydF9pbml0KHZvaWQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgcG54NDAwOF9pbml0KHZvaWQpCit7CisJLypkaXNhYmxlIGFsbCBTVEFSVCBpbnRlcnJ1cHQgc291cmNlcywKKwkgICBhbmQgY2xlYXIgYWxsIFNUQVJUIGludGVycnVwdCBmbGFncyAqLworCV9fcmF3X3dyaXRlbCgwLCBTVEFSVF9JTlRfRVJfUkVHKFNFX1BJTl9CQVNFX0lOVCkpOworCV9fcmF3X3dyaXRlbCgwLCBTVEFSVF9JTlRfRVJfUkVHKFNFX0lOVF9CQVNFX0lOVCkpOworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBTVEFSVF9JTlRfUlNSX1JFRyhTRV9QSU5fQkFTRV9JTlQpKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgU1RBUlRfSU5UX1JTUl9SRUcoU0VfSU5UX0JBU0VfSU5UKSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGlfYm9hcmRfaW5mbykpOworCS8qIFN3aXRjaCBvbiB0aGUgVUFSVCBjbG9ja3MgKi8KKwlwbng0MDA4X3VhcnRfaW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHBueDQwMDhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbCAJPSBJT19BRERSRVNTKFBOWDQwMDhfSVJBTV9CQVNFKSwKKwkJLnBmbiAJCT0gX19waHlzX3RvX3BmbihQTlg0MDA4X0lSQU1fQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNjRLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwgCT0gSU9fQUREUkVTUyhQTlg0MDA4X05ERl9GTEFTSF9CQVNFKSwKKwkJLnBmbiAJCT0gX19waHlzX3RvX3BmbihQTlg0MDA4X05ERl9GTEFTSF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl8xTSAtIFNaXzEyOEssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbCAJPSBJT19BRERSRVNTKFBOWDQwMDhfSlBFR19DT05GSUdfQkFTRSksCisJCS5wZm4gCQk9IF9fcGh5c190b19wZm4oUE5YNDAwOF9KUEVHX0NPTkZJR19CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl8xMjhLICogMywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsIAk9IElPX0FERFJFU1MoUE5YNDAwOF9ETUFfQ09ORklHX0JBU0UpLAorCQkucGZuIAkJPSBfX3BoeXNfdG9fcGZuKFBOWDQwMDhfRE1BX0NPTkZJR19CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl8xTSwKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsIAk9IElPX0FERFJFU1MoUE5YNDAwOF9BSEIyRkFCX0JBU0UpLAorCQkucGZuIAkJPSBfX3BoeXNfdG9fcGZuKFBOWDQwMDhfQUhCMkZBQl9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl8xTSwKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgcG54NDAwOF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQocG54NDAwOF9pb19kZXNjLCBBUlJBWV9TSVpFKHBueDQwMDhfaW9fZGVzYykpOworfQorCitleHRlcm4gc3RydWN0IHN5c190aW1lciBwbng0MDA4X3RpbWVyOworCitNQUNISU5FX1NUQVJUKFBOWDQwMDgsICJQaGlsaXBzIFBOWDQwMDgiKQorCS8qIE1haW50YWluZXI6IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLiAqLworCS5waHlzX2lvIAkJPSAweDQwMDkwMDAwLAorCS5pb19wZ19vZmZzdCAJCT0gKDB4ZjQwOTAwMDAgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwkJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8gCQk9IHBueDQwMDhfbWFwX2lvLAorCS5pbml0X2lycSAJCT0gcG54NDAwOF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lIAkJPSBwbng0MDA4X2luaXQsCisJLnRpbWVyIAkJCT0gJnBueDQwMDhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MWFhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvZG1hLmMKQEAgLTAsMCArMSwxMTA5IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcG54NDAwOC9kbWEuYworICoKKyAqICBQTlg0MDA4IERNQSByZWdpc3RyYXRpb24gYW5kIElSUSBkaXNwYXRjaGluZworICoKKyAqICBBdXRob3I6CVZpdGFseSBXb29sCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4gKGMpIDIwMDUKKyAqCisgKiAgQmFzZWQgb24gdGhlIGNvZGUgZnJvbSBOaWNvbGFzIFBpdHJlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2NoYW5uZWwgeworCWNoYXIgKm5hbWU7CisJdm9pZCAoKmlycV9oYW5kbGVyKSAoaW50LCBpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisJdm9pZCAqZGF0YTsKKwlzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKmxsOworCXUzMiBsbF9kbWE7CisJdm9pZCAqdGFyZ2V0X2FkZHI7CisJaW50IHRhcmdldF9pZDsKK30gZG1hX2NoYW5uZWxzW01BWF9ETUFfQ0hBTk5FTFNdOworCitzdGF0aWMgc3RydWN0IGxsX3Bvb2wgeworCXZvaWQgKnZhZGRyOworCXZvaWQgKmN1cjsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWludCBjb3VudDsKK30gbGxfcG9vbDsKKworc3RhdGljIHNwaW5sb2NrX3QgbGxfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworc3RydWN0IHBueDQwMDhfZG1hX2xsICpwbng0MDA4X2FsbG9jX2xsX2VudHJ5KGRtYV9hZGRyX3QgKiBsbF9kbWEpCit7CisJc3RydWN0IHBueDQwMDhfZG1hX2xsICpsbCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsbF9sb2NrLCBmbGFncyk7CisJaWYgKGxsX3Bvb2wuY291bnQgPiA0KSB7IC8qIGNhbiBnaXZlIG9uZSBtb3JlICovCisJCWxsID0gKihzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKiopIGxsX3Bvb2wuY3VyOworCQkqbGxfZG1hID0gbGxfcG9vbC5kbWFfYWRkciArICgodm9pZCAqKWxsIC0gbGxfcG9vbC52YWRkcik7CisJCSoodm9pZCAqKilsbF9wb29sLmN1ciA9ICoqKHZvaWQgKioqKWxsX3Bvb2wuY3VyOworCQltZW1zZXQobGwsIDAsIHNpemVvZigqbGwpKTsKKwkJbGxfcG9vbC5jb3VudC0tOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsbF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gbGw7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfYWxsb2NfbGxfZW50cnkpOworCit2b2lkIHBueDQwMDhfZnJlZV9sbF9lbnRyeShzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKiBsbCwgZG1hX2FkZHJfdCBsbF9kbWEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChsbCkgeworCQlpZiAoKHVuc2lnbmVkIGxvbmcpKChsb25nKWxsIC0gKGxvbmcpbGxfcG9vbC52YWRkcikgPiAweDQwMDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGZyZWUgZW50cnkgbm90IGFsbG9jYXRlZCBieSBETUFcbiIpOworCQkJQlVHKCk7CisJCX0KKworCQlpZiAobGwtPmZsYWdzICYgRE1BX0JVRkZFUl9BTExPQ0FURUQpCisJCQlsbC0+ZnJlZShsbC0+YWxsb2NfZGF0YSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxsX2xvY2ssIGZsYWdzKTsKKwkJKihsb25nICopbGwgPSAqKGxvbmcgKilsbF9wb29sLmN1cjsKKwkJKihsb25nICopbGxfcG9vbC5jdXIgPSAobG9uZylsbDsKKwkJbGxfcG9vbC5jb3VudCsrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsbF9sb2NrLCBmbGFncyk7CisJfQorfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2ZyZWVfbGxfZW50cnkpOworCit2b2lkIHBueDQwMDhfZnJlZV9sbCh1MzIgbGxfZG1hLCBzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKiBsbCkKK3sKKwlzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKnB0cjsKKwl1MzIgZG1hOworCisJd2hpbGUgKGxsKSB7CisJCWRtYSA9IGxsLT5uZXh0X2RtYTsKKwkJcHRyID0gbGwtPm5leHQ7CisJCXBueDQwMDhfZnJlZV9sbF9lbnRyeShsbCwgbGxfZG1hKTsKKworCQlsbF9kbWEgPSBkbWE7CisJCWxsID0gcHRyOworCX0KK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9mcmVlX2xsKTsKKworc3RhdGljIGludCBkbWFfY2hhbm5lbHNfcmVxdWVzdGVkID0gMDsKKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9pbmNyZW1lbnRfdXNhZ2Uodm9pZCkKK3sKKwlpZiAoIWRtYV9jaGFubmVsc19yZXF1ZXN0ZWQrKykgeworCQlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KDAsICJkbWFfY2siKTsKKwkJaWYgKCFJU19FUlIoY2xrKSkgeworCQkJY2xrX3NldF9yYXRlKGNsaywgMSk7CisJCQljbGtfcHV0KGNsayk7CisJCX0KKwkJcG54NDAwOF9jb25maWdfZG1hKC0xLCAtMSwgMSk7CisJfQorfQorc3RhdGljIGlubGluZSB2b2lkIGRtYV9kZWNyZW1lbnRfdXNhZ2Uodm9pZCkKK3sKKwlpZiAoIS0tZG1hX2NoYW5uZWxzX3JlcXVlc3RlZCkgeworCQlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KDAsICJkbWFfY2siKTsKKwkJaWYgKCFJU19FUlIoY2xrKSkgeworCQkJY2xrX3NldF9yYXRlKGNsaywgMCk7CisJCQljbGtfcHV0KGNsayk7CisJCX0KKwkJcG54NDAwOF9jb25maWdfZG1hKC0xLCAtMSwgMCk7CisKKwl9Cit9CisKK3N0YXRpYyBzcGlubG9ja190IGRtYV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCitzdGF0aWMgaW5saW5lIHZvaWQgcG54NDAwOF9kbWFfbG9jayh2b2lkKQoreworCXNwaW5fbG9ja19pcnEoJmRtYV9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBueDQwMDhfZG1hX3VubG9jayh2b2lkKQoreworCXNwaW5fdW5sb2NrX2lycSgmZG1hX2xvY2spOworfQorCisjZGVmaW5lIFZBTElEX0NIQU5ORUwoYykJKCgoYykgPj0gMCkgJiYgKChjKSA8IE1BWF9ETUFfQ0hBTk5FTFMpKQorCitpbnQgcG54NDAwOF9yZXF1ZXN0X2NoYW5uZWwoY2hhciAqbmFtZSwgaW50IGNoLAorCQkJICAgIHZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgaW50LCB2b2lkICosCisJCQkJCQkgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpCit7CisJaW50IGksIGZvdW5kID0gMDsKKworCS8qIGJhc2ljIHNhbml0eSBjaGVja3MgKi8KKwlpZiAoIW5hbWUgfHwgKGNoICE9IC0xICYmICFWQUxJRF9DSEFOTkVMKGNoKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcG54NDAwOF9kbWFfbG9jaygpOworCisJLyogdHJ5IGdyYWJiaW5nIGEgRE1BIGNoYW5uZWwgd2l0aCB0aGUgcmVxdWVzdGVkIHByaW9yaXR5ICovCisJZm9yIChpID0gTUFYX0RNQV9DSEFOTkVMUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmICghZG1hX2NoYW5uZWxzW2ldLm5hbWUgJiYgKGNoID09IC0xIHx8IGNoID09IGkpKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZCkgeworCQlkbWFfaW5jcmVtZW50X3VzYWdlKCk7CisJCWRtYV9jaGFubmVsc1tpXS5uYW1lID0gbmFtZTsKKwkJZG1hX2NoYW5uZWxzW2ldLmlycV9oYW5kbGVyID0gaXJxX2hhbmRsZXI7CisJCWRtYV9jaGFubmVsc1tpXS5kYXRhID0gZGF0YTsKKwkJZG1hX2NoYW5uZWxzW2ldLmxsID0gTlVMTDsKKwkJZG1hX2NoYW5uZWxzW2ldLmxsX2RtYSA9IDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gbW9yZSBhdmFpbGFibGUgRE1BIGNoYW5uZWxzIGZvciAlc1xuIiwKKwkJICAgICAgIG5hbWUpOworCQlpID0gLUVOT0RFVjsKKwl9CisKKwlwbng0MDA4X2RtYV91bmxvY2soKTsKKwlyZXR1cm4gaTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9yZXF1ZXN0X2NoYW5uZWwpOworCit2b2lkIHBueDQwMDhfZnJlZV9jaGFubmVsKGludCBjaCkKK3sKKwlpZiAoIWRtYV9jaGFubmVsc1tjaF0ubmFtZSkgeworCQlwcmludGsoS0VSTl9DUklUCisJCSAgICAgICAiJXM6IHRyeWluZyB0byBmcmVlIGNoYW5uZWwgJWQgd2hpY2ggaXMgYWxyZWFkeSBmcmVlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgY2gpOworCQlyZXR1cm47CisJfQorCisJcG54NDAwOF9kbWFfbG9jaygpOworCXBueDQwMDhfZnJlZV9sbChkbWFfY2hhbm5lbHNbY2hdLmxsX2RtYSwgZG1hX2NoYW5uZWxzW2NoXS5sbCk7CisJZG1hX2NoYW5uZWxzW2NoXS5sbCA9IE5VTEw7CisJZG1hX2RlY3JlbWVudF91c2FnZSgpOworCisJZG1hX2NoYW5uZWxzW2NoXS5uYW1lID0gTlVMTDsKKwlwbng0MDA4X2RtYV91bmxvY2soKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9mcmVlX2NoYW5uZWwpOworCitpbnQgcG54NDAwOF9jb25maWdfZG1hKGludCBhaGJfbTFfYmUsIGludCBhaGJfbTJfYmUsIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBkbWFfY2ZnID0gX19yYXdfcmVhZGwoRE1BQ19DT05GSUcpOworCisJc3dpdGNoIChhaGJfbTFfYmUpIHsKKwljYXNlIDA6CisJCWRtYV9jZmcgJj0gfigxIDw8IDEpOworCQlicmVhazsKKwljYXNlIDE6CisJCWRtYV9jZmcgfD0gKDEgPDwgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoYWhiX20yX2JlKSB7CisJY2FzZSAwOgorCQlkbWFfY2ZnICY9IH4oMSA8PCAyKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkbWFfY2ZnIHw9ICgxIDw8IDIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGVuYWJsZSkgeworCWNhc2UgMDoKKwkJZG1hX2NmZyAmPSB+KDEgPDwgMCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZG1hX2NmZyB8PSAoMSA8PCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcG54NDAwOF9kbWFfbG9jaygpOworCV9fcmF3X3dyaXRlbChkbWFfY2ZnLCBETUFDX0NPTkZJRyk7CisJcG54NDAwOF9kbWFfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9jb25maWdfZG1hKTsKKworaW50IHBueDQwMDhfZG1hX3BhY2tfY29udHJvbChjb25zdCBzdHJ1Y3QgcG54NDAwOF9kbWFfY2hfY3RybCAqIGNoX2N0cmwsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmN0cmwpCit7CisJaW50IGkgPSAwLCBkYnNpemUsIHNic2l6ZSwgZXJyID0gMDsKKworCWlmICghY3RybCB8fCAhY2hfY3RybCkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkqY3RybCA9IDA7CisKKwlzd2l0Y2ggKGNoX2N0cmwtPnRjX21hc2spIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmN0cmwgfD0gKDEgPDwgMzEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAoY2hfY3RybC0+Y2FjaGVhYmxlKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjdHJsIHw9ICgxIDw8IDMwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jdHJsLT5idWZmZXJhYmxlKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjdHJsIHw9ICgxIDw8IDI5KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jdHJsLT5wcml2X21vZGUpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmN0cmwgfD0gKDEgPDwgMjgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2N0cmwtPmRpKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjdHJsIHw9ICgxIDw8IDI3KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jdHJsLT5zaSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY3RybCB8PSAoMSA8PCAyNik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY3RybC0+ZGVzdF9haGIxKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjdHJsIHw9ICgxIDw8IDI1KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jdHJsLT5zcmNfYWhiMSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY3RybCB8PSAoMSA8PCAyNCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY3RybC0+ZHdpZHRoKSB7CisJY2FzZSBXSURUSF9CWVRFOgorCQkqY3RybCAmPSB+KDcgPDwgMjEpOworCQlicmVhazsKKwljYXNlIFdJRFRIX0hXT1JEOgorCQkqY3RybCAmPSB+KDcgPDwgMjEpOworCQkqY3RybCB8PSAoMSA8PCAyMSk7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfV09SRDoKKwkJKmN0cmwgJj0gfig3IDw8IDIxKTsKKwkJKmN0cmwgfD0gKDIgPDwgMjEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2N0cmwtPnN3aWR0aCkgeworCWNhc2UgV0lEVEhfQllURToKKwkJKmN0cmwgJj0gfig3IDw8IDE4KTsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9IV09SRDoKKwkJKmN0cmwgJj0gfig3IDw8IDE4KTsKKwkJKmN0cmwgfD0gKDEgPDwgMTgpOworCQlicmVhazsKKwljYXNlIFdJRFRIX1dPUkQ6CisJCSpjdHJsICY9IH4oNyA8PCAxOCk7CisJCSpjdHJsIHw9ICgyIDw8IDE4KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJZGJzaXplID0gY2hfY3RybC0+ZGJzaXplOworCXdoaWxlICghKGRic2l6ZSAmIDEpKSB7CisJCWkrKzsKKwkJZGJzaXplID4+PSAxOworCX0KKwlpZiAoY2hfY3RybC0+ZGJzaXplICE9IDEgfHwgaSA+IDggfHwgaSA9PSAxKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAoaSA+IDEpCisJCWktLTsKKwkqY3RybCAmPSB+KDcgPDwgMTUpOworCSpjdHJsIHw9IChpIDw8IDE1KTsKKworCXNic2l6ZSA9IGNoX2N0cmwtPnNic2l6ZTsKKwl3aGlsZSAoIShzYnNpemUgJiAxKSkgeworCQlpKys7CisJCXNic2l6ZSA+Pj0gMTsKKwl9CisJaWYgKGNoX2N0cmwtPnNic2l6ZSAhPSAxIHx8IGkgPiA4IHx8IGkgPT0gMSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGkgPiAxKQorCQlpLS07CisJKmN0cmwgJj0gfig3IDw8IDEyKTsKKwkqY3RybCB8PSAoaSA8PCAxMik7CisKKwlpZiAoY2hfY3RybC0+dHJfc2l6ZSA+IDB4N2ZmKSB7CisJCWVyciA9IC1FMkJJRzsKKwkJZ290byBvdXQ7CisJfQorCSpjdHJsICY9IH4weDdmZjsKKwkqY3RybCB8PSBjaF9jdHJsLT50cl9zaXplICYgMHg3ZmY7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2RtYV9wYWNrX2NvbnRyb2wpOworCitpbnQgcG54NDAwOF9kbWFfcGFyc2VfY29udHJvbCh1bnNpZ25lZCBsb25nIGN0cmwsCisJCQkgICAgICBzdHJ1Y3QgcG54NDAwOF9kbWFfY2hfY3RybCAqIGNoX2N0cmwpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIWNoX2N0cmwpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJY2hfY3RybC0+dHJfc2l6ZSA9IGN0cmwgJiAweDdmZjsKKwljdHJsID4+PSAxMjsKKworCWNoX2N0cmwtPnNic2l6ZSA9IDEgPDwgKGN0cmwgJiA3KTsKKwlpZiAoY2hfY3RybC0+c2JzaXplID4gMSkKKwkJY2hfY3RybC0+c2JzaXplIDw8PSAxOworCWN0cmwgPj49IDM7CisKKwljaF9jdHJsLT5kYnNpemUgPSAxIDw8IChjdHJsICYgNyk7CisJaWYgKGNoX2N0cmwtPmRic2l6ZSA+IDEpCisJCWNoX2N0cmwtPmRic2l6ZSA8PD0gMTsKKwljdHJsID4+PSAzOworCisJc3dpdGNoIChjdHJsICYgNykgeworCWNhc2UgMDoKKwkJY2hfY3RybC0+c3dpZHRoID0gV0lEVEhfQllURTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQljaF9jdHJsLT5zd2lkdGggPSBXSURUSF9IV09SRDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljaF9jdHJsLT5zd2lkdGggPSBXSURUSF9XT1JEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY3RybCA+Pj0gMzsKKworCXN3aXRjaCAoY3RybCAmIDcpIHsKKwljYXNlIDA6CisJCWNoX2N0cmwtPmR3aWR0aCA9IFdJRFRIX0JZVEU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJY2hfY3RybC0+ZHdpZHRoID0gV0lEVEhfSFdPUkQ7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY2hfY3RybC0+ZHdpZHRoID0gV0lEVEhfV09SRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWN0cmwgPj49IDM7CisKKwljaF9jdHJsLT5zcmNfYWhiMSA9IGN0cmwgJiAxOworCWN0cmwgPj49IDE7CisKKwljaF9jdHJsLT5kZXN0X2FoYjEgPSBjdHJsICYgMTsKKwljdHJsID4+PSAxOworCisJY2hfY3RybC0+c2kgPSBjdHJsICYgMTsKKwljdHJsID4+PSAxOworCisJY2hfY3RybC0+ZGkgPSBjdHJsICYgMTsKKwljdHJsID4+PSAxOworCisJY2hfY3RybC0+cHJpdl9tb2RlID0gY3RybCAmIDE7CisJY3RybCA+Pj0gMTsKKworCWNoX2N0cmwtPmJ1ZmZlcmFibGUgPSBjdHJsICYgMTsKKwljdHJsID4+PSAxOworCisJY2hfY3RybC0+Y2FjaGVhYmxlID0gY3RybCAmIDE7CisJY3RybCA+Pj0gMTsKKworCWNoX2N0cmwtPnRjX21hc2sgPSBjdHJsICYgMTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZG1hX3BhcnNlX2NvbnRyb2wpOworCitpbnQgcG54NDAwOF9kbWFfcGFja19jb25maWcoY29uc3Qgc3RydWN0IHBueDQwMDhfZG1hX2NoX2NvbmZpZyAqIGNoX2NmZywKKwkJCSAgICB1bnNpZ25lZCBsb25nICpjZmcpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIWNmZyB8fCAhY2hfY2ZnKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCSpjZmcgPSAwOworCisJc3dpdGNoIChjaF9jZmctPmhhbHQpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmNmZyB8PSAoMSA8PCAxOCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY2ZnLT5hY3RpdmUpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmNmZyB8PSAoMSA8PCAxNyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY2ZnLT5sb2NrKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjZmcgfD0gKDEgPDwgMTYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2NmZy0+aXRjKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjZmcgfD0gKDEgPDwgMTUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2NmZy0+aWUpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmNmZyB8PSAoMSA8PCAxNCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY2ZnLT5mbG93X2NudHJsKSB7CisJY2FzZSBGQ19NRU0yTUVNX0RNQToKKwkJKmNmZyAmPSB+KDcgPDwgMTEpOworCQlicmVhazsKKwljYXNlIEZDX01FTTJQRVJfRE1BOgorCQkqY2ZnICY9IH4oNyA8PCAxMSk7CisJCSpjZmcgfD0gKDEgPDwgMTEpOworCQlicmVhazsKKwljYXNlIEZDX1BFUjJNRU1fRE1BOgorCQkqY2ZnICY9IH4oNyA8PCAxMSk7CisJCSpjZmcgfD0gKDIgPDwgMTEpOworCQlicmVhazsKKwljYXNlIEZDX1BFUjJQRVJfRE1BOgorCQkqY2ZnICY9IH4oNyA8PCAxMSk7CisJCSpjZmcgfD0gKDMgPDwgMTEpOworCQlicmVhazsKKwljYXNlIEZDX1BFUjJQRVJfRFBFUjoKKwkJKmNmZyAmPSB+KDcgPDwgMTEpOworCQkqY2ZnIHw9ICg0IDw8IDExKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19NRU0yUEVSX1BFUjoKKwkJKmNmZyAmPSB+KDcgPDwgMTEpOworCQkqY2ZnIHw9ICg1IDw8IDExKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19QRVIyTUVNX1BFUjoKKwkJKmNmZyAmPSB+KDcgPDwgMTEpOworCQkqY2ZnIHw9ICg2IDw8IDExKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19QRVIyUEVSX1NQRVI6CisJCSpjZmcgfD0gKDcgPDwgMTEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwkqY2ZnICY9IH4oMHgxZiA8PCA2KTsKKwkqY2ZnIHw9ICgoY2hfY2ZnLT5kZXN0X3BlciAmIDB4MWYpIDw8IDYpOworCisJKmNmZyAmPSB+KDB4MWYgPDwgMSk7CisJKmNmZyB8PSAoKGNoX2NmZy0+c3JjX3BlciAmIDB4MWYpIDw8IDEpOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9kbWFfcGFja19jb25maWcpOworCitpbnQgcG54NDAwOF9kbWFfcGFyc2VfY29uZmlnKHVuc2lnbmVkIGxvbmcgY2ZnLAorCQkJICAgICBzdHJ1Y3QgcG54NDAwOF9kbWFfY2hfY29uZmlnICogY2hfY2ZnKQoreworCWludCBlcnIgPSAwOworCisJaWYgKCFjaF9jZmcpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJY2ZnID4+PSAxOworCisJY2hfY2ZnLT5zcmNfcGVyID0gY2ZnICYgMHgxZjsKKwljZmcgPj49IDU7CisKKwljaF9jZmctPmRlc3RfcGVyID0gY2ZnICYgMHgxZjsKKwljZmcgPj49IDU7CisKKwlzd2l0Y2ggKGNmZyAmIDcpIHsKKwljYXNlIDA6CisJCWNoX2NmZy0+Zmxvd19jbnRybCA9IEZDX01FTTJNRU1fRE1BOworCQlicmVhazsKKwljYXNlIDE6CisJCWNoX2NmZy0+Zmxvd19jbnRybCA9IEZDX01FTTJQRVJfRE1BOworCQlicmVhazsKKwljYXNlIDI6CisJCWNoX2NmZy0+Zmxvd19jbnRybCA9IEZDX1BFUjJNRU1fRE1BOworCQlicmVhazsKKwljYXNlIDM6CisJCWNoX2NmZy0+Zmxvd19jbnRybCA9IEZDX1BFUjJQRVJfRE1BOworCQlicmVhazsKKwljYXNlIDQ6CisJCWNoX2NmZy0+Zmxvd19jbnRybCA9IEZDX1BFUjJQRVJfRFBFUjsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQljaF9jZmctPmZsb3dfY250cmwgPSBGQ19NRU0yUEVSX1BFUjsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQljaF9jZmctPmZsb3dfY250cmwgPSBGQ19QRVIyTUVNX1BFUjsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQljaF9jZmctPmZsb3dfY250cmwgPSBGQ19QRVIyUEVSX1NQRVI7CisJfQorCWNmZyA+Pj0gMzsKKworCWNoX2NmZy0+aWUgPSBjZmcgJiAxOworCWNmZyA+Pj0gMTsKKworCWNoX2NmZy0+aXRjID0gY2ZnICYgMTsKKwljZmcgPj49IDE7CisKKwljaF9jZmctPmxvY2sgPSBjZmcgJiAxOworCWNmZyA+Pj0gMTsKKworCWNoX2NmZy0+YWN0aXZlID0gY2ZnICYgMTsKKwljZmcgPj49IDE7CisKKwljaF9jZmctPmhhbHQgPSBjZmcgJiAxOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9kbWFfcGFyc2VfY29uZmlnKTsKKwordm9pZCBwbng0MDA4X2RtYV9zcGxpdF9oZWFkX2VudHJ5KHN0cnVjdCBwbng0MDA4X2RtYV9jb25maWcgKiBjb25maWcsCisJCQkJICBzdHJ1Y3QgcG54NDAwOF9kbWFfY2hfY3RybCAqIGN0cmwpCit7CisJaW50IG5ld19sZW4gPSBjdHJsLT50cl9zaXplLCBudW1fZW50cmllcyA9IDA7CisJaW50IG9sZF9sZW4gPSBuZXdfbGVuOworCWludCBzcmNfd2lkdGgsIGRlc3Rfd2lkdGgsIGNvdW50ID0gMTsKKworCXN3aXRjaCAoY3RybC0+c3dpZHRoKSB7CisJY2FzZSBXSURUSF9CWVRFOgorCQlzcmNfd2lkdGggPSAxOworCQlicmVhazsKKwljYXNlIFdJRFRIX0hXT1JEOgorCQlzcmNfd2lkdGggPSAyOworCQlicmVhazsKKwljYXNlIFdJRFRIX1dPUkQ6CisJCXNyY193aWR0aCA9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGN0cmwtPmR3aWR0aCkgeworCWNhc2UgV0lEVEhfQllURToKKwkJZGVzdF93aWR0aCA9IDE7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfSFdPUkQ6CisJCWRlc3Rfd2lkdGggPSAyOworCQlicmVhazsKKwljYXNlIFdJRFRIX1dPUkQ6CisJCWRlc3Rfd2lkdGggPSA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJd2hpbGUgKG5ld19sZW4gPiAweDdGRikgeworCQludW1fZW50cmllcysrOworCQluZXdfbGVuID0gKGN0cmwtPnRyX3NpemUgKyBudW1fZW50cmllcykgLyAobnVtX2VudHJpZXMgKyAxKTsKKwl9CisJaWYgKG51bV9lbnRyaWVzICE9IDApIHsKKwkJc3RydWN0IHBueDQwMDhfZG1hX2xsICpsbCA9IE5VTEw7CisJCWNvbmZpZy0+Y2hfY3RybCAmPSB+MHg3ZmY7CisJCWNvbmZpZy0+Y2hfY3RybCB8PSBuZXdfbGVuOworCQlpZiAoIWNvbmZpZy0+aXNfbGwpIHsKKwkJCWNvbmZpZy0+aXNfbGwgPSAxOworCQkJd2hpbGUgKG51bV9lbnRyaWVzKSB7CisJCQkJaWYgKCFsbCkgeworCQkJCQljb25maWctPmxsID0KKwkJCQkJICAgIHBueDQwMDhfYWxsb2NfbGxfZW50cnkoJmNvbmZpZy0+CisJCQkJCQkJCSAgIGxsX2RtYSk7CisJCQkJCWxsID0gY29uZmlnLT5sbDsKKwkJCQl9IGVsc2UgeworCQkJCQlsbC0+bmV4dCA9CisJCQkJCSAgICBwbng0MDA4X2FsbG9jX2xsX2VudHJ5KCZsbC0+CisJCQkJCQkJCSAgIG5leHRfZG1hKTsKKwkJCQkJbGwgPSBsbC0+bmV4dDsKKwkJCQl9CisKKwkJCQlpZiAoY3RybC0+c2kpCisJCQkJCWxsLT5zcmNfYWRkciA9CisJCQkJCSAgICBjb25maWctPnNyY19hZGRyICsKKwkJCQkJICAgIHNyY193aWR0aCAqIG5ld19sZW4gKiBjb3VudDsKKwkJCQllbHNlCisJCQkJCWxsLT5zcmNfYWRkciA9IGNvbmZpZy0+c3JjX2FkZHI7CisJCQkJaWYgKGN0cmwtPmRpKQorCQkJCQlsbC0+ZGVzdF9hZGRyID0KKwkJCQkJICAgIGNvbmZpZy0+ZGVzdF9hZGRyICsKKwkJCQkJICAgIGRlc3Rfd2lkdGggKiBuZXdfbGVuICogY291bnQ7CisJCQkJZWxzZQorCQkJCQlsbC0+ZGVzdF9hZGRyID0gY29uZmlnLT5kZXN0X2FkZHI7CisJCQkJbGwtPmNoX2N0cmwgPSBjb25maWctPmNoX2N0cmwgJiAweDdmZmZmZmZmOworCQkJCWxsLT5uZXh0X2RtYSA9IDA7CisJCQkJbGwtPm5leHQgPSBOVUxMOworCQkJCW51bV9lbnRyaWVzLS07CisJCQkJY291bnQrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwbng0MDA4X2RtYV9sbCAqbGxfb2xkID0gY29uZmlnLT5sbDsKKwkJCXVuc2lnbmVkIGxvbmcgbGxfZG1hX29sZCA9IGNvbmZpZy0+bGxfZG1hOworCQkJd2hpbGUgKG51bV9lbnRyaWVzKSB7CisJCQkJaWYgKCFsbCkgeworCQkJCQljb25maWctPmxsID0KKwkJCQkJICAgIHBueDQwMDhfYWxsb2NfbGxfZW50cnkoJmNvbmZpZy0+CisJCQkJCQkJCSAgIGxsX2RtYSk7CisJCQkJCWxsID0gY29uZmlnLT5sbDsKKwkJCQl9IGVsc2UgeworCQkJCQlsbC0+bmV4dCA9CisJCQkJCSAgICBwbng0MDA4X2FsbG9jX2xsX2VudHJ5KCZsbC0+CisJCQkJCQkJCSAgIG5leHRfZG1hKTsKKwkJCQkJbGwgPSBsbC0+bmV4dDsKKwkJCQl9CisKKwkJCQlpZiAoY3RybC0+c2kpCisJCQkJCWxsLT5zcmNfYWRkciA9CisJCQkJCSAgICBjb25maWctPnNyY19hZGRyICsKKwkJCQkJICAgIHNyY193aWR0aCAqIG5ld19sZW4gKiBjb3VudDsKKwkJCQllbHNlCisJCQkJCWxsLT5zcmNfYWRkciA9IGNvbmZpZy0+c3JjX2FkZHI7CisJCQkJaWYgKGN0cmwtPmRpKQorCQkJCQlsbC0+ZGVzdF9hZGRyID0KKwkJCQkJICAgIGNvbmZpZy0+ZGVzdF9hZGRyICsKKwkJCQkJICAgIGRlc3Rfd2lkdGggKiBuZXdfbGVuICogY291bnQ7CisJCQkJZWxzZQorCQkJCQlsbC0+ZGVzdF9hZGRyID0gY29uZmlnLT5kZXN0X2FkZHI7CisJCQkJbGwtPmNoX2N0cmwgPSBjb25maWctPmNoX2N0cmwgJiAweDdmZmZmZmZmOworCQkJCWxsLT5uZXh0X2RtYSA9IDA7CisJCQkJbGwtPm5leHQgPSBOVUxMOworCQkJCW51bV9lbnRyaWVzLS07CisJCQkJY291bnQrKzsKKwkJCX0KKwkJCWxsLT5uZXh0X2RtYSA9IGxsX2RtYV9vbGQ7CisJCQlsbC0+bmV4dCA9IGxsX29sZDsKKwkJfQorCQkvKiBhZGp1c3QgbGFzdCBsZW5ndGgvdGMgKi8KKwkJbGwtPmNoX2N0cmwgPSBjb25maWctPmNoX2N0cmwgJiAofjB4N2ZmKTsKKwkJbGwtPmNoX2N0cmwgfD0gb2xkX2xlbiAtIG5ld19sZW4gKiAoY291bnQgLSAxKTsKKwkJY29uZmlnLT5jaF9jdHJsICY9IDB4N2ZmZmZmZmY7CisJfQorfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2RtYV9zcGxpdF9oZWFkX2VudHJ5KTsKKwordm9pZCBwbng0MDA4X2RtYV9zcGxpdF9sbF9lbnRyeShzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKiBjdXJfbGwsCisJCQkJc3RydWN0IHBueDQwMDhfZG1hX2NoX2N0cmwgKiBjdHJsKQoreworCWludCBuZXdfbGVuID0gY3RybC0+dHJfc2l6ZSwgbnVtX2VudHJpZXMgPSAwOworCWludCBvbGRfbGVuID0gbmV3X2xlbjsKKwlpbnQgc3JjX3dpZHRoLCBkZXN0X3dpZHRoLCBjb3VudCA9IDE7CisKKwlzd2l0Y2ggKGN0cmwtPnN3aWR0aCkgeworCWNhc2UgV0lEVEhfQllURToKKwkJc3JjX3dpZHRoID0gMTsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9IV09SRDoKKwkJc3JjX3dpZHRoID0gMjsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9XT1JEOgorCQlzcmNfd2lkdGggPSA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChjdHJsLT5kd2lkdGgpIHsKKwljYXNlIFdJRFRIX0JZVEU6CisJCWRlc3Rfd2lkdGggPSAxOworCQlicmVhazsKKwljYXNlIFdJRFRIX0hXT1JEOgorCQlkZXN0X3dpZHRoID0gMjsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9XT1JEOgorCQlkZXN0X3dpZHRoID0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChuZXdfbGVuID4gMHg3RkYpIHsKKwkJbnVtX2VudHJpZXMrKzsKKwkJbmV3X2xlbiA9IChjdHJsLT50cl9zaXplICsgbnVtX2VudHJpZXMpIC8gKG51bV9lbnRyaWVzICsgMSk7CisJfQorCWlmIChudW1fZW50cmllcyAhPSAwKSB7CisJCXN0cnVjdCBwbng0MDA4X2RtYV9sbCAqbGwgPSBOVUxMOworCQljdXJfbGwtPmNoX2N0cmwgJj0gfjB4N2ZmOworCQljdXJfbGwtPmNoX2N0cmwgfD0gbmV3X2xlbjsKKwkJaWYgKCFjdXJfbGwtPm5leHQpIHsKKwkJCXdoaWxlIChudW1fZW50cmllcykgeworCQkJCWlmICghbGwpIHsKKwkJCQkJY3VyX2xsLT5uZXh0ID0KKwkJCQkJICAgIHBueDQwMDhfYWxsb2NfbGxfZW50cnkoJmN1cl9sbC0+CisJCQkJCQkJCSAgIG5leHRfZG1hKTsKKwkJCQkJbGwgPSBjdXJfbGwtPm5leHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJbGwtPm5leHQgPQorCQkJCQkgICAgcG54NDAwOF9hbGxvY19sbF9lbnRyeSgmbGwtPgorCQkJCQkJCQkgICBuZXh0X2RtYSk7CisJCQkJCWxsID0gbGwtPm5leHQ7CisJCQkJfQorCisJCQkJaWYgKGN0cmwtPnNpKQorCQkJCQlsbC0+c3JjX2FkZHIgPQorCQkJCQkgICAgY3VyX2xsLT5zcmNfYWRkciArCisJCQkJCSAgICBzcmNfd2lkdGggKiBuZXdfbGVuICogY291bnQ7CisJCQkJZWxzZQorCQkJCQlsbC0+c3JjX2FkZHIgPSBjdXJfbGwtPnNyY19hZGRyOworCQkJCWlmIChjdHJsLT5kaSkKKwkJCQkJbGwtPmRlc3RfYWRkciA9CisJCQkJCSAgICBjdXJfbGwtPmRlc3RfYWRkciArCisJCQkJCSAgICBkZXN0X3dpZHRoICogbmV3X2xlbiAqIGNvdW50OworCQkJCWVsc2UKKwkJCQkJbGwtPmRlc3RfYWRkciA9IGN1cl9sbC0+ZGVzdF9hZGRyOworCQkJCWxsLT5jaF9jdHJsID0gY3VyX2xsLT5jaF9jdHJsICYgMHg3ZmZmZmZmZjsKKwkJCQlsbC0+bmV4dF9kbWEgPSAwOworCQkJCWxsLT5uZXh0ID0gTlVMTDsKKwkJCQludW1fZW50cmllcy0tOworCQkJCWNvdW50Kys7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKmxsX29sZCA9IGN1cl9sbC0+bmV4dDsKKwkJCXVuc2lnbmVkIGxvbmcgbGxfZG1hX29sZCA9IGN1cl9sbC0+bmV4dF9kbWE7CisJCQl3aGlsZSAobnVtX2VudHJpZXMpIHsKKwkJCQlpZiAoIWxsKSB7CisJCQkJCWN1cl9sbC0+bmV4dCA9CisJCQkJCSAgICBwbng0MDA4X2FsbG9jX2xsX2VudHJ5KCZjdXJfbGwtPgorCQkJCQkJCQkgICBuZXh0X2RtYSk7CisJCQkJCWxsID0gY3VyX2xsLT5uZXh0OworCQkJCX0gZWxzZSB7CisJCQkJCWxsLT5uZXh0ID0KKwkJCQkJICAgIHBueDQwMDhfYWxsb2NfbGxfZW50cnkoJmxsLT4KKwkJCQkJCQkJICAgbmV4dF9kbWEpOworCQkJCQlsbCA9IGxsLT5uZXh0OworCQkJCX0KKworCQkJCWlmIChjdHJsLT5zaSkKKwkJCQkJbGwtPnNyY19hZGRyID0KKwkJCQkJICAgIGN1cl9sbC0+c3JjX2FkZHIgKworCQkJCQkgICAgc3JjX3dpZHRoICogbmV3X2xlbiAqIGNvdW50OworCQkJCWVsc2UKKwkJCQkJbGwtPnNyY19hZGRyID0gY3VyX2xsLT5zcmNfYWRkcjsKKwkJCQlpZiAoY3RybC0+ZGkpCisJCQkJCWxsLT5kZXN0X2FkZHIgPQorCQkJCQkgICAgY3VyX2xsLT5kZXN0X2FkZHIgKworCQkJCQkgICAgZGVzdF93aWR0aCAqIG5ld19sZW4gKiBjb3VudDsKKwkJCQllbHNlCisJCQkJCWxsLT5kZXN0X2FkZHIgPSBjdXJfbGwtPmRlc3RfYWRkcjsKKwkJCQlsbC0+Y2hfY3RybCA9IGN1cl9sbC0+Y2hfY3RybCAmIDB4N2ZmZmZmZmY7CisJCQkJbGwtPm5leHRfZG1hID0gMDsKKwkJCQlsbC0+bmV4dCA9IE5VTEw7CisJCQkJbnVtX2VudHJpZXMtLTsKKwkJCQljb3VudCsrOworCQkJfQorCisJCQlsbC0+bmV4dF9kbWEgPSBsbF9kbWFfb2xkOworCQkJbGwtPm5leHQgPSBsbF9vbGQ7CisJCX0KKwkJLyogYWRqdXN0IGxhc3QgbGVuZ3RoL3RjICovCisJCWxsLT5jaF9jdHJsID0gY3VyX2xsLT5jaF9jdHJsICYgKH4weDdmZik7CisJCWxsLT5jaF9jdHJsIHw9IG9sZF9sZW4gLSBuZXdfbGVuICogKGNvdW50IC0gMSk7CisJCWN1cl9sbC0+Y2hfY3RybCAmPSAweDdmZmZmZmZmOworCX0KK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9kbWFfc3BsaXRfbGxfZW50cnkpOworCitpbnQgcG54NDAwOF9jb25maWdfY2hhbm5lbChpbnQgY2gsIHN0cnVjdCBwbng0MDA4X2RtYV9jb25maWcgKiBjb25maWcpCit7CisJaWYgKCFWQUxJRF9DSEFOTkVMKGNoKSB8fCAhZG1hX2NoYW5uZWxzW2NoXS5uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBueDQwMDhfZG1hX2xvY2soKTsKKwlfX3Jhd193cml0ZWwoY29uZmlnLT5zcmNfYWRkciwgRE1BQ19DeF9TUkNfQUREUihjaCkpOworCV9fcmF3X3dyaXRlbChjb25maWctPmRlc3RfYWRkciwgRE1BQ19DeF9ERVNUX0FERFIoY2gpKTsKKworCWlmIChjb25maWctPmlzX2xsKQorCQlfX3Jhd193cml0ZWwoY29uZmlnLT5sbF9kbWEsIERNQUNfQ3hfTExJKGNoKSk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwoMCwgRE1BQ19DeF9MTEkoY2gpKTsKKworCV9fcmF3X3dyaXRlbChjb25maWctPmNoX2N0cmwsIERNQUNfQ3hfQ09OVFJPTChjaCkpOworCV9fcmF3X3dyaXRlbChjb25maWctPmNoX2NmZywgRE1BQ19DeF9DT05GSUcoY2gpKTsKKwlwbng0MDA4X2RtYV91bmxvY2soKTsKKworCXJldHVybiAwOworCit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfY29uZmlnX2NoYW5uZWwpOworCitpbnQgcG54NDAwOF9jaGFubmVsX2dldF9jb25maWcoaW50IGNoLCBzdHJ1Y3QgcG54NDAwOF9kbWFfY29uZmlnICogY29uZmlnKQoreworCWlmICghVkFMSURfQ0hBTk5FTChjaCkgfHwgIWRtYV9jaGFubmVsc1tjaF0ubmFtZSB8fCAhY29uZmlnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBueDQwMDhfZG1hX2xvY2soKTsKKwljb25maWctPmNoX2NmZyA9IF9fcmF3X3JlYWRsKERNQUNfQ3hfQ09ORklHKGNoKSk7CisJY29uZmlnLT5jaF9jdHJsID0gX19yYXdfcmVhZGwoRE1BQ19DeF9DT05UUk9MKGNoKSk7CisKKwljb25maWctPmxsX2RtYSA9IF9fcmF3X3JlYWRsKERNQUNfQ3hfTExJKGNoKSk7CisJY29uZmlnLT5pc19sbCA9IGNvbmZpZy0+bGxfZG1hID8gMSA6IDA7CisKKwljb25maWctPnNyY19hZGRyID0gX19yYXdfcmVhZGwoRE1BQ19DeF9TUkNfQUREUihjaCkpOworCWNvbmZpZy0+ZGVzdF9hZGRyID0gX19yYXdfcmVhZGwoRE1BQ19DeF9ERVNUX0FERFIoY2gpKTsKKwlwbng0MDA4X2RtYV91bmxvY2soKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2NoYW5uZWxfZ2V0X2NvbmZpZyk7CisKK2ludCBwbng0MDA4X2RtYV9jaF9lbmFibGUoaW50IGNoKQoreworCXVuc2lnbmVkIGxvbmcgY2hfY2ZnOworCisJaWYgKCFWQUxJRF9DSEFOTkVMKGNoKSB8fCAhZG1hX2NoYW5uZWxzW2NoXS5uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBueDQwMDhfZG1hX2xvY2soKTsKKwljaF9jZmcgPSBfX3Jhd19yZWFkbChETUFDX0N4X0NPTkZJRyhjaCkpOworCWNoX2NmZyB8PSAxOworCV9fcmF3X3dyaXRlbChjaF9jZmcsIERNQUNfQ3hfQ09ORklHKGNoKSk7CisJcG54NDAwOF9kbWFfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9kbWFfY2hfZW5hYmxlKTsKKworaW50IHBueDQwMDhfZG1hX2NoX2Rpc2FibGUoaW50IGNoKQoreworCXVuc2lnbmVkIGxvbmcgY2hfY2ZnOworCisJaWYgKCFWQUxJRF9DSEFOTkVMKGNoKSB8fCAhZG1hX2NoYW5uZWxzW2NoXS5uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBueDQwMDhfZG1hX2xvY2soKTsKKwljaF9jZmcgPSBfX3Jhd19yZWFkbChETUFDX0N4X0NPTkZJRyhjaCkpOworCWNoX2NmZyAmPSB+MTsKKwlfX3Jhd193cml0ZWwoY2hfY2ZnLCBETUFDX0N4X0NPTkZJRyhjaCkpOworCXBueDQwMDhfZG1hX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZG1hX2NoX2Rpc2FibGUpOworCitpbnQgcG54NDAwOF9kbWFfY2hfZW5hYmxlZChpbnQgY2gpCit7CisJdW5zaWduZWQgbG9uZyBjaF9jZmc7CisKKwlpZiAoIVZBTElEX0NIQU5ORUwoY2gpIHx8ICFkbWFfY2hhbm5lbHNbY2hdLm5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJcG54NDAwOF9kbWFfbG9jaygpOworCWNoX2NmZyA9IF9fcmF3X3JlYWRsKERNQUNfQ3hfQ09ORklHKGNoKSk7CisJcG54NDAwOF9kbWFfdW5sb2NrKCk7CisKKwlyZXR1cm4gY2hfY2ZnICYgMTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9kbWFfY2hfZW5hYmxlZCk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGRpbnQgPSBfX3Jhd19yZWFkbChETUFDX0lOVF9TVEFUKTsKKwl1bnNpZ25lZCBsb25nIHRjaW50ID0gX19yYXdfcmVhZGwoRE1BQ19JTlRfVENfU1RBVCk7CisJdW5zaWduZWQgbG9uZyBlaW50ID0gX19yYXdfcmVhZGwoRE1BQ19JTlRfRVJSX1NUQVQpOworCXVuc2lnbmVkIGxvbmcgaV9iaXQ7CisKKwlmb3IgKGkgPSBNQVhfRE1BX0NIQU5ORUxTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaV9iaXQgPSAxIDw8IGk7CisJCWlmIChkaW50ICYgaV9iaXQpIHsKKwkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9ICZkbWFfY2hhbm5lbHNbaV07CisKKwkJCWlmIChjaGFubmVsLT5uYW1lICYmIGNoYW5uZWwtPmlycV9oYW5kbGVyKSB7CisJCQkJaW50IGNhdXNlID0gMDsKKworCQkJCWlmIChlaW50ICYgaV9iaXQpCisJCQkJCWNhdXNlIHw9IERNQV9FUlJfSU5UOworCQkJCWlmICh0Y2ludCAmIGlfYml0KQorCQkJCQljYXVzZSB8PSBETUFfVENfSU5UOworCQkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksIGNhdXNlLCBjaGFubmVsLT5kYXRhLAorCQkJCQkJICAgICByZWdzKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBJUlEgZm9yIGFuIHVucmVnaXN0ZXJlZCBETUEgY2hhbm5lbAorCQkJCSAqLworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGkpOworCQkJfQorCQkJaWYgKHRjaW50ICYgaV9iaXQpCisJCQkJX19yYXdfd3JpdGVsKGlfYml0LCBETUFDX0lOVF9UQ19DTEVBUik7CisJCQlpZiAoZWludCAmIGlfYml0KQorCQkJCV9fcmF3X3dyaXRlbChpX2JpdCwgRE1BQ19JTlRfRVJSX0NMRUFSKTsKKwkJfQorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBueDQwMDhfZG1hX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoRE1BX0lOVCwgZG1hX2lycV9oYW5kbGVyLCAwLCAiRE1BIiwgTlVMTCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9DUklUICJXb3chICBDYW4ndCByZWdpc3RlciBJUlEgZm9yIERNQVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWxsX3Bvb2wuY291bnQgPSAweDQwMDAgLyBzaXplb2Yoc3RydWN0IHBueDQwMDhfZG1hX2xsKTsKKwlsbF9wb29sLmN1ciA9IGxsX3Bvb2wudmFkZHIgPQorCSAgICBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgbGxfcG9vbC5jb3VudCAqIHNpemVvZihzdHJ1Y3QgcG54NDAwOF9kbWFfbGwpLAorCQkJICAgICAgICZsbF9wb29sLmRtYV9hZGRyLCBHRlBfS0VSTkVMKTsKKworCWlmICghbGxfcG9vbC52YWRkcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlmcmVlX2lycShETUFfSU5ULCBOVUxMKTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxsX3Bvb2wuY291bnQgLSAxOyBpKyspIHsKKwkJdm9pZCAqKmFkZHIgPSBsbF9wb29sLnZhZGRyICsgaSAqIHNpemVvZihzdHJ1Y3QgcG54NDAwOF9kbWFfbGwpOworCQkqYWRkciA9ICh2b2lkICopYWRkciArIHNpemVvZihzdHJ1Y3QgcG54NDAwOF9kbWFfbGwpOworCX0KKwkqKGxvbmcgKikobGxfcG9vbC52YWRkciArCisJCSAgKGxsX3Bvb2wuY291bnQgLSAxKSAqIHNpemVvZihzdHJ1Y3QgcG54NDAwOF9kbWFfbGwpKSA9CisJICAgIChsb25nKWxsX3Bvb2wudmFkZHI7CisKKwlfX3Jhd193cml0ZWwoMSwgRE1BQ19DT05GSUcpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KK2FyY2hfaW5pdGNhbGwocG54NDAwOF9kbWFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWNlMDUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2dwaW8uYwpAQCAtMCwwICsxLDMzMCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtcG54NDAwOC9ncGlvLmMKKyAqCisgKiBQTlg0MDA4IEdQSU8gZHJpdmVyCisgKgorICogQXV0aG9yOiBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIEJhc2VkIG9uIHJlZmVyZW5jZSBjb2RlIGJ5IEl3byBNZXJnbGVyIGFuZCBaLlRhYmFhbG91dGUgZnJvbSBQaGlsaXBzOgorICogQ29weXJpZ2h0IChjKSAyMDA1IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTi5WLgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCisvKiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBQSU9fVkFfQkFTRQlJT19BRERSRVNTKFBOWDQwMDhfUElPX0JBU0UpCisKKyNkZWZpbmUgUElPX0lOUF9TVEFURQkoMHgwMFUpCisjZGVmaW5lIFBJT19PVVRQX1NFVAkoMHgwNFUpCisjZGVmaW5lIFBJT19PVVRQX0NMUgkoMHgwOFUpCisjZGVmaW5lIFBJT19PVVRQX1NUQVRFCSgweDBDVSkKKyNkZWZpbmUgUElPX0RSVl9TRVQJKDB4MTBVKQorI2RlZmluZSBQSU9fRFJWX0NMUgkoMHgxNFUpCisjZGVmaW5lIFBJT19EUlZfU1RBVEUJKDB4MThVKQorI2RlZmluZSBQSU9fU0RJTlBfU1RBVEUJKDB4MUNVKQorI2RlZmluZSBQSU9fU0RPVVRQX1NFVAkoMHgyMFUpCisjZGVmaW5lIFBJT19TRE9VVFBfQ0xSCSgweDI0VSkKKyNkZWZpbmUgUElPX01VWF9TRVQJKDB4MjhVKQorI2RlZmluZSBQSU9fTVVYX0NMUgkoMHgyQ1UpCisjZGVmaW5lIFBJT19NVVhfU1RBVEUJKDB4MzBVKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19sb2NrKHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwaW9fdW5sb2NrKHZvaWQpCit7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCisvKiBJbmxpbmUgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIGludCBncGlvX3JlYWRfYml0KHUzMiByZWcsIGludCBncGlvKQoreworCXUzMiBiaXQsIHZhbDsKKwlpbnQgcmV0ID0gLUVGQVVMVDsKKworCWlmIChncGlvIDwgMCkKKwkJZ290byBvdXQ7CisKKwliaXQgPSBHUElPX0JJVChncGlvKTsKKwlpZiAoYml0KSB7CisJCXZhbCA9IF9fcmF3X3JlYWRsKFBJT19WQV9CQVNFICsgcmVnKTsKKwkJcmV0ID0gKHZhbCAmIGJpdCkgPyAxIDogMDsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19zZXRfYml0KHUzMiByZWcsIGludCBncGlvKQoreworCXUzMiBiaXQsIHZhbDsKKwlpbnQgcmV0ID0gLUVGQVVMVDsKKworCWlmIChncGlvIDwgMCkKKwkJZ290byBvdXQ7CisKKwliaXQgPSBHUElPX0JJVChncGlvKTsKKwlpZiAoYml0KSB7CisJCXZhbCA9IF9fcmF3X3JlYWRsKFBJT19WQV9CQVNFICsgcmVnKTsKKwkJdmFsIHw9IGJpdDsKKwkJX19yYXdfd3JpdGVsKHZhbCwgUElPX1ZBX0JBU0UgKyByZWcpOworCQlyZXQgPSAwOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBWZXJ5IHNpbXBsZSBhY2Nlc3MgY29udHJvbCwgYml0bWFwIGZvciBhbGxvY2F0ZWQvZnJlZSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWNjZXNzX21hcFs0XTsKKyNkZWZpbmUgSU5QX0lOREVYCTAKKyNkZWZpbmUgT1VUUF9JTkRFWAkxCisjZGVmaW5lIEdQSU9fSU5ERVgJMgorI2RlZmluZSBNVVhfSU5ERVgJMworCisvKkdQSU8gdG8gSW5wdXQgTWFwcGluZyAqLworc3RhdGljIHNob3J0IGdwaW9fdG9faW5wX21hcFszMl0gPSB7CisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMjQsIC0xCit9OworCisvKkdQSU8gdG8gTXV4IE1hcHBpbmcgKi8KK3N0YXRpYyBzaG9ydCBncGlvX3RvX211eF9tYXBbMzJdID0geworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIDAsIDEsIDQsIDUsIC0xCit9OworCisvKk91dHB1dCB0byBNdXggTWFwcGluZyAqLworc3RhdGljIHNob3J0IG91dHBfdG9fbXV4X21hcFszMl0gPSB7CisJLTEsIC0xLCAtMSwgNiwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgMiwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMQorfTsKKworaW50IHBueDQwMDhfZ3Bpb19yZWdpc3Rlcl9waW4odW5zaWduZWQgc2hvcnQgcGluKQoreworCXVuc2lnbmVkIGxvbmcgYml0ID0gR1BJT19CSVQocGluKTsKKwlpbnQgcmV0ID0gLUVCVVNZOwkvKiBBbHJlYWR5IGluIHVzZSAqLworCisJZ3Bpb19sb2NrKCk7CisKKwlpZiAoR1BJT19JU0JJRChwaW4pKSB7CisJCWlmIChhY2Nlc3NfbWFwW0dQSU9fSU5ERVhdICYgYml0KQorCQkJZ290byBvdXQ7CisJCWFjY2Vzc19tYXBbR1BJT19JTkRFWF0gfD0gYml0OworCisJfSBlbHNlIGlmIChHUElPX0lTUkFNKHBpbikpIHsKKwkJaWYgKGFjY2Vzc19tYXBbR1BJT19JTkRFWF0gJiBiaXQpCisJCQlnb3RvIG91dDsKKwkJYWNjZXNzX21hcFtHUElPX0lOREVYXSB8PSBiaXQ7CisKKwl9IGVsc2UgaWYgKEdQSU9fSVNNVVgocGluKSkgeworCQlpZiAoYWNjZXNzX21hcFtNVVhfSU5ERVhdICYgYml0KQorCQkJZ290byBvdXQ7CisJCWFjY2Vzc19tYXBbTVVYX0lOREVYXSB8PSBiaXQ7CisKKwl9IGVsc2UgaWYgKEdQSU9fSVNPVVQocGluKSkgeworCQlpZiAoYWNjZXNzX21hcFtPVVRQX0lOREVYXSAmIGJpdCkKKwkJCWdvdG8gb3V0OworCQlhY2Nlc3NfbWFwW09VVFBfSU5ERVhdIHw9IGJpdDsKKworCX0gZWxzZSBpZiAoR1BJT19JU0lOKHBpbikpIHsKKwkJaWYgKGFjY2Vzc19tYXBbSU5QX0lOREVYXSAmIGJpdCkKKwkJCWdvdG8gb3V0OworCQlhY2Nlc3NfbWFwW0lOUF9JTkRFWF0gfD0gYml0OworCX0gZWxzZQorCQlnb3RvIG91dDsKKwlyZXQgPSAwOworCitvdXQ6CisJZ3Bpb191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKHBueDQwMDhfZ3Bpb19yZWdpc3Rlcl9waW4pOworCitpbnQgcG54NDAwOF9ncGlvX3VucmVnaXN0ZXJfcGluKHVuc2lnbmVkIHNob3J0IHBpbikKK3sKKwl1bnNpZ25lZCBsb25nIGJpdCA9IEdQSU9fQklUKHBpbik7CisJaW50IHJldCA9IC1FRkFVTFQ7CS8qIE5vdCByZWdpc3RlcmVkICovCisKKwlncGlvX2xvY2soKTsKKworCWlmIChHUElPX0lTQklEKHBpbikpIHsKKwkJaWYgKH5hY2Nlc3NfbWFwW0dQSU9fSU5ERVhdICYgYml0KQorCQkJZ290byBvdXQ7CisJCWFjY2Vzc19tYXBbR1BJT19JTkRFWF0gJj0gfmJpdDsKKwl9IGVsc2UgaWYgKEdQSU9fSVNSQU0ocGluKSkgeworCQlpZiAofmFjY2Vzc19tYXBbR1BJT19JTkRFWF0gJiBiaXQpCisJCQlnb3RvIG91dDsKKwkJYWNjZXNzX21hcFtHUElPX0lOREVYXSAmPSB+Yml0OworCX0gZWxzZSBpZiAoR1BJT19JU01VWChwaW4pKSB7CisJCWlmICh+YWNjZXNzX21hcFtNVVhfSU5ERVhdICYgYml0KQorCQkJZ290byBvdXQ7CisJCWFjY2Vzc19tYXBbTVVYX0lOREVYXSAmPSB+Yml0OworCX0gZWxzZSBpZiAoR1BJT19JU09VVChwaW4pKSB7CisJCWlmICh+YWNjZXNzX21hcFtPVVRQX0lOREVYXSAmIGJpdCkKKwkJCWdvdG8gb3V0OworCQlhY2Nlc3NfbWFwW09VVFBfSU5ERVhdICY9IH5iaXQ7CisJfSBlbHNlIGlmIChHUElPX0lTSU4ocGluKSkgeworCQlpZiAofmFjY2Vzc19tYXBbSU5QX0lOREVYXSAmIGJpdCkKKwkJCWdvdG8gb3V0OworCQlhY2Nlc3NfbWFwW0lOUF9JTkRFWF0gJj0gfmJpdDsKKwl9IGVsc2UKKwkJZ290byBvdXQ7CisJcmV0ID0gMDsKKworb3V0OgorCWdwaW9fdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2dwaW9fdW5yZWdpc3Rlcl9waW4pOworCit1bnNpZ25lZCBsb25nIHBueDQwMDhfZ3Bpb19yZWFkX3Bpbih1bnNpZ25lZCBzaG9ydCBwaW4pCit7CisJdW5zaWduZWQgbG9uZyByZXQgPSAtRUZBVUxUOworCWludCBncGlvID0gR1BJT19CSVRfTUFTSyhwaW4pOworCWdwaW9fbG9jaygpOworCWlmIChHUElPX0lTT1VUKHBpbikpIHsKKwkJcmV0ID0gZ3Bpb19yZWFkX2JpdChQSU9fT1VUUF9TVEFURSwgZ3Bpbyk7CisJfSBlbHNlIGlmIChHUElPX0lTUkFNKHBpbikpIHsKKwkJaWYgKGdwaW9fcmVhZF9iaXQoUElPX0RSVl9TVEFURSwgZ3BpbykgPT0gMCkgeworCQkJcmV0ID0gZ3Bpb19yZWFkX2JpdChQSU9fU0RJTlBfU1RBVEUsIGdwaW8pOworCQl9CisJfSBlbHNlIGlmIChHUElPX0lTQklEKHBpbikpIHsKKwkJcmV0ID0gZ3Bpb19yZWFkX2JpdChQSU9fRFJWX1NUQVRFLCBncGlvKTsKKwkJaWYgKHJldCA+IDApCisJCQlyZXQgPSBncGlvX3JlYWRfYml0KFBJT19PVVRQX1NUQVRFLCBncGlvKTsKKwkJZWxzZSBpZiAocmV0ID09IDApCisJCQlyZXQgPQorCQkJICAgIGdwaW9fcmVhZF9iaXQoUElPX0lOUF9TVEFURSwgZ3Bpb190b19pbnBfbWFwW2dwaW9dKTsKKwl9IGVsc2UgaWYgKEdQSU9fSVNJTihwaW4pKSB7CisJCXJldCA9IGdwaW9fcmVhZF9iaXQoUElPX0lOUF9TVEFURSwgZ3Bpbyk7CisJfQorCWdwaW9fdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2dwaW9fcmVhZF9waW4pOworCisvKiBXcml0ZSBWYWx1ZSB0byBvdXRwdXQgKi8KK2ludCBwbng0MDA4X2dwaW9fd3JpdGVfcGluKHVuc2lnbmVkIHNob3J0IHBpbiwgaW50IG91dHB1dCkKK3sKKwlpbnQgZ3BpbyA9IEdQSU9fQklUX01BU0socGluKTsKKwlpbnQgcmV0ID0gLUVGQVVMVDsKKworCWdwaW9fbG9jaygpOworCWlmIChHUElPX0lTT1VUKHBpbikpIHsKKwkJcHJpbnRrKCAid3JpdGluZyAnJXgnIHRvICcleCdcbiIsCisJCQkJZ3Bpbywgb3V0cHV0ID8gUElPX09VVFBfU0VUIDogUElPX09VVFBfQ0xSICk7CisJCXJldCA9IGdwaW9fc2V0X2JpdChvdXRwdXQgPyBQSU9fT1VUUF9TRVQgOiBQSU9fT1VUUF9DTFIsIGdwaW8pOworCX0gZWxzZSBpZiAoR1BJT19JU1JBTShwaW4pKSB7CisJCWlmIChncGlvX3JlYWRfYml0KFBJT19EUlZfU1RBVEUsIGdwaW8pID4gMCkKKwkJCXJldCA9IGdwaW9fc2V0X2JpdChvdXRwdXQgPyBQSU9fU0RPVVRQX1NFVCA6CisJCQkJCSAgIFBJT19TRE9VVFBfQ0xSLCBncGlvKTsKKwl9IGVsc2UgaWYgKEdQSU9fSVNCSUQocGluKSkgeworCQlpZiAoZ3Bpb19yZWFkX2JpdChQSU9fRFJWX1NUQVRFLCBncGlvKSA+IDApCisJCQlyZXQgPSBncGlvX3NldF9iaXQob3V0cHV0ID8gUElPX09VVFBfU0VUIDoKKwkJCQkJICAgUElPX09VVFBfQ0xSLCBncGlvKTsKKwl9CisJZ3Bpb191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKHBueDQwMDhfZ3Bpb193cml0ZV9waW4pOworCisvKiBWYWx1ZSA9IDEgOiBTZXQgR1BJTyBwaW4gYXMgb3V0cHV0ICovCisvKiBWYWx1ZSA9IDAgOiBTZXQgR1BJTyBwaW4gYXMgaW5wdXQgKi8KK2ludCBwbng0MDA4X2dwaW9fc2V0X3Bpbl9kaXJlY3Rpb24odW5zaWduZWQgc2hvcnQgcGluLCBpbnQgb3V0cHV0KQoreworCWludCBncGlvID0gR1BJT19CSVRfTUFTSyhwaW4pOworCWludCByZXQgPSAtRUZBVUxUOworCisJZ3Bpb19sb2NrKCk7CisJaWYgKEdQSU9fSVNCSUQocGluKSB8fCBHUElPX0lTUkFNKHBpbikpIHsKKwkJcmV0ID0gZ3Bpb19zZXRfYml0KG91dHB1dCA/IFBJT19EUlZfU0VUIDogUElPX0RSVl9DTFIsIGdwaW8pOworCX0KKwlncGlvX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0wocG54NDAwOF9ncGlvX3NldF9waW5fZGlyZWN0aW9uKTsKKworLyogUmVhZCBHUElPIHBpbiBkaXJlY3Rpb246IDA9IHBpbiB1c2VkIGFzIGlucHV0LCAxPSBwaW4gdXNlZCBhcyBvdXRwdXQqLworaW50IHBueDQwMDhfZ3Bpb19yZWFkX3Bpbl9kaXJlY3Rpb24odW5zaWduZWQgc2hvcnQgcGluKQoreworCWludCBncGlvID0gR1BJT19CSVRfTUFTSyhwaW4pOworCWludCByZXQgPSAtRUZBVUxUOworCisJZ3Bpb19sb2NrKCk7CisJaWYgKEdQSU9fSVNCSUQocGluKSB8fCBHUElPX0lTUkFNKHBpbikpIHsKKwkJcmV0ID0gZ3Bpb19yZWFkX2JpdChQSU9fRFJWX1NUQVRFLCBncGlvKTsKKwl9CisJZ3Bpb191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKHBueDQwMDhfZ3Bpb19yZWFkX3Bpbl9kaXJlY3Rpb24pOworCisvKiBWYWx1ZSA9IDEgOiBTZXQgcGluIHRvIG11eGVkIGZ1bmN0aW9uICAqLworLyogVmFsdWUgPSAwIDogU2V0IHBpbiBhcyBHUElPICovCitpbnQgcG54NDAwOF9ncGlvX3NldF9waW5fbXV4KHVuc2lnbmVkIHNob3J0IHBpbiwgaW50IG91dHB1dCkKK3sKKwlpbnQgZ3BpbyA9IEdQSU9fQklUX01BU0socGluKTsKKwlpbnQgcmV0ID0gLUVGQVVMVDsKKworCWdwaW9fbG9jaygpOworCWlmIChHUElPX0lTQklEKHBpbikpIHsKKwkJcmV0ID0KKwkJICAgIGdwaW9fc2V0X2JpdChvdXRwdXQgPyBQSU9fTVVYX1NFVCA6IFBJT19NVVhfQ0xSLAorCQkJCSBncGlvX3RvX211eF9tYXBbZ3Bpb10pOworCX0gZWxzZSBpZiAoR1BJT19JU09VVChwaW4pKSB7CisJCXJldCA9CisJCSAgICBncGlvX3NldF9iaXQob3V0cHV0ID8gUElPX01VWF9TRVQgOiBQSU9fTVVYX0NMUiwKKwkJCQkgb3V0cF90b19tdXhfbWFwW2dwaW9dKTsKKwl9IGVsc2UgaWYgKEdQSU9fSVNNVVgocGluKSkgeworCQlyZXQgPSBncGlvX3NldF9iaXQob3V0cHV0ID8gUElPX01VWF9TRVQgOiBQSU9fTVVYX0NMUiwgZ3Bpbyk7CisJfQorCWdwaW9fdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2dwaW9fc2V0X3Bpbl9tdXgpOworCisvKiBSZWFkIHBpbiBtdXggZnVuY3Rpb246IDA9IHBpbiB1c2VkIGFzIEdQSU8sIDE9IHBpbiB1c2VkIGZvciBtdXhlZCBmdW5jdGlvbiovCitpbnQgcG54NDAwOF9ncGlvX3JlYWRfcGluX211eCh1bnNpZ25lZCBzaG9ydCBwaW4pCit7CisJaW50IGdwaW8gPSBHUElPX0JJVF9NQVNLKHBpbik7CisJaW50IHJldCA9IC1FRkFVTFQ7CisKKwlncGlvX2xvY2soKTsKKwlpZiAoR1BJT19JU0JJRChwaW4pKSB7CisJCXJldCA9IGdwaW9fcmVhZF9iaXQoUElPX01VWF9TVEFURSwgZ3Bpb190b19tdXhfbWFwW2dwaW9dKTsKKwl9IGVsc2UgaWYgKEdQSU9fSVNPVVQocGluKSkgeworCQlyZXQgPSBncGlvX3JlYWRfYml0KFBJT19NVVhfU1RBVEUsIG91dHBfdG9fbXV4X21hcFtncGlvXSk7CisJfSBlbHNlIGlmIChHUElPX0lTTVVYKHBpbikpIHsKKwkJcmV0ID0gZ3Bpb19yZWFkX2JpdChQSU9fTVVYX1NUQVRFLCBncGlvKTsKKwl9CisJZ3Bpb191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKHBueDQwMDhfZ3Bpb19yZWFkX3Bpbl9tdXgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMGE4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaXJxLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXBueDQwMDgvaXJxLmMKKyAqCisgKiBQTlg0MDA4IElSUSBjb250cm9sbGVyIGRyaXZlcgorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiBCYXNlZCBvbiByZWZlcmVuY2UgY29kZSByZWNlaXZlZCBmcm9tIFBoaWxpcHM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycS5oPgorCitzdGF0aWMgdTggcG54NDAwOF9pcnFfdHlwZVtOUl9JUlFTXSA9IFBOWDQwMDhfSVJRX1RZUEVTOworCitzdGF0aWMgdm9pZCBwbng0MDA4X21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfRVIoaXJxKSkgJiB+SU5UQ19CSVQoaXJxKSwgSU5UQ19FUihpcnEpKTsJLyogbWFzayBpbnRlcnJ1cHQgKi8KK30KKworc3RhdGljIHZvaWQgcG54NDAwOF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfRVIoaXJxKSkgfCBJTlRDX0JJVChpcnEpLCBJTlRDX0VSKGlycSkpOwkvKiB1bm1hc2sgaW50ZXJydXB0ICovCit9CisKK3N0YXRpYyB2b2lkIHBueDQwMDhfbWFza19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfRVIoaXJxKSkgJiB+SU5UQ19CSVQoaXJxKSwgSU5UQ19FUihpcnEpKTsJLyogbWFzayBpbnRlcnJ1cHQgKi8KKwlfX3Jhd193cml0ZWwoSU5UQ19CSVQoaXJxKSwgSU5UQ19TUihpcnEpKTsJLyogY2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLworfQorCitzdGF0aWMgaW50IHBueDQwMDhfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVJRVF9SSVNJTkc6CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0FUUihpcnEpKSB8IElOVENfQklUKGlycSksIElOVENfQVRSKGlycSkpOwkvKmVkZ2Ugc2Vuc2l0aXZlICovCisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0FQUihpcnEpKSB8IElOVENfQklUKGlycSksIElOVENfQVBSKGlycSkpOwkvKnJpc2luZyBlZGdlICovCisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2VkZ2VfSVJRKTsKKwkJYnJlYWs7CisJY2FzZSBJUlFUX0ZBTExJTkc6CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0FUUihpcnEpKSB8IElOVENfQklUKGlycSksIElOVENfQVRSKGlycSkpOwkvKmVkZ2Ugc2Vuc2l0aXZlICovCisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0FQUihpcnEpKSAmIH5JTlRDX0JJVChpcnEpLCBJTlRDX0FQUihpcnEpKTsJLypmYWxsaW5nIGVkZ2UgKi8KKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fZWRnZV9JUlEpOworCQlicmVhazsKKwljYXNlIElSUVRfTE9XOgorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19BVFIoaXJxKSkgJiB+SU5UQ19CSVQoaXJxKSwgSU5UQ19BVFIoaXJxKSk7CS8qbGV2ZWwgc2Vuc2l0aXZlICovCisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0FQUihpcnEpKSAmIH5JTlRDX0JJVChpcnEpLCBJTlRDX0FQUihpcnEpKTsJLypsb3cgbGV2ZWwgKi8KKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJYnJlYWs7CisJY2FzZSBJUlFUX0hJR0g6CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0FUUihpcnEpKSAmIH5JTlRDX0JJVChpcnEpLCBJTlRDX0FUUihpcnEpKTsJLypsZXZlbCBzZW5zaXRpdmUgKi8KKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfQVBSKGlycSkpIHwgSU5UQ19CSVQoaXJxKSwgSU5UQ19BUFIoaXJxKSk7CS8qIGhpZ2ggbGV2ZWwgKi8KKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fbGV2ZWxfSVJRKTsKKwkJYnJlYWs7CisKKwkvKiBJUlFUX0JPVEhFREdFIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIlBOWDQwMDggSVJROiBVbnN1cHBvcnRlZCBpcnEgdHlwZSAlZFxuIiwgdHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBwbng0MDA4X2lycV9jaGlwID0geworCS5hY2sgPSBwbng0MDA4X21hc2tfYWNrX2lycSwKKwkubWFzayA9IHBueDQwMDhfbWFza19pcnEsCisJLnVubWFzayA9IHBueDQwMDhfdW5tYXNrX2lycSwKKwkuc2V0X3R5cGUgPSBwbng0MDA4X3NldF9pcnFfdHlwZSwKK307CisKK3ZvaWQgX19pbml0IHBueDQwMDhfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIGNvbmZpZ3VyZSBhbmQgZW5hYmxlIElSUSAwLDEsMzAsMzEgKGNhc2NhZGUgaW50ZXJydXB0cykgbWFzayBhbGwgb3RoZXJzICovCisJcG54NDAwOF9zZXRfaXJxX3R5cGUoU1VCMV9JUlFfTiwgcG54NDAwOF9pcnFfdHlwZVtTVUIxX0lSUV9OXSk7CisJcG54NDAwOF9zZXRfaXJxX3R5cGUoU1VCMl9JUlFfTiwgcG54NDAwOF9pcnFfdHlwZVtTVUIyX0lSUV9OXSk7CisJcG54NDAwOF9zZXRfaXJxX3R5cGUoU1VCMV9GSVFfTiwgcG54NDAwOF9pcnFfdHlwZVtTVUIxX0ZJUV9OXSk7CisJcG54NDAwOF9zZXRfaXJxX3R5cGUoU1VCMl9GSVFfTiwgcG54NDAwOF9pcnFfdHlwZVtTVUIyX0ZJUV9OXSk7CisKKwlfX3Jhd193cml0ZWwoKDEgPDwgU1VCMl9GSVFfTikgfCAoMSA8PCBTVUIxX0ZJUV9OKSB8CisJCQkoMSA8PCBTVUIyX0lSUV9OKSB8ICgxIDw8IFNVQjFfSVJRX04pLAorCQlJTlRDX0VSKE1BSU5fQkFTRV9JTlQpKTsKKwlfX3Jhd193cml0ZWwoMCwgSU5UQ19FUihTSUMxX0JBU0VfSU5UKSk7CisJX19yYXdfd3JpdGVsKDAsIElOVENfRVIoU0lDMl9CQVNFX0lOVCkpOworCisJLyogY29uZmlndXJlIGFsbCBvdGhlciBJUlEncyAqLworCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJaWYgKGkgPT0gU1VCMl9GSVFfTiB8fCBpID09IFNVQjFfRklRX04gfHwKKwkJCWkgPT0gU1VCMl9JUlFfTiB8fCBpID09IFNVQjFfSVJRX04pCisJCQljb250aW51ZTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKKwkJc2V0X2lycV9jaGlwKGksICZwbng0MDA4X2lycV9jaGlwKTsKKwkJcG54NDAwOF9zZXRfaXJxX3R5cGUoaSwgcG54NDAwOF9pcnFfdHlwZVtpXSk7CisJfQorfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NDljZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYwpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jCisgKgorICogUG93ZXIgTWFuYWdlbWVudCBkcml2ZXIgZm9yIFBOWDQwMDgKKyAqCisgKiBBdXRob3JzOiBWaXRhbHkgV29vbCwgRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisKKyNkZWZpbmUgU1JBTV9WQSBJT19BRERSRVNTKFBOWDQwMDhfSVJBTV9CQVNFKQorCitzdGF0aWMgdm9pZCAqc2F2ZWRfc3JhbTsKKworc3RhdGljIHN0cnVjdCBjbGsgKnBsbDRfY2xrOworCitzdGF0aWMgaW5saW5lIHZvaWQgcG54NDAwOF9zdGFuZGJ5KHZvaWQpCit7CisJdm9pZCAoKnBueDQwMDhfY3B1X3N0YW5kYnlfcHRyKSAodm9pZCk7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWxvY2FsX2ZpcV9kaXNhYmxlKCk7CisKKwljbGtfZGlzYWJsZShwbGw0X2Nsayk7CisKKwkvKnNhdmluZyBwb3J0aW9uIG9mIFNSQU0gdG8gYmUgdXNlZCBieSBzdXNwZW5kIGZ1bmN0aW9uLiAqLworCW1lbWNweShzYXZlZF9zcmFtLCAodm9pZCAqKVNSQU1fVkEsIHBueDQwMDhfY3B1X3N0YW5kYnlfc3opOworCisJLyptYWtlIHN1cmUgU1JBTSBjb3B5IGdldHMgcGh5c2ljYWxseSB3cml0dGVuIGludG8gU0RSQU0uCisJICAgU0RSQU0gd2lsbCBiZSBwbGFjZWQgaW50byBzZWxmLXJlZnJlc2ggZHVyaW5nIHBvd2VyIGRvd24gKi8KKwlmbHVzaF9jYWNoZV9hbGwoKTsKKworCS8qY29weSBzdXNwZW5kIGZ1bmN0aW9uIGludG8gU1JBTSAqLworCW1lbWNweSgodm9pZCAqKVNSQU1fVkEsIHBueDQwMDhfY3B1X3N0YW5kYnksIHBueDQwMDhfY3B1X3N0YW5kYnlfc3opOworCisJLypkbyBzdXNwZW5kICovCisJcG54NDAwOF9jcHVfc3RhbmRieV9wdHIgPSAodm9pZCAqKVNSQU1fVkE7CisJcG54NDAwOF9jcHVfc3RhbmRieV9wdHIoKTsKKworCS8qcmVzdG9yaW5nIHBvcnRpb24gb2YgU1JBTSB0aGF0IHdhcyB1c2VkIGJ5IHN1c3BlbmQgZnVuY3Rpb24gKi8KKwltZW1jcHkoKHZvaWQgKilTUkFNX1ZBLCBzYXZlZF9zcmFtLCBwbng0MDA4X2NwdV9zdGFuZGJ5X3N6KTsKKworCWNsa19lbmFibGUocGxsNF9jbGspOworCisJbG9jYWxfZmlxX2VuYWJsZSgpOworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBueDQwMDhfc3VzcGVuZCh2b2lkKQoreworCXZvaWQgKCpwbng0MDA4X2NwdV9zdXNwZW5kX3B0cikgKHZvaWQpOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9maXFfZGlzYWJsZSgpOworCisJY2xrX2Rpc2FibGUocGxsNF9jbGspOworCisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIFNUQVJUX0lOVF9SU1JfUkVHKFNFX1BJTl9CQVNFX0lOVCkpOworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBTVEFSVF9JTlRfUlNSX1JFRyhTRV9JTlRfQkFTRV9JTlQpKTsKKworCS8qc2F2aW5nIHBvcnRpb24gb2YgU1JBTSB0byBiZSB1c2VkIGJ5IHN1c3BlbmQgZnVuY3Rpb24uICovCisJbWVtY3B5KHNhdmVkX3NyYW0sICh2b2lkICopU1JBTV9WQSwgcG54NDAwOF9jcHVfc3VzcGVuZF9zeik7CisKKwkvKm1ha2Ugc3VyZSBTUkFNIGNvcHkgZ2V0cyBwaHlzaWNhbGx5IHdyaXR0ZW4gaW50byBTRFJBTS4KKwkgICBTRFJBTSB3aWxsIGJlIHBsYWNlZCBpbnRvIHNlbGYtcmVmcmVzaCBkdXJpbmcgcG93ZXIgZG93biAqLworCWZsdXNoX2NhY2hlX2FsbCgpOworCisJLypjb3B5IHN1c3BlbmQgZnVuY3Rpb24gaW50byBTUkFNICovCisJbWVtY3B5KCh2b2lkICopU1JBTV9WQSwgcG54NDAwOF9jcHVfc3VzcGVuZCwgcG54NDAwOF9jcHVfc3VzcGVuZF9zeik7CisKKwkvKmRvIHN1c3BlbmQgKi8KKwlwbng0MDA4X2NwdV9zdXNwZW5kX3B0ciA9ICh2b2lkICopU1JBTV9WQTsKKwlwbng0MDA4X2NwdV9zdXNwZW5kX3B0cigpOworCisJLypyZXN0b3JpbmcgcG9ydGlvbiBvZiBTUkFNIHRoYXQgd2FzIHVzZWQgYnkgc3VzcGVuZCBmdW5jdGlvbiAqLworCW1lbWNweSgodm9pZCAqKVNSQU1fVkEsIHNhdmVkX3NyYW0sIHBueDQwMDhfY3B1X3N1c3BlbmRfc3opOworCisJY2xrX2VuYWJsZShwbGw0X2Nsayk7CisKKwlsb2NhbF9maXFfZW5hYmxlKCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW50IHBueDQwMDhfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKKwkJcG54NDAwOF9zdGFuZGJ5KCk7CisJCWJyZWFrOworCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCXBueDQwMDhfc3VzcGVuZCgpOworCQlicmVhazsKKwljYXNlIFBNX1NVU1BFTkRfRElTSzoKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgcHJvY2Vzc2VzIGFyZSBmcm96ZW4sIGJ1dCBiZWZvcmUgd2Ugc2h1dCBkb3duIGRldmljZXMuCisgKi8KK3N0YXRpYyBpbnQgcG54NDAwOF9wbV9wcmVwYXJlKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBQTV9TVVNQRU5EX1NUQU5EQlk6CisJY2FzZSBQTV9TVVNQRU5EX01FTToKKwkJYnJlYWs7CisKKwljYXNlIFBNX1NVU1BFTkRfRElTSzoKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQ2FsbGVkIGFmdGVyIGRldmljZXMgYXJlIHJlLXNldHVwLCBidXQgYmVmb3JlIHByb2Nlc3NlcyBhcmUgdGhhd2VkLgorICovCitzdGF0aWMgaW50IHBueDQwMDhfcG1fZmluaXNoKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB0byBQTV9ESVNLX0ZJUk1XQVJFIHNvIHdlIGNhbiBxdWlja2x5IHZldG8gc3VzcGVuZC10by1kaXNrLgorICovCitzdGF0aWMgc3RydWN0IHBtX29wcyBwbng0MDA4X3BtX29wcyA9IHsKKwkucHJlcGFyZSA9IHBueDQwMDhfcG1fcHJlcGFyZSwKKwkuZW50ZXIgPSBwbng0MDA4X3BtX2VudGVyLAorCS5maW5pc2ggPSBwbng0MDA4X3BtX2ZpbmlzaCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBueDQwMDhfcG1faW5pdCh2b2lkKQoreworCXUzMiBzcmFtX3NpemVfdG9fYWxsb2NhdGU7CisKKwlwbGw0X2NsayA9IGNsa19nZXQoMCwgImNrX3BsbDQiKTsKKwlpZiAoSVNfRVJSKHBsbDRfY2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJQTSBTdXNwZW5kIGNhbm5vdCBhY3F1aXJlIEFSTShQTEw0KSBjbG9jayBjb250cm9sXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGxsNF9jbGspOworCX0KKworCWlmIChwbng0MDA4X2NwdV9zdGFuZGJ5X3N6ID4gcG54NDAwOF9jcHVfc3VzcGVuZF9zeikKKwkJc3JhbV9zaXplX3RvX2FsbG9jYXRlID0gcG54NDAwOF9jcHVfc3RhbmRieV9zejsKKwllbHNlCisJCXNyYW1fc2l6ZV90b19hbGxvY2F0ZSA9IHBueDQwMDhfY3B1X3N1c3BlbmRfc3o7CisKKwlzYXZlZF9zcmFtID0ga21hbGxvYyhzcmFtX3NpemVfdG9fYWxsb2NhdGUsIEdGUF9BVE9NSUMpOworCWlmICghc2F2ZWRfc3JhbSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJQTSBTdXNwZW5kOiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgcG9ydGlvbiBvZiBTUkFNXG4iKTsKKwkJY2xrX3B1dChwbGw0X2Nsayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBtX3NldF9vcHMoJnBueDQwMDhfcG1fb3BzKTsKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChwbng0MDA4X3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWUwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvc2VyaWFsLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXBueDQwMDgvc2VyaWFsLmMKKyAqCisgKiAgUE5YNDAwOCBVQVJUIGluaXRpYWxpemF0aW9uCisgKgorICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuIChjKSAyMDA1CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisKKyNkZWZpbmUgVUFSVF8zCQkwCisjZGVmaW5lIFVBUlRfNAkJMQorI2RlZmluZSBVQVJUXzUJCTIKKyNkZWZpbmUgVUFSVF82CQkzCisjZGVmaW5lIFVBUlRfVU5LTk9XTgkoLTEpCisKKyNkZWZpbmUgVUFSVDNfQkFTRV9WQQlJT19BRERSRVNTKFBOWDQwMDhfVUFSVDNfQkFTRSkKKyNkZWZpbmUgVUFSVDRfQkFTRV9WQQlJT19BRERSRVNTKFBOWDQwMDhfVUFSVDRfQkFTRSkKKyNkZWZpbmUgVUFSVDVfQkFTRV9WQQlJT19BRERSRVNTKFBOWDQwMDhfVUFSVDVfQkFTRSkKKyNkZWZpbmUgVUFSVDZfQkFTRV9WQQlJT19BRERSRVNTKFBOWDQwMDhfVUFSVDZfQkFTRSkKKworI2RlZmluZSBVQVJUX0ZDUl9PRkZTRVQJCTgKKyNkZWZpbmUgVUFSVF9GSUZPX1NJWkUJCTY0CisKK3ZvaWQgcG54NDAwOF91YXJ0X2luaXQodm9pZCkKK3sKKwl1MzIgdG1wOworCWludCBpID0gVUFSVF9GSUZPX1NJWkU7CisKKwlfX3Jhd193cml0ZWwoMHhDMSwgVUFSVDVfQkFTRV9WQSArIFVBUlRfRkNSX09GRlNFVCk7CisJX19yYXdfd3JpdGVsKDB4QzEsIFVBUlQzX0JBU0VfVkEgKyBVQVJUX0ZDUl9PRkZTRVQpOworCisJLyogU2VuZCBhIE5VTEwgdG8gZml4IHRoZSBVQVJUIEhXIGJ1ZyAqLworCV9fcmF3X3dyaXRlbCgweDAwLCBVQVJUNV9CQVNFX1ZBKTsKKwlfX3Jhd193cml0ZWwoMHgwMCwgVUFSVDNfQkFTRV9WQSk7CisKKwl3aGlsZSAoaS0tKSB7CisJCXRtcCA9IF9fcmF3X3JlYWRsKFVBUlQ1X0JBU0VfVkEpOworCQl0bXAgPSBfX3Jhd19yZWFkbChVQVJUM19CQVNFX1ZBKTsKKwl9CisJX19yYXdfd3JpdGVsKDAsIFVBUlQ1X0JBU0VfVkEgKyBVQVJUX0ZDUl9PRkZTRVQpOworCV9fcmF3X3dyaXRlbCgwLCBVQVJUM19CQVNFX1ZBICsgVUFSVF9GQ1JfT0ZGU0VUKTsKKworCS8qIHNldHVwIHdha2V1cCBpbnRlcnJ1cHQgKi8KKwlzdGFydF9pbnRfc2V0X3Jpc2luZ19lZGdlKFNFX1UzX1JYX0lOVCk7CisJc3RhcnRfaW50X2FjayhTRV9VM19SWF9JTlQpOworCXN0YXJ0X2ludF91bWFzayhTRV9VM19SWF9JTlQpOworCisJc3RhcnRfaW50X3NldF9yaXNpbmdfZWRnZShTRV9VNV9SWF9JTlQpOworCXN0YXJ0X2ludF9hY2soU0VfVTVfUlhfSU5UKTsKKwlzdGFydF9pbnRfdW1hc2soU0VfVTVfUlhfSU5UKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2M4MDJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3NsZWVwLlMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXBueDQwMDgvc2xlZXAuUworICoKKyAqIFBOWDQwMDggc3VwcG9ydCBmb3IgU1RPUCBtb2RlIGFuZCBTRFJBTSBzZWxmLXJlZnJlc2gKKyAqCisgKiBBdXRob3JzOiBEbWl0cnkgQ2hpZ2lyZXYsIFZpdGFseSBXb29sIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjZGVmaW5lIFBXUk1BTl9WQV9CQVNFIElPX0FERFJFU1MoUE5YNDAwOF9QV1JNQU5fQkFTRSkKKyNkZWZpbmUgUFdSX0NUUkxfUkVHX09GRlMgMHg0NAorCisjZGVmaW5lIFNEUkFNX0NGR19WQV9CQVNFIElPX0FERFJFU1MoUE5YNDAwOF9TRFJBTV9DRkdfQkFTRSkKKyNkZWZpbmUgTVBNQ19TVEFUVVNfUkVHX09GRlMgMHg0CisKKwkJLnRleHQKKworRU5UUlkocG54NDAwOF9jcHVfc3VzcGVuZCkKKwlAdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW50ZXJlZCBpbiBEaXJlY3QgcnVuIG1vZGUuCisKKwlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJc3RtZmQJc3AhLCB7cjAgLSByNiwgbHJ9CisKKwlAIHNldHVwIFBvd2VyIE1hbmFnZXIgYmFzZSBhZGRyZXNzIGluIHI0CisJQCBhbmQgcHV0IGl0J3MgdmFsdWUgaW4gcjUKKwltb3YJcjQsICMoUFdSTUFOX1ZBX0JBU0UgJiAweGZmMDAwMDAwKQorCW9ycglyNCwgcjQsICMoUFdSTUFOX1ZBX0JBU0UgJiAweDAwZmYwMDAwKQorCW9ycglyNCwgcjQsICMoUFdSTUFOX1ZBX0JBU0UgJiAweDAwMDBmZjAwKQorCW9ycglyNCwgcjQsICMoUFdSTUFOX1ZBX0JBU0UgJiAweDAwMDAwMGZmKQorCWxkcglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIHNldHVwIFNEUkFNIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzIGluIHIyCisJQCBhbmQgcHV0IGl0J3MgdmFsdWUgaW4gcjMKKwltb3YJcjIsICMoU0RSQU1fQ0ZHX1ZBX0JBU0UgJiAweGZmMDAwMDAwKQorCW9ycglyMiwgcjIsICMoU0RSQU1fQ0ZHX1ZBX0JBU0UgJiAweDAwZmYwMDAwKQorCW9ycglyMiwgcjIsICMoU0RSQU1fQ0ZHX1ZBX0JBU0UgJiAweDAwMDBmZjAwKQorCW9ycglyMiwgcjIsICMoU0RSQU1fQ0ZHX1ZBX0JBU0UgJiAweDAwMDAwMGZmKQorCWxkcglyMywgW3IyLCAjTVBNQ19TVEFUVVNfUkVHX09GRlNdIEBleHRyYSByZWFkIC0gSFcgYnVnIHdvcmthcm91bmQKKworCUAgY2xlYXIgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdCBsYXRjaAorCWFuZAlyNSwgcjUsICMofigxIDw8IDgpKQorCUAgY2xlYXIgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdAorCWFuZAlyNSwgcjUsICMofigxIDw8IDkpKQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIGRvIHNhdmUgY3VycmVudCBiaXQgc2V0dGluZ3MgaW4gcjEKKwltb3YJcjEsIHI1CisKKwlAIHNldCBTRFJBTSBzZWxmLXJlZnJlc2ggYml0CisJb3JyCXI1LCByNSwgIygxIDw8IDkpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgc2V0IFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQgbGF0Y2gKKwlvcnIJcjUsIHI1LCAjKDEgPDwgOCkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBjbGVhciBTRFJBTSBzZWxmLXJlZnJlc2ggYml0IGxhdGNoCisJYW5kCXI1LCByNSwgIyh+KDEgPDwgOCkpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgY2xlYXIgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdAorCWFuZAlyNSwgcjUsICMofigxIDw8IDkpKQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIHdhaXQgZm9yIFNEUkFNIHRvIGdldCBpbnRvIHNlbGYtcmVmcmVzaCBtb2RlCisyOglsZHIJcjMsIFtyMiwgI01QTUNfU1RBVFVTX1JFR19PRkZTXQorCXRzdAlyMywgIygxIDw8IDIpCisJYmVxCTJiCisKKwlAIHRvIHByZXBhcmUgU0RSQU0gdG8gZ2V0IG91dCBvZiBzZWxmLXJlZnJlc2ggbW9kZSBhZnRlciB3YWtldXAKKwlvcnIJcjUsIHI1LCAjKDEgPDwgNykKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBkbyBlbnRlciBzdG9wIG1vZGUKKwlvcnIJcjUsIHI1LCAjKDEgPDwgMCkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCisJQCBzbGVlcGluZyBub3cuLi4KKworCUAgY29taW5nIG91dCBvZiBTVE9QIG1vZGUgaW50byBEaXJlY3QgUnVuIG1vZGUKKwlAIGNsZWFyIFNUT1AgbW9kZSBhbmQgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdHMKKwlzdHIJcjEsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCB3YWl0IGZvciBTRFJBTSB0byBnZXQgb3V0IHNlbGYtcmVmcmVzaCBtb2RlCiszOglsZHIJcjMsIFtyMiwgI01QTUNfU1RBVFVTX1JFR19PRkZTXQorCXRzdAlyMywgIzUKKwlibmUJM2IKKworCUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKwlsZG1mZCAgIHNwISwge3IwIC0gcjYsIHBjfQorCitFTlRSWShwbng0MDA4X2NwdV9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBwbng0MDA4X2NwdV9zdXNwZW5kCisKK0VOVFJZKHBueDQwMDhfY3B1X3N0YW5kYnkpCisJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCXN0bWZkCXNwISwge3IwIC0gcjYsIGxyfQorCisJQCBzZXR1cCBQb3dlciBNYW5hZ2VyIGJhc2UgYWRkcmVzcyBpbiByNAorCUAgYW5kIHB1dCBpdCdzIHZhbHVlIGluIHI1CisJbW92CXI0LCAjKFBXUk1BTl9WQV9CQVNFICYgMHhmZjAwMDAwMCkKKwlvcnIJcjQsIHI0LCAjKFBXUk1BTl9WQV9CQVNFICYgMHgwMGZmMDAwMCkKKwlvcnIJcjQsIHI0LCAjKFBXUk1BTl9WQV9CQVNFICYgMHgwMDAwZmYwMCkKKwlvcnIJcjQsIHI0LCAjKFBXUk1BTl9WQV9CQVNFICYgMHgwMDAwMDBmZikKKwlsZHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBzZXR1cCBTRFJBTSBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyBpbiByMgorCUAgYW5kIHB1dCBpdCdzIHZhbHVlIGluIHIzCisJbW92CXIyLCAjKFNEUkFNX0NGR19WQV9CQVNFICYgMHhmZjAwMDAwMCkKKwlvcnIJcjIsIHIyLCAjKFNEUkFNX0NGR19WQV9CQVNFICYgMHgwMGZmMDAwMCkKKwlvcnIJcjIsIHIyLCAjKFNEUkFNX0NGR19WQV9CQVNFICYgMHgwMDAwZmYwMCkKKwlvcnIJcjIsIHIyLCAjKFNEUkFNX0NGR19WQV9CQVNFICYgMHgwMDAwMDBmZikKKwlsZHIJcjMsIFtyMiwgI01QTUNfU1RBVFVTX1JFR19PRkZTXSBAZXh0cmEgcmVhZCAtIEhXIGJ1ZyB3b3JrYXJvdW5kCisKKwlAIGNsZWFyIFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQgbGF0Y2gKKwlhbmQJcjUsIHI1LCAjKH4oMSA8PCA4KSkKKwlAIGNsZWFyIFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQKKwlhbmQJcjUsIHI1LCAjKH4oMSA8PCA5KSkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBkbyBzYXZlIGN1cnJlbnQgYml0IHNldHRpbmdzIGluIHIxCisJbW92CXIxLCByNQorCisJQCBzZXQgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdAorCW9ycglyNSwgcjUsICMoMSA8PCA5KQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIHNldCBTRFJBTSBzZWxmLXJlZnJlc2ggYml0IGxhdGNoCisJb3JyCXI1LCByNSwgIygxIDw8IDgpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgY2xlYXIgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdCBsYXRjaAorCWFuZAlyNSwgcjUsICMofigxIDw8IDgpKQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIGNsZWFyIFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQKKwlhbmQJcjUsIHI1LCAjKH4oMSA8PCA5KSkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCB3YWl0IGZvciBTRFJBTSB0byBnZXQgaW50byBzZWxmLXJlZnJlc2ggbW9kZQorMjoJbGRyCXIzLCBbcjIsICNNUE1DX1NUQVRVU19SRUdfT0ZGU10KKwl0c3QJcjMsICMoMSA8PCAyKQorCWJlcQkyYgorCisJQCBzZXQgJ2dldCBvdXQgb2Ygc2VsZi1yZWZyZXNoIG1vZGUgYWZ0ZXIgd2FrZXVwJyBiaXQKKwlvcnIJcjUsIHI1LCAjKDEgPDwgNykKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJbWNyICAgICBwMTUsIDAsIHIwLCBjNywgYzAsIDQJQCBraW5kYSBzbGVlcGluZyBub3cuLi4KKworCUAgc2V0IFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQgbGF0Y2gKKwlvcnIJcjUsIHI1LCAjKDEgPDwgOCkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBjbGVhciBTRFJBTSBzZWxmLXJlZnJlc2ggYml0IGxhdGNoCisJYW5kCXI1LCByNSwgIyh+KDEgPDwgOCkpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgd2FpdCBmb3IgU0RSQU0gdG8gZ2V0IG91dCBzZWxmLXJlZnJlc2ggbW9kZQorMzoJbGRyCXIzLCBbcjIsICNNUE1DX1NUQVRVU19SRUdfT0ZGU10KKwl0c3QJcjMsICM1CisJYm5lCTNiCisKKwlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisJbGRtZmQgICBzcCEsIHtyMCAtIHI2LCBwY30KKworRU5UUlkocG54NDAwOF9jcHVfc3RhbmRieV9zeikKKwkud29yZAkuIC0gcG54NDAwOF9jcHVfc3RhbmRieQorCitFTlRSWShwbng0MDA4X2NhY2hlX2NsZWFuX2ludmFsaWRhdGUpCisJc3RtZmQJc3AhLCB7cjAgLSByNiwgbHJ9CisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNiwgMAkJQCBpbnZhbGlkYXRlIEQgY2FjaGUKKyNlbHNlCisxOgltcmMJcDE1LCAwLCByMTUsIGM3LCBjMTQsIDMJCUAgdGVzdCxjbGVhbixpbnZhbGlkYXRlCisJYm5lICAgICAxYgorI2VuZGlmCisJbGRtZmQgICBzcCEsIHtyMCAtIHI2LCBwY30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZTY4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYworICoKKyAqIFBOWDQwMDggVGltZXJzCisgKgorICogQXV0aG9yczogVml0YWx5IFdvb2wsIERtaXRyeSBDaGlnaXJldiwgR3JpZ29yeSBUb2xzdG9seXRraW4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorCisvKiEgTm90ZTogYWxsIHRpbWVycyBhcmUgVVBDT1VOVElORyAqLworCisvKiEKKyAqIFJldHVybnMgbnVtYmVyIG9mIHVzIHNpbmNlIGxhc3QgY2xvY2sgaW50ZXJydXB0LiAgTm90ZSB0aGF0IGludGVycnVwdHMKKyAqIHdpbGwgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IGRvX2dldHRpbWVvZmZzZXQoKQorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwbng0MDA4X2dldHRpbWVvZmZzZXQodm9pZCkKK3sKKwl1MzIgdGlja3NfdG9fbWF0Y2ggPQorCSAgICBfX3Jhd19yZWFkbChIU1RJTV9NQVRDSDApIC0gX19yYXdfcmVhZGwoSFNUSU1fQ09VTlRFUik7CisJdTMyIGVsYXBzZWQgPSBMQVRDSCAtIHRpY2tzX3RvX21hdGNoOworCXJldHVybiAoZWxhcHNlZCAqICh0aWNrX25zZWMgLyAxMDAwKSkgLyBMQVRDSDsKK30KKworLyohCisgKiBJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwbng0MDA4X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmIChfX3Jhd19yZWFkbChIU1RJTV9JTlQpICYgTUFUQ0gwX0lOVCkgeworCisJCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCisJCWRvIHsKKwkJCXRpbWVyX3RpY2socmVncyk7CisKKwkJCS8qCisJCQkgKiB0aGlzIGFsZ29yaXRobSB0YWtlcyBjYXJlIG9mIHBvc3NpYmxlIGRlbGF5CisJCQkgKiBmb3IgdGhpcyBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9uZ2VyIHRoYW4gYSBub3JtYWwKKwkJCSAqIHRpbWVyIHBlcmlvZAorCQkJICovCisJCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSFNUSU1fTUFUQ0gwKSArIExBVENILAorCQkJCSAgICAgSFNUSU1fTUFUQ0gwKTsKKwkJCV9fcmF3X3dyaXRlbChNQVRDSDBfSU5ULCBIU1RJTV9JTlQpOwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KKworCQkJLyoKKwkJCSAqIFRoZSBnb2FsIGlzIHRvIGtlZXAgaW5jcmVtZW50aW5nIEhTVElNX01BVENIMAorCQkJICogcmVnaXN0ZXIgdW50aWwgSFNUSU1fTUFUQ0gwIGluZGljYXRlcyB0aW1lIGFmdGVyCisJCQkgKiB3aGF0IEhTVElNX0NPVU5URVIgaW5kaWNhdGVzLgorCQkJICovCisJCX0gd2hpbGUgKChzaWduZWQpCisJCQkgKF9fcmF3X3JlYWRsKEhTVElNX01BVENIMCkgLQorCQkJICBfX3Jhd19yZWFkbChIU1RJTV9DT1VOVEVSKSkgPCAwKTsKKworCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcG54NDAwOF90aW1lcl9pcnEgPSB7CisJLm5hbWUgPSAiUE5YNDAwOCBUaWNrIFRpbWVyIiwKKwkuZmxhZ3MgPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuaGFuZGxlciA9IHBueDQwMDhfdGltZXJfaW50ZXJydXB0Cit9OworCisvKiEKKyAqIFNldCB1cCB0aW1lciBhbmQgdGltZXIgaW50ZXJydXB0LgorICovCitzdGF0aWMgX19pbml0IHZvaWQgcG54NDAwOF9zZXR1cF90aW1lcih2b2lkKQoreworCV9fcmF3X3dyaXRlbChSRVNFVF9DT1VOVCwgTVNUSU1fQ1RSTCk7CisJd2hpbGUgKF9fcmF3X3JlYWRsKE1TVElNX0NPVU5URVIpKSA7CS8qIHdhaXQgZm9yIHJlc2V0IHRvIGNvbXBsZXRlLiAxMDAlIGd1YXJhbnRlZSBldmVudCAqLworCV9fcmF3X3dyaXRlbCgwLCBNU1RJTV9DVFJMKTsJLyogc3RvcCB0aGUgdGltZXIgKi8KKwlfX3Jhd193cml0ZWwoMCwgTVNUSU1fTUNUUkwpOworCisJX19yYXdfd3JpdGVsKFJFU0VUX0NPVU5ULCBIU1RJTV9DVFJMKTsKKwl3aGlsZSAoX19yYXdfcmVhZGwoSFNUSU1fQ09VTlRFUikpIDsJLyogd2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUuIDEwMCUgZ3VhcmFudGVlIGV2ZW50ICovCisJX19yYXdfd3JpdGVsKDAsIEhTVElNX0NUUkwpOworCV9fcmF3X3dyaXRlbCgwLCBIU1RJTV9NQ1RSTCk7CisJX19yYXdfd3JpdGVsKDAsIEhTVElNX0NDUik7CisJX19yYXdfd3JpdGVsKDEyLCBIU1RJTV9QTUFUQ0gpOwkvKiBzY2FsZSBkb3duIHRvIDEgTUhaICovCisJX19yYXdfd3JpdGVsKExBVENILCBIU1RJTV9NQVRDSDApOworCV9fcmF3X3dyaXRlbChNUjBfSU5ULCBIU1RJTV9NQ1RSTCk7CisKKwlzZXR1cF9pcnEoSFNUSU1FUl9JTlQsICZwbng0MDA4X3RpbWVyX2lycSk7CisKKwlfX3Jhd193cml0ZWwoQ09VTlRfRU5BQiB8IERFQlVHX0VOLCBIU1RJTV9DVFJMKTsJLypzdGFydCB0aW1lciwgc3RvcCB3aGVuIEpUQUcgYWN0aXZlICovCit9CisKKy8qIFRpbWVyIENsb2NrIENvbnRyb2wgaW4gUE0gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVElNQ0xLX0NUUkxfUkVHICBJT19BRERSRVNTKChQTlg0MDA4X1BXUk1BTl9CQVNFICsgMHhCQykpCisjZGVmaW5lIFdBVENIRE9HX0NMS19FTiAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRJTUVSX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAyCS8qIEhTIGFuZCBNUyB0aW1lcnM/ICovCisKK3N0YXRpYyB1MzIgdGltY2xrX2N0cmxfcmVnX3NhdmU7CisKK3ZvaWQgcG54NDAwOF90aW1lcl9zdXNwZW5kKHZvaWQpCit7CisJdGltY2xrX2N0cmxfcmVnX3NhdmUgPSBfX3Jhd19yZWFkbChUSU1DTEtfQ1RSTF9SRUcpOworCV9fcmF3X3dyaXRlbCgwLCBUSU1DTEtfQ1RSTF9SRUcpOwkvKiBkaXNhYmxlIHRpbWVycyAqLworfQorCit2b2lkIHBueDQwMDhfdGltZXJfcmVzdW1lKHZvaWQpCit7CisJX19yYXdfd3JpdGVsKHRpbWNsa19jdHJsX3JlZ19zYXZlLCBUSU1DTEtfQ1RSTF9SRUcpOwkvKiBlbmFibGUgdGltZXJzICovCit9CisKK3N0cnVjdCBzeXNfdGltZXIgcG54NDAwOF90aW1lciA9IHsKKwkuaW5pdCA9IHBueDQwMDhfc2V0dXBfdGltZXIsCisJLm9mZnNldCA9IHBueDQwMDhfZ2V0dGltZW9mZnNldCwKKwkuc3VzcGVuZCA9IHBueDQwMDhfdGltZXJfc3VzcGVuZCwKKwkucmVzdW1lID0gcG54NDAwOF90aW1lcl9yZXN1bWUsCit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKaW5kZXggM2UyNmQ3Yy4uMWFiMjZjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwpAQCAtMjIsNiArMjIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KIAorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eF9zcGkuaD4KKwogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMTk2LDYgKzIwMCw3OCBAQAogCX0sCiB9OwogCisvKiBBRFM3ODQ2IGlzIGNvbm5lY3RlZCB0aHJvdWdoIFNTUCAuLi4gYW5kIGlmIHlvdXIgYm9hcmQgaGFzIEo1IHBvcHVsYXRlZCwKKyAqIHlvdSBjYW4gc2VsZWN0IGl0IHRvIHJlcGxhY2UgdGhlIHVjYjE0MDAgYnkgc3dpdGNoaW5nIHRoZSB0b3VjaHNjcmVlbiBjYWJsZQorICogKHRvIEo1KSBhbmQgcG9raW5nIGJvYXJkIHJlZ2lzdGVycyAoYXMgZG9uZSBiZWxvdykuICBFbHNlIGl0J3Mgb25seSB1c2VmdWwKKyAqIGZvciB0aGUgdGVtcGVyYXR1cmUgc2Vuc29ycy4KKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBweGFfc3NwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gX19QUkVHKFNTQ1IwX1AoMSkpLAorCQkuZW5kCT0gX19QUkVHKFNTQ1IwX1AoMSkpICsgMHgxNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TU1AsCisJCS5lbmQJPSBJUlFfU1NQLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBweGFfc3NwX21hc3Rlcl9pbmZvID0geworCS5zc3BfdHlwZQk9IFBYQTI1eF9TU1AsCisJLmNsb2NrX2VuYWJsZQk9IENLRU4zX1NTUCwKKwkubnVtX2NoaXBzZWxlY3QJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhX3NzcCA9IHsKKwkubmFtZQkJPSAicHhhMnh4LXNwaSIsCisJLmlkCQk9IDEsCisJLnJlc291cmNlCT0gcHhhX3NzcF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YV9zc3BfcmVzb3VyY2VzKSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZweGFfc3NwX21hc3Rlcl9pbmZvLAorCX0sCit9OworCitzdGF0aWMgaW50IGx1YmJvY2tfYWRzNzg0Nl9wZW5kb3duX3N0YXRlKHZvaWQpCit7CisJLyogVFNfQlVTWSBpcyBiaXQgOCBpbiBMVUJfTUlTQ19SRCwgYnV0IHBlbmRvd24gaXMgaXJxLW9ubHkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgYWRzX2luZm8gPSB7CisJLm1vZGVsCQkJPSA3ODQ2LAorCS52cmVmX2RlbGF5X3VzZWNzCT0gMTAwLAkJLyogaW50ZXJuYWwsIG5vIGNhcCAqLworCS5nZXRfcGVuZG93bl9zdGF0ZQk9IGx1YmJvY2tfYWRzNzg0Nl9wZW5kb3duX3N0YXRlLAorCS8vIC54X3BsYXRlX29obXMJCT0gNTAwLAkvKiBHVUVTUyEgKi8KKwkvLyAueV9wbGF0ZV9vaG1zCQk9IDUwMCwJLyogR1VFU1MhICovCit9OworCitzdGF0aWMgdm9pZCBhZHM3ODQ2X2NzKHUzMiBjb21tYW5kKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZAlUU19uQ1MgPSAxIDw8IDExOworCWx1YmJvY2tfc2V0X21pc2Nfd3IoVFNfbkNTLCAoY29tbWFuZCA9PSBQWEEyWFhfQ1NfQVNTRVJUKSA/IDAgOiBUU19uQ1MpOworfQorCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBhZHNfaHcgPSB7CisJLnR4X3RocmVzaG9sZAkJPSAxLAorCS5yeF90aHJlc2hvbGQJCT0gMiwKKwkuY3NfY29udHJvbAkJPSBhZHM3ODQ2X2NzLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBzcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7IHsKKwkubW9kYWxpYXMJPSAiYWRzNzg0NiIsCisJLnBsYXRmb3JtX2RhdGEJPSAmYWRzX2luZm8sCisJLmNvbnRyb2xsZXJfZGF0YSA9ICZhZHNfaHcsCisJLmlycQkJPSBMVUJCT0NLX0JCX0lSUSwKKwkubWF4X3NwZWVkX2h6CT0gMTIwMDAwIC8qIG1heCBzYW1wbGUgcmF0ZSBhdCAzViAqLworCQkJCSogMjYgLyogY29tbWFuZCArIGRhdGEgKyBvdmVyaGVhZCAqLywKKwkuYnVzX251bQk9IDEsCisJLmNoaXBfc2VsZWN0CT0gMCwKK30sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzbWM5MXgiLAogCS5pZAkJPSAtMSwKQEAgLTI3Miw2ICszNDgsNyBAQAogCSZzbWM5MXhfZGV2aWNlLAogCSZsdWJib2NrX2ZsYXNoX2RldmljZVswXSwKIAkmbHViYm9ja19mbGFzaF9kZXZpY2VbMV0sCisJJnB4YV9zc3AsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBzaGFycF9sbTh2MzEgX19pbml0ZGF0YSA9IHsKQEAgLTQwMCw2ICs0NzcsOCBAQAogCWx1YmJvY2tfZmxhc2hfZGF0YVtmbGFzaGJvb3ReMV0ubmFtZSA9ICJhcHBsaWNhdGlvbi1mbGFzaCI7CiAJbHViYm9ja19mbGFzaF9kYXRhW2ZsYXNoYm9vdF0ubmFtZSA9ICJib290LXJvbSI7CiAJKHZvaWQpIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpX2JvYXJkX2luZm8pKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBsdWJib2NrX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewpAQCAtNDE2LDYgKzQ5NSwxMSBAQAogCXB4YV9tYXBfaW8oKTsKIAlpb3RhYmxlX2luaXQobHViYm9ja19pb19kZXNjLCBBUlJBWV9TSVpFKGx1YmJvY2tfaW9fZGVzYykpOwogCisJLyogU1NQIGRhdGEgcGlucyAqLworCXB4YV9ncGlvX21vZGUoR1BJTzIzX1NDTEtfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzI1X1NUWERfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzI2X1NSWERfTUQpOworCiAJLyogVGhpcyBlbmFibGVzIHRoZSBCVFVBUlQgKi8KIAlweGFfZ3Bpb19tb2RlKEdQSU80Ml9CVFJYRF9NRCk7CiAJcHhhX2dwaW9fbW9kZShHUElPNDNfQlRUWERfTUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwppbmRleCA5NzBmOThkLi4wYzMzNDEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwpAQCAtNzAsNiArNzAsMTggQEAKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNNREsyNDQwLgogCitjb25maWcgU01ESzI0NDBfQ1BVMjQ0MAorCWJvb2wgIlNNREsyNDQwIHdpdGggUzNDMjQ0MCBjcHUgbW9kdWxlIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDQwCisJZGVmYXVsdCB5IGlmIEFSQ0hfUzNDMjQ0MAorCXNlbGVjdCBDUFVfUzNDMjQ0MAorCitjb25maWcgU01ESzI0NDBfQ1BVMjQ0MgorCWJvb2wgIlNNRE0yNDQwIHdpdGggUzNDMjQ0MiBjcHUgbW9kdWxlIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDQwCisJc2VsZWN0IENQVV9TM0MyNDQyCisKKwogY29uZmlnIE1BQ0hfVlIxMDAwCiAJYm9vbCAiVGhvcmNvbSBWUjEwMDAiCiAJc2VsZWN0IENQVV9TM0MyNDEwCkBAIC0xMDksMTIgKzEyMSwyNiBAQAogCSAgU3VwcG9ydCBmb3IgUzNDMjQxMCBhbmQgUzNDMjQxMEEgZmFtaWx5IGZyb20gdGhlIFMzQzI0WFggbGluZQogCSAgb2YgU2Ftc3VuZyBNb2JpbGUgQ1BVcy4KIAorY29uZmlnIENQVV9TM0MyNDRYCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIChDUFVfUzNDMjQ0MCB8fCBDUFVfUzNDMjQ0MikKKwloZWxwCisJICBTdXBwb3J0IGZvciBTM0MyNDQwIGFuZCBTM0MyNDQyIFNhbXN1bmcgTW9iaWxlIENQVSBiYXNlZCBzeXN0ZW1zLgorCiBjb25maWcgQ1BVX1MzQzI0NDAKIAlib29sCiAJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwlzZWxlY3QgQ1BVX1MzQzI0NFgKIAloZWxwCiAJICBTdXBwb3J0IGZvciBTM0MyNDQwIFNhbXN1bmcgTW9iaWxlIENQVSBiYXNlZCBzeXN0ZW1zLgogCitjb25maWcgQ1BVX1MzQzI0NDIKKwlib29sCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MjAKKwlzZWxlY3QgQ1BVX1MzQzI0NFgKKwloZWxwCisJICBTdXBwb3J0IGZvciBTM0MyNDQyIFNhbXN1bmcgTW9iaWxlIENQVSBiYXNlZCBzeXN0ZW1zLgorCiBjb21tZW50ICJTM0MyNDEwIEJvb3QiCiAKIGNvbmZpZyBTM0MyNDEwX0JPT1RfV0FUQ0hET0cKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQppbmRleCAzZTU3MTJkLi41ZTA5MzU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCkBAIC0yNCw2ICsyNCwxMSBAQAogb2JqLSQoQ09ORklHX1BNKQkgICArPSBwbS5vIHNsZWVwLm8KIG9iai0kKENPTkZJR19QTV9TSU1URUMpCSAgICs9IHBtLXNpbXRlYy5vCiAKKyMgUzNDMjQ0WCBzdXBwb3J0CisKK29iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkgICs9IHMzYzI0NHgubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDRYKSAgKz0gczNjMjQ0eC1pcnEubworCiAjIFMzQzI0NDAgc3VwcG9ydAogCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NDApICArPSBzM2MyNDQwLm8gczNjMjQ0MC1kc2MubwpAQCAtMzEsNiArMzYsMTEgQEAKIG9iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkgICs9IHMzYzI0NDAtY2xvY2subwogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKSAgKz0gczNjMjQxMC1ncGlvLm8KIAorIyBTM0MyNDQyIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQyKSAgKz0gczNjMjQ0Mi5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NDIpICArPSBzM2MyNDQyLWNsb2NrLm8KKwogIyBiYXN0IGV4dHJhcwogCiBvYmotJChDT05GSUdfQkFTVF9QQzEwNF9JUlEpCSs9IGJhc3QtaXJxLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKaW5kZXggNmRlNzEzYS4uOTlkMTc0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAkJY2xrY29uICY9IH5jbG9ja3M7CiAKIAkvKiBlbnN1cmUgbm9uZSBvZiB0aGUgc3BlY2lhbCBmdW5jdGlvbiBiaXRzIHNldCAqLwotCWNsa2NvbiAmPSB+KFMzQzI0MTBfQ0xLQ09OX0lETEV8UzNDMjQxMF9DTEtDT05fUE9XRVIpOworCWNsa2NvbiAmPSB+KFMzQzI0MTBfQ0xLQ09OX0lETEV8UzNDMjQxMF9DTEtDT05fUE9XRVIgfCAzKTsKIAogCV9fcmF3X3dyaXRlbChjbGtjb24sIFMzQzI0MTBfQ0xLQ09OKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMKaW5kZXggYzk0MDg5MC4uYTQwZWFhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9sZWRzLWdwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL25hbmQuaD4KIApAQCAtNDEsNiArNDIsNjYgQEAKICNpbmNsdWRlICJkZXZzLmgiCiAjaW5jbHVkZSAicG0uaCIKIAorLyogTEVEIGRldmljZXMgKi8KKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2xlZF9wbGF0ZGF0YSBzbWRrX3BkYXRhX2xlZDQgPSB7CisJLmdwaW8JCT0gUzNDMjQxMF9HUEY0LAorCS5mbGFncwkJPSBTM0MyNFhYX0xFREZfQUNUTE9XIHwgUzNDMjRYWF9MRURGX1RSSVNUQVRFLAorCS5uYW1lCQk9ICJsZWQ0IiwKKwkuZGVmX3RyaWdnZXIJPSAidGltZXIiLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2xlZF9wbGF0ZGF0YSBzbWRrX3BkYXRhX2xlZDUgPSB7CisJLmdwaW8JCT0gUzNDMjQxMF9HUEY1LAorCS5mbGFncwkJPSBTM0MyNFhYX0xFREZfQUNUTE9XIHwgUzNDMjRYWF9MRURGX1RSSVNUQVRFLAorCS5uYW1lCQk9ICJsZWQ1IiwKKwkuZGVmX3RyaWdnZXIJPSAibmFuZC1kaXNrIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgc21ka19wZGF0YV9sZWQ2ID0geworCS5ncGlvCQk9IFMzQzI0MTBfR1BGNiwKKwkuZmxhZ3MJCT0gUzNDMjRYWF9MRURGX0FDVExPVyB8IFMzQzI0WFhfTEVERl9UUklTVEFURSwKKwkubmFtZQkJPSAibGVkNiIsCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfbGVkX3BsYXRkYXRhIHNtZGtfcGRhdGFfbGVkNyA9IHsKKwkuZ3BpbwkJPSBTM0MyNDEwX0dQRjcsCisJLmZsYWdzCQk9IFMzQzI0WFhfTEVERl9BQ1RMT1cgfCBTM0MyNFhYX0xFREZfVFJJU1RBVEUsCisJLm5hbWUJCT0gImxlZDciLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21ka19sZWQ0ID0geworCS5uYW1lCQk9ICJzM2MyNHh4X2xlZCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtZGtfcGRhdGFfbGVkNCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21ka19sZWQ1ID0geworCS5uYW1lCQk9ICJzM2MyNHh4X2xlZCIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtZGtfcGRhdGFfbGVkNSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21ka19sZWQ2ID0geworCS5uYW1lCQk9ICJzM2MyNHh4X2xlZCIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtZGtfcGRhdGFfbGVkNiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21ka19sZWQ3ID0geworCS5uYW1lCQk9ICJzM2MyNHh4X2xlZCIsCisJLmlkCQk9IDMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtZGtfcGRhdGFfbGVkNywKKwl9LAorfTsKKwogLyogTkFORCBwYXJpdGl0b24gZnJvbSAyLjQuMTgtc3dsNSAqLwogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc21ka19kZWZhdWx0X25hbmRfcGFydFtdID0gewpAQCAtMTExLDYgKzE3MiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBfX2luaXRkYXRhICpzbWRrX2RldnNbXSA9IHsKIAkmczNjX2RldmljZV9uYW5kLAorCSZzbWRrX2xlZDQsCisJJnNtZGtfbGVkNSwKKwkmc21ka19sZWQ2LAorCSZzbWRrX2xlZDcsCiB9OwogCiB2b2lkIF9faW5pdCBzbWRrX21hY2hpbmVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5jCmluZGV4IDcwYzM0ZmMuLjUyODQyZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMKQEAgLTM3LDEyICszNywxNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KIAogI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgImRldnMuaCIKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgInMzYzI0MDAuaCIKICNpbmNsdWRlICJzM2MyNDEwLmgiCisjaW5jbHVkZSAiczNjMjQ0eC5oIgogI2luY2x1ZGUgInMzYzI0NDAuaCIKKyNpbmNsdWRlICJzM2MyNDQyLmgiCiAKIHN0cnVjdCBjcHVfdGFibGUgewogCXVuc2lnbmVkIGxvbmcJaWRjb2RlOwpAQCAtNTksNiArNjMsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDAwW10gID0gIlMzQzI0MDAiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDEwW10gID0gIlMzQzI0MTAiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQwW10gID0gIlMzQzI0NDAiOworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQyW10gID0gIlMzQzI0NDIiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDEwYVtdID0gIlMzQzI0MTBBIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MGFbXSA9ICJTM0MyNDQwQSI7CiAKQEAgLTg0LDIyICs4OSwzMSBAQAogCXsKIAkJLmlkY29kZQkJPSAweDMyNDQwMDAwLAogCQkuaWRtYXNrCQk9IDB4ZmZmZmZmZmYsCi0JCS5tYXBfaW8JCT0gczNjMjQ0MF9tYXBfaW8sCi0JCS5pbml0X2Nsb2Nrcwk9IHMzYzI0NDBfaW5pdF9jbG9ja3MsCi0JCS5pbml0X3VhcnRzCT0gczNjMjQ0MF9pbml0X3VhcnRzLAorCQkubWFwX2lvCQk9IHMzYzI0NHhfbWFwX2lvLAorCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDR4X2luaXRfY2xvY2tzLAorCQkuaW5pdF91YXJ0cwk9IHMzYzI0NHhfaW5pdF91YXJ0cywKIAkJLmluaXQJCT0gczNjMjQ0MF9pbml0LAogCQkubmFtZQkJPSBuYW1lX3MzYzI0NDAKIAl9LAogCXsKIAkJLmlkY29kZQkJPSAweDMyNDQwMDAxLAogCQkuaWRtYXNrCQk9IDB4ZmZmZmZmZmYsCi0JCS5tYXBfaW8JCT0gczNjMjQ0MF9tYXBfaW8sCi0JCS5pbml0X2Nsb2Nrcwk9IHMzYzI0NDBfaW5pdF9jbG9ja3MsCi0JCS5pbml0X3VhcnRzCT0gczNjMjQ0MF9pbml0X3VhcnRzLAorCQkubWFwX2lvCQk9IHMzYzI0NHhfbWFwX2lvLAorCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDR4X2luaXRfY2xvY2tzLAorCQkuaW5pdF91YXJ0cwk9IHMzYzI0NHhfaW5pdF91YXJ0cywKIAkJLmluaXQJCT0gczNjMjQ0MF9pbml0LAogCQkubmFtZQkJPSBuYW1lX3MzYzI0NDBhCiAJfSwKIAl7CisJCS5pZGNvZGUJCT0gMHgzMjQ0MGFhYSwKKwkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAorCQkubWFwX2lvCQk9IHMzYzI0NHhfbWFwX2lvLAorCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDR4X2luaXRfY2xvY2tzLAorCQkuaW5pdF91YXJ0cwk9IHMzYzI0NHhfaW5pdF91YXJ0cywKKwkJLmluaXQJCT0gczNjMjQ0Ml9pbml0LAorCQkubmFtZQkJPSBuYW1lX3MzYzI0NDIKKwl9LAorCXsKIAkJLmlkY29kZQkJPSAweDAsICAgLyogUzNDMjQwMCBkb2Vzbid0IGhhdmUgYW4gaWRjb2RlICovCiAJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKIAkJLm1hcF9pbwkJPSBzM2MyNDAwX21hcF9pbywKQEAgLTE3NSwxMyArMTg5LDEzIEBACiAJCXBhbmljKCJVbmtub3duIFMzQzI0WFggQ1BVIik7CiAJfQogCisJcHJpbnRrKCJDUFUgJXMgKGlkIDB4JTA4bHgpXG4iLCBjcHUtPm5hbWUsIGlkY29kZSk7CisKIAlpZiAoY3B1LT5tYXBfaW8gPT0gTlVMTCB8fCBjcHUtPmluaXQgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIkNQVSAlcyBzdXBwb3J0IG5vdCBlbmFibGVkXG4iLCBjcHUtPm5hbWUpOwogCQlwYW5pYygiVW5zdXBwb3J0ZWQgUzNDMjRYWCBDUFUiKTsKIAl9CiAKLQlwcmludGsoIkNQVSAlcyAoaWQgMHglMDhseClcbiIsIGNwdS0+bmFtZSwgaWRjb2RlKTsKLQogCShjcHUtPm1hcF9pbykobWFjaF9kZXNjLCBzaXplKTsKIH0KIApAQCAtMjA4LDYgKzIyMiw0OSBAQAogCQkoY3B1LT5pbml0X2Nsb2NrcykoeHRhbCk7CiB9CiAKKy8qIHVhcnQgbWFuYWdlbWVudCAqLworCitzdGF0aWMgaW50IG5yX3VhcnRzIF9faW5pdGRhdGEgPSAwOworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyB1YXJ0X2NmZ3NbM107CisKKy8qIHMzYzI0eHhfaW5pdF91YXJ0ZGV2cworICoKKyAqIGNvcHkgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSBkYXRhIGFuZCBjb25maWd1cmF0aW9uIGludG8gb3VyIGNlbnRyYWwKKyAqIHNldCBvZiBkZXZpY2VzLCBiZWZvcmUgdGhlIGRhdGEgaXMgdGhyb3duIGF3YXkgYWZ0ZXIgdGhlIGluaXQgcHJvY2Vzcy4KKyAqCisgKiBUaGlzIGFsc28gZmlsbHMgaW4gdGhlIGFycmF5IHBhc3NlZCB0byB0aGUgc2VyaWFsIGRyaXZlciBmb3IgdGhlCisgKiBlYXJseSBpbml0aWFsaXNhdGlvbiBvZiB0aGUgY29uc29sZS4KKyovCisKK3ZvaWQgX19pbml0IHMzYzI0eHhfaW5pdF91YXJ0ZGV2cyhjaGFyICpuYW1lLAorCQkJCSAgc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgKnJlcywKKwkJCQkgIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRkZXY7CisJc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZncHRyID0gdWFydF9jZmdzOworCXN0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzICpyZXNwOworCWludCB1YXJ0OworCisJbWVtY3B5KGNmZ3B0ciwgY2ZnLCBzaXplb2Yoc3RydWN0IHMzYzI0MTBfdWFydGNmZykgKiBubyk7CisKKwlmb3IgKHVhcnQgPSAwOyB1YXJ0IDwgbm87IHVhcnQrKywgY2ZnKyssIGNmZ3B0cisrKSB7CisJCXBsYXRkZXYgPSBzM2MyNHh4X3VhcnRfc3JjW2NmZ3B0ci0+aHdwb3J0XTsKKworCQlyZXNwID0gcmVzICsgY2ZncHRyLT5od3BvcnQ7CisKKwkJczNjMjR4eF91YXJ0X2RldnNbdWFydF0gPSBwbGF0ZGV2OworCisJCXBsYXRkZXYtPm5hbWUgPSBuYW1lOworCQlwbGF0ZGV2LT5yZXNvdXJjZSA9IHJlc3AtPnJlc291cmNlczsKKwkJcGxhdGRldi0+bnVtX3Jlc291cmNlcyA9IHJlc3AtPm5yX3Jlc291cmNlczsKKworCQlwbGF0ZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGNmZ3B0cjsKKwl9CisKKwlucl91YXJ0cyA9IG5vOworfQorCiB2b2lkIF9faW5pdCBzM2MyNHh4X2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCiB7CiAJaWYgKGNwdSA9PSBOVUxMKQpAQCAtMjMyLDYgKzI4OSwxMCBAQAogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAorCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKHMzYzI0eHhfdWFydF9kZXZzLCBucl91YXJ0cyk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJaWYgKGJvYXJkICE9IE5VTEwpIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKnB0ciA9IGJvYXJkLT5kZXZpY2VzOwogCQlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuaAppbmRleCBmYzEwNjc3Li40MDg2Mjg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5oCkBAIC0zMSw2ICszMSw4IEBACiAjZGVmaW5lIHByaW50X21oeihtKSAoKG0pIC8gTUhaKSwgKChtIC8gMTAwMCkgJSAxMDAwKQogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlczsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7CiBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnOwogc3RydWN0IG1hcF9kZXNjOwogCkBAIC00NCw2ICs0NiwxMCBAQAogCiBleHRlcm4gdm9pZCBzM2MyNHh4X2luaXRfY2xvY2tzKGludCB4dGFsKTsKIAorZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X3VhcnRkZXZzKGNoYXIgKm5hbWUsCisJCQkJICBzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyAqcmVzLAorCQkJCSAgc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pOworCiAvKiB0aGUgYm9hcmQgc3RydWN0dXJlIGlzIHVzZWQgYXQgZmlyc3QgaW5pdGlhbHNhdGlvbiB0aW1lCiAgKiB0byBnZXQgaW5mbyBzdWNoIGFzIHRoZSBkZXZpY2VzIHRvIHJlZ2lzdGVyIGZvciB0aGlzCiAgKiBib2FyZC4gVGhpcyBpcyBkb25lIGJlY2F1c2UgcGxhdGZyb21fYWRkX2RldmljZXMoKSBjYW5ub3QKQEAgLTY4LDMgKzc0LDQgQEAKIC8qIHN5c3RlbSBkZXZpY2UgY2xhc3NlcyAqLwogCiBleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDQwX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0Ml9zeXNjbGFzczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jCmluZGV4IGNhMDliYTUuLmFkMzg0NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuYwpAQCAtMzgsMTAgKzM4LDg2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KIAogI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlICJjcHUuaCIKIAogLyogU2VyaWFsIHBvcnQgcmVnaXN0cmF0aW9ucyAqLwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfZGV2c1szXTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjMjQxMF91YXJ0MF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9VQVJUMCwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9VQVJUMCArIDB4M2ZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TM0NVQVJUX1JYMCwKKwkJLmVuZCAgID0gSVJRX1MzQ1VBUlRfRVJSMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2MyNDEwX3VhcnQxX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1VBUlQxLAorCQkuZW5kICAgPSBTM0MyNDEwX1BBX1VBUlQxICsgMHgzZmZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1MzQ1VBUlRfUlgxLAorCQkuZW5kICAgPSBJUlFfUzNDVUFSVF9FUlIxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzYzI0MTBfdWFydDJfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzI0MTBfUEFfVUFSVDIsCisJCS5lbmQgICA9IFMzQzI0MTBfUEFfVUFSVDIgKyAweDNmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfUzNDVUFSVF9SWDIsCisJCS5lbmQgICA9IElSUV9TM0NVQVJUX0VSUjIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzIHMzYzI0MTBfdWFydF9yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0geworCVswXSA9IHsKKwkJLnJlc291cmNlcwk9IHMzYzI0MTBfdWFydDBfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHMzYzI0MTBfdWFydDBfcmVzb3VyY2UpLAorCX0sCisJWzFdID0geworCQkucmVzb3VyY2VzCT0gczNjMjQxMF91YXJ0MV9yZXNvdXJjZSwKKwkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczNjMjQxMF91YXJ0MV9yZXNvdXJjZSksCisJfSwKKwlbMl0gPSB7CisJCS5yZXNvdXJjZXMJPSBzM2MyNDEwX3VhcnQyX3Jlc291cmNlLAorCQkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2MyNDEwX3VhcnQyX3Jlc291cmNlKSwKKwl9LAorfTsKKworLyogeWFydCBkZXZpY2VzICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UwID0geworCS5pZAkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTEgPSB7CisJLmlkCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMiA9IHsKKwkuaWQJCT0gMiwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9zcmNbM10gPSB7CisJJnMzYzI0eHhfdWFydF9kZXZpY2UwLAorCSZzM2MyNHh4X3VhcnRfZGV2aWNlMSwKKwkmczNjMjR4eF91YXJ0X2RldmljZTIsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfZGV2c1szXSA9IHsKK307CiAKIC8qIFVTQiBIb3N0IENvbnRyb2xsZXIgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmgKaW5kZXggNTJjNGJhYi4uZmExMjRlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5oCkBAIC0xNyw3ICsxNywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCitzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyB7CisJc3RydWN0IHJlc291cmNlCQkqcmVzb3VyY2VzOworCXVuc2lnbmVkIGxvbmcJCSBucl9yZXNvdXJjZXM7Cit9OworCitleHRlcm4gc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgczNjMjQxMF91YXJ0X3Jlc291cmNlc1tdOworCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X2RldnNbXTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfc3JjW107CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9sY2Q7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCmluZGV4IGNjOTdmYmYuLjUyYmY3MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgYW51YmlzX3VhcnRjZmdzW10gPSB7CitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBhbnViaXNfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewogCVswXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMCwKIAkJLmZsYWdzCSAgICAgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCmluZGV4IDk5NWJiOGEuLjk0NzIzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBiYXN0X3VhcnRjZmdzW10gPSB7CitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBiYXN0X3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CiAJCS5od3BvcnQJICAgICA9IDAsCiAJCS5mbGFncwkgICAgID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCmluZGV4IDY0NmEzYTUuLmFlYzQzMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwpAQCAtNzIsNyArNzIsNyBAQAogI2RlZmluZSBVTENPTiBTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCCiAjZGVmaW5lIFVGQ09OIFMzQzI0MTBfVUZDT05fUlhUUklHOCB8IFMzQzI0MTBfVUZDT05fRklGT01PREUKIAotc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgaDE5NDBfdWFydGNmZ3NbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIGgxOTQwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CiAJCS5od3BvcnQJICAgICA9IDAsCiAJCS5mbGFncwkgICAgID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jCmluZGV4IDA3ZDA5NTAuLjA2NWExZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbmV4Y29kZXIuYwpAQCAtNTEsNyArNTEsNyBAQAogI2RlZmluZSBVTENPTiBTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCCiAjZGVmaW5lIFVGQ09OIFMzQzI0MTBfVUZDT05fUlhUUklHMTIgfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCiAKLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIG5leGNvZGVyX3VhcnRjZmdzW10gPSB7CitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBuZXhjb2Rlcl91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewogCQkuaHdwb3J0CSAgICAgPSAwLAogCQkuZmxhZ3MJICAgICA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW9zaXJpcy5jCmluZGV4IGFlMDc4NzUuLjg1OGZkMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW9zaXJpcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW9zaXJpcy5jCkBAIC05NSw4ICs5NSw3IEBACiAJfQogfTsKIAotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBvc2lyaXNfdWFydGNmZ3NbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIG9zaXJpc191YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewogCQkuaHdwb3J0CSAgICAgPSAwLAogCQkuZmxhZ3MJICAgICA9IDAsCkBAIC0xMDcsNyArMTA2LDcgQEAKIAkJLmNsb2Nrc19zaXplID0gQVJSQVlfU0laRShvc2lyaXNfc2VyaWFsX2Nsb2NrcykKIAl9LAogCVsxXSA9IHsKLQkJLmh3cG9ydAkgICAgID0gMiwKKwkJLmh3cG9ydAkgICAgID0gMSwKIAkJLmZsYWdzCSAgICAgPSAwLAogCQkudWNvbgkgICAgID0gVUNPTiwKIAkJLnVsY29uCSAgICAgPSBVTENPTiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYwppbmRleCBiMzlkYWVkLi5jNzE2NzNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCkBAIC00NSw3ICs0NSw3IEBACiAjZGVmaW5lIFVMQ09OIFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUgfCBTM0MyNDEwX0xDT05fU1RPUEIKICNkZWZpbmUgVUZDT04gUzNDMjQxMF9VRkNPTl9SWFRSSUcxMiB8IFMzQzI0MTBfVUZDT05fRklGT01PREUKIAotc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgb3RvbTExX3VhcnRjZmdzW10gPSB7CitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBvdG9tMTFfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewogCVswXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMCwKIAkJLmZsYWdzCSAgICAgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKaW5kZXggMmRiOTMyZC4uMjVmN2U5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCkBAIC02NSw3ICs2NSw3IEBACiAjZGVmaW5lIFVMQ09OIFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUgfCBTM0MyNDEwX0xDT05fU1RPUEIKICNkZWZpbmUgVUZDT04gUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQogCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBzbWRrMjQxMF91YXJ0Y2Znc1tdID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgc21kazI0MTBfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewogCVswXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMCwKIAkJLmZsYWdzCSAgICAgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKaW5kZXggNWZmZmQxZC4uZDY2MWM2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCkBAIC04Niw3ICs4Niw3IEBACiAjZGVmaW5lIFVMQ09OIFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUgfCBTM0MyNDEwX0xDT05fU1RPUEIKICNkZWZpbmUgVUZDT04gUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQogCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBzbWRrMjQ0MF91YXJ0Y2Znc1tdID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgc21kazI0NDBfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewogCVswXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMCwKIAkJLmZsYWdzCSAgICAgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYwppbmRleCA3ODVmYzljLi5kMThlZmIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgdnIxMDAwX3VhcnRjZmdzW10gPSB7CitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyB2cjEwMDBfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewogCVswXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMCwKIAkJLmZsYWdzCSAgICAgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwppbmRleCBmZTU3ZDk2Li40M2U5YTU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwpAQCAtNTgsNyArNTgsMTEgQEAKIAogLyogY2FjaGUgZnVuY3Rpb25zIGZyb20gYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyAqLwogCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAogZXh0ZXJuIHZvaWQgYXJtOTIwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsKHZvaWQpOworI2Vsc2UKK3N0YXRpYyB2b2lkIGFybTkyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbCh2b2lkKSB7IH0KKyNlbmRpZgogCiAjZGVmaW5lIFBGWCAiczNjMjR4eC1wbTogIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwppbmRleCAwYTIwMTNhLi4wODUyZTg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKQEAgLTQyLDYgKzQyLDcgQEAKIAogI2luY2x1ZGUgInMzYzI0MTAuaCIKICNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJkZXZzLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKIAogLyogSW5pdGlhbCBJTyBtYXBwaW5ncyAqLwpAQCAtNTUsOTMgKzU2LDEzIEBACiAJSU9ERVNDX0VOVChXQVRDSERPRyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191YXJ0MF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9VQVJUMCwKLQkJLmVuZCAgID0gUzNDMjQxMF9QQV9VQVJUMCArIDB4M2ZmZiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9TM0NVQVJUX1JYMCwKLQkJLmVuZCAgID0gSVJRX1MzQ1VBUlRfRVJSMCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191YXJ0MV9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9VQVJUMSwKLQkJLmVuZCAgID0gUzNDMjQxMF9QQV9VQVJUMSArIDB4M2ZmZiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9TM0NVQVJUX1JYMSwKLQkJLmVuZCAgID0gSVJRX1MzQ1VBUlRfRVJSMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdWFydDJfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQzI0MTBfUEFfVUFSVDIsCi0JCS5lbmQgICA9IFMzQzI0MTBfUEFfVUFSVDIgKyAweDNmZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfUzNDVUFSVF9SWDIsCi0JCS5lbmQgICA9IElSUV9TM0NVQVJUX0VSUjIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KIC8qIG91ciB1YXJ0IGRldmljZXMgKi8KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX3VhcnQwID0gewotCS5uYW1lCQkgID0gInMzYzI0MTAtdWFydCIsCi0JLmlkCQkgID0gMCwKLQkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdWFydDBfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQkgID0gczNjX3VhcnQwX3Jlc291cmNlLAotfTsKLQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfdWFydDEgPSB7Ci0JLm5hbWUJCSAgPSAiczNjMjQxMC11YXJ0IiwKLQkuaWQJCSAgPSAxLAotCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY191YXJ0MV9yZXNvdXJjZSksCi0JLnJlc291cmNlCSAgPSBzM2NfdWFydDFfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfdWFydDIgPSB7Ci0JLm5hbWUJCSAgPSAiczNjMjQxMC11YXJ0IiwKLQkuaWQJCSAgPSAyLAotCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY191YXJ0Ml9yZXNvdXJjZSksCi0JLnJlc291cmNlCSAgPSBzM2NfdWFydDJfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdWFydF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmczNjX3VhcnQwLAotCSZzM2NfdWFydDEsCi0JJnMzY191YXJ0MgotfTsKLQotc3RhdGljIGludCBzM2MyNDEwX3VhcnRfY291bnQgPSAwOwotCiAvKiB1YXJ0IHJlZ2lzdHJhdGlvbiBwcm9jZXNzICovCiAKIHZvaWQgX19pbml0IHMzYzI0MTBfaW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0ZGV2OwotCWludCB1YXJ0OwotCi0JZm9yICh1YXJ0ID0gMDsgdWFydCA8IG5vOyB1YXJ0KyssIGNmZysrKSB7Ci0JCXBsYXRkZXYgPSB1YXJ0X2RldmljZXNbY2ZnLT5od3BvcnRdOwotCi0JCXMzYzI0eHhfdWFydF9kZXZzW3VhcnRdID0gcGxhdGRldjsKLQkJcGxhdGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBjZmc7Ci0JfQotCi0JczNjMjQxMF91YXJ0X2NvdW50ID0gdWFydDsKKwlzM2MyNHh4X2luaXRfdWFydGRldnMoInMzYzI0MTAtdWFydCIsIHMzYzI0MTBfdWFydF9yZXNvdXJjZXMsIGNmZywgbm8pOwogfQogCiAvKiBzM2MyNDEwX21hcF9pbwpAQCAtMTkzLDUgKzExNCw1IEBACiB7CiAJcHJpbnRrKCJTM0MyNDEwOiBJbml0aWFsaXNpbmcgYXJjaGl0ZWN0dXJlXG4iKTsKIAotCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzM2MyNHh4X3VhcnRfZGV2cywgczNjMjQxMF91YXJ0X2NvdW50KTsKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtaXJxLmMKaW5kZXggMjc4ZDAwNC4uYWNmZTM4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtaXJxLmMKQEAgLTEwMCw3MyArMTAwLDEyIEBACiAJLmFjawkgICAgPSBzM2NfaXJxX3dkdGFjOTdfYWNrLAogfTsKIAotLyogY2FtZXJhIGlycSAqLwotCi1zdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X2NhbSh1bnNpZ25lZCBpbnQgaXJxLAotCQkJICAgICAgc3RydWN0IGlycWRlc2MgKmRlc2MsCi0JCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1bnNpZ25lZCBpbnQgc3Vic3JjLCBzdWJtc2s7Ci0Jc3RydWN0IGlycWRlc2MgKm15ZGVzYzsKLQotCS8qIHJlYWQgdGhlIGN1cnJlbnQgcGVuZGluZyBpbnRlcnJ1cHRzLCBhbmQgdGhlIG1hc2sKLQkgKiBmb3Igd2hhdCBpdCBpcyBhdmFpbGFibGUgKi8KLQotCXN1YnNyYyA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfU1VCU1JDUE5EKTsKLQlzdWJtc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0lOVFNVQk1TSyk7Ci0KLQlzdWJzcmMgJj0gfnN1Ym1zazsKLQlzdWJzcmMgPj49IDExOwotCXN1YnNyYyAmPSAzOwotCi0JaWYgKHN1YnNyYyAhPSAwKSB7Ci0JCWlmIChzdWJzcmMgJiAxKSB7Ci0JCQlteWRlc2MgPSBpcnFfZGVzYyArIElSUV9TM0MyNDQwX0NBTV9DOwotCQkJZGVzY19oYW5kbGVfaXJxKElSUV9TM0MyNDQwX0NBTV9DLCBteWRlc2MsIHJlZ3MpOwotCQl9Ci0JCWlmIChzdWJzcmMgJiAyKSB7Ci0JCQlteWRlc2MgPSBpcnFfZGVzYyArIElSUV9TM0MyNDQwX0NBTV9QOwotCQkJZGVzY19oYW5kbGVfaXJxKElSUV9TM0MyNDQwX0NBTV9QLCBteWRlc2MsIHJlZ3MpOwotCQl9Ci0JfQotfQotCi0jZGVmaW5lIElOVE1TS19DQU0gKDFVTCA8PCAoSVJRX0NBTSAtIElSUV9FSU5UMCkpCi0KLXN0YXRpYyB2b2lkCi1zM2NfaXJxX2NhbV9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQlzM2NfaXJxc3ViX21hc2soaXJxbm8sIElOVE1TS19DQU0sIDM8PDExKTsKLX0KLQotc3RhdGljIHZvaWQKLXMzY19pcnFfY2FtX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCi17Ci0JczNjX2lycXN1Yl91bm1hc2soaXJxbm8sIElOVE1TS19DQU0pOwotfQotCi1zdGF0aWMgdm9pZAotczNjX2lycV9jYW1fYWNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQlzM2NfaXJxc3ViX21hc2thY2soaXJxbm8sIElOVE1TS19DQU0sIDM8PDExKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFjaGlwIHMzY19pcnFfY2FtID0gewotCS5tYXNrCSAgICA9IHMzY19pcnFfY2FtX21hc2ssCi0JLnVubWFzawkgICAgPSBzM2NfaXJxX2NhbV91bm1hc2ssCi0JLmFjawkgICAgPSBzM2NfaXJxX2NhbV9hY2ssCi19OwotCiBzdGF0aWMgaW50IHMzYzI0NDBfaXJxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQogewogCXVuc2lnbmVkIGludCBpcnFubzsKIAogCXByaW50aygiUzNDMjQ0MDogSVJRIFN1cHBvcnRcbiIpOwogCi0Jc2V0X2lycV9jaGlwKElSUV9ORkNPTiwgJnMzY19pcnFfbGV2ZWxfY2hpcCk7Ci0Jc2V0X2lycV9oYW5kbGVyKElSUV9ORkNPTiwgZG9fbGV2ZWxfSVJRKTsKLQlzZXRfaXJxX2ZsYWdzKElSUV9ORkNPTiwgSVJRRl9WQUxJRCk7Ci0KIAkvKiBhZGQgbmV3IGNoYWluZWQgaGFuZGxlciBmb3Igd2R0LCBhYzcgKi8KIAogCXNldF9pcnFfY2hpcChJUlFfV0RULCAmczNjX2lycV9sZXZlbF9jaGlwKTsKQEAgLTE3OSwxOCArMTE4LDYgQEAKIAkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7CiAJfQogCi0JLyogYWRkIGNoYWluZWQgaGFuZGxlciBmb3IgY2FtZXJhICovCi0KLQlzZXRfaXJxX2NoaXAoSVJRX0NBTSwgJnMzY19pcnFfbGV2ZWxfY2hpcCk7Ci0Jc2V0X2lycV9oYW5kbGVyKElSUV9DQU0sIGRvX2xldmVsX0lSUSk7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0NBTSwgczNjX2lycV9kZW11eF9jYW0pOwotCi0JZm9yIChpcnFubyA9IElSUV9TM0MyNDQwX0NBTV9DOyBpcnFubyA8PSBJUlFfUzNDMjQ0MF9DQU1fUDsgaXJxbm8rKykgewotCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZzM2NfaXJxX2NhbSk7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnFubywgZG9fbGV2ZWxfSVJRKTsKLQkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5OCwxMCArMTI1LDEwIEBACiAJLmFkZAk9IHMzYzI0NDBfaXJxX2FkZCwKIH07CiAKLXN0YXRpYyBpbnQgczNjMjR4eF9pcnFfZHJpdmVyKHZvaWQpCitzdGF0aWMgaW50IHMzYzI0NDBfaXJxX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9zeXNjbGFzcywgJnMzYzI0NDBfaXJxX2RyaXZlcik7CiB9CiAKLWFyY2hfaW5pdGNhbGwoczNjMjR4eF9pcnFfZHJpdmVyKTsKK2FyY2hfaW5pdGNhbGwoczNjMjQ0MF9pcnFfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5jCmluZGV4IGI3ZmU2ZDkuLjBhYjUwZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgogICogU2Ftc3VuZyBTM0MyNDQwIE1vYmlsZSBDUFUgc3VwcG9ydApAQCAtOCwxNiArOCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKgkyNC1BdWctMjAwNCBCSkQgIFN0YXJ0IG9mIHMzYzI0NDAgc3VwcG9ydAotICoJMTItT2N0LTIwMDQgQkpECSBNb3ZlZCBjbG9jayBpbmZvIG91dCB0byBjbG9jay5jCi0gKgkwMS1Ob3YtMjAwNCBCSkQgIEZpeGVkIGNsb2NrIGJ1aWxkIGNvZGUKLSAqCTA5LU5vdi0yMDA0IEJKRCAgQWRkZWQgc3lzZGV2IGZvciBwb3dlciBtYW5hZ2VtZW50Ci0gKgkwNC1Ob3YtMjAwNCBCSkQgIE5ldyBzZXJpYWwgcmVnaXN0cmF0aW9uCi0gKgkxNS1Ob3YtMjAwNCBCSkQgIFJlbmFtZSB0aGUgaTJjIGRldmljZSBmb3IgdGhlIHMzYzI0NDAKLSAqCTE0LUphbi0yMDA1IEJKRCAgTW92ZWQgY2xvY2sgaW5pdCBjb2RlIGludG8gc2VwZXJhdGUgZnVuY3Rpb24KLSAqCTE0LUphbi0yMDA1IEJKRCAgUmVtb3ZlZCB1bi11c2VkIGNsb2NrIGJpdHMKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTUwLDIzNCArNDAsMjAgQEAKICNpbmNsdWRlICJjcHUuaCIKICNpbmNsdWRlICJwbS5oIgogCi0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgczNjMjQ0MF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewotCUlPREVTQ19FTlQoVVNCSE9TVCksCi0JSU9ERVNDX0VOVChDTEtQV1IpLAotCUlPREVTQ19FTlQoTENEKSwKLQlJT0RFU0NfRU5UKFRJTUVSKSwKLQlJT0RFU0NfRU5UKEFEQyksCi0JSU9ERVNDX0VOVChXQVRDSERPRyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191YXJ0MF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9VQVJUMCwKLQkJLmVuZCAgID0gUzNDMjQxMF9QQV9VQVJUMCArIDB4M2ZmZiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9TM0NVQVJUX1JYMCwKLQkJLmVuZCAgID0gSVJRX1MzQ1VBUlRfRVJSMCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191YXJ0MV9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9VQVJUMSwKLQkJLmVuZCAgID0gUzNDMjQxMF9QQV9VQVJUMSArIDB4M2ZmZiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9TM0NVQVJUX1JYMSwKLQkJLmVuZCAgID0gSVJRX1MzQ1VBUlRfRVJSMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdWFydDJfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQzI0MTBfUEFfVUFSVDIsCi0JCS5lbmQgICA9IFMzQzI0MTBfUEFfVUFSVDIgKyAweDNmZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfUzNDVUFSVF9SWDIsCi0JCS5lbmQgICA9IElSUV9TM0NVQVJUX0VSUjIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLS8qIG91ciB1YXJ0IGRldmljZXMgKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX3VhcnQwID0gewotCS5uYW1lCQkgID0gInMzYzI0NDAtdWFydCIsCi0JLmlkCQkgID0gMCwKLQkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdWFydDBfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQkgID0gczNjX3VhcnQwX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX3VhcnQxID0gewotCS5uYW1lCQkgID0gInMzYzI0NDAtdWFydCIsCi0JLmlkCQkgID0gMSwKLQkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdWFydDFfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQkgID0gczNjX3VhcnQxX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX3VhcnQyID0gewotCS5uYW1lCQkgID0gInMzYzI0NDAtdWFydCIsCi0JLmlkCQkgID0gMiwKLQkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdWFydDJfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQkgID0gczNjX3VhcnQyX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVhcnRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY191YXJ0MCwKLQkmczNjX3VhcnQxLAotCSZzM2NfdWFydDIKLX07Ci0KLS8qIHVhcnQgaW5pdGlhbGlzYXRpb24gKi8KLQotc3RhdGljIGludCBfX2luaXRkYXRhIHMzYzI0NDBfdWFydF9jb3VudDsKLQotdm9pZCBfX2luaXQgczNjMjQ0MF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRkZXY7Ci0JaW50IHVhcnQ7Ci0KLQlmb3IgKHVhcnQgPSAwOyB1YXJ0IDwgbm87IHVhcnQrKywgY2ZnKyspIHsKLQkJcGxhdGRldiA9IHVhcnRfZGV2aWNlc1tjZmctPmh3cG9ydF07Ci0KLQkJczNjMjR4eF91YXJ0X2RldnNbdWFydF0gPSBwbGF0ZGV2OwotCQlwbGF0ZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGNmZzsKLQl9Ci0KLQlzM2MyNDQwX3VhcnRfY291bnQgPSB1YXJ0OwotfQotCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIHMzYzI0NDBfc2xlZXBbXSA9IHsKLQlTQVZFX0lURU0oUzNDMjQ0MF9EU0MwKSwKLQlTQVZFX0lURU0oUzNDMjQ0MF9EU0MxKSwKLQlTQVZFX0lURU0oUzNDMjQ0MF9HUEpEQVQpLAotCVNBVkVfSVRFTShTM0MyNDQwX0dQSkNPTiksCi0JU0FWRV9JVEVNKFMzQzI0NDBfR1BKVVApCi19OwotCi1zdGF0aWMgaW50IHMzYzI0NDBfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JczNjMjQxMF9wbV9kb19zYXZlKHMzYzI0NDBfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0MF9zbGVlcCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0NDBfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JczNjMjQxMF9wbV9kb19yZXN0b3JlKHMzYzI0NDBfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0MF9zbGVlcCkpOwotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2RlZmluZSBzM2MyNDQwX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2MyNDQwX3Jlc3VtZSAgTlVMTAotI2VuZGlmCi0KLXN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0MF9zeXNjbGFzcyA9IHsKLQlzZXRfa3NldF9uYW1lKCJzM2MyNDQwLWNvcmUiKSwKLQkuc3VzcGVuZAk9IHMzYzI0NDBfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0NDBfcmVzdW1lCi19OwotCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjMjQ0MF9zeXNkZXYgPSB7CiAJLmNscwkJPSAmczNjMjQ0MF9zeXNjbGFzcywKIH07CiAKLXZvaWQgX19pbml0IHMzYzI0NDBfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSkKK2ludCBfX2luaXQgczNjMjQ0MF9pbml0KHZvaWQpCiB7Ci0JLyogcmVnaXN0ZXIgb3VyIGlvLXRhYmxlcyAqLwotCi0JaW90YWJsZV9pbml0KHMzYzI0NDBfaW9kZXNjLCBBUlJBWV9TSVpFKHMzYzI0NDBfaW9kZXNjKSk7Ci0JaW90YWJsZV9pbml0KG1hY2hfZGVzYywgc2l6ZSk7Ci0KLQkvKiByZW5hbWUgYW55IHBlcmlwaGVyYWxzIHVzZWQgZGlmZmVyaW5nIGZyb20gdGhlIHMzYzI0MTAgKi8KLQotCXMzY19kZXZpY2VfaTJjLm5hbWUgID0gInMzYzI0NDAtaTJjIjsKLQlzM2NfZGV2aWNlX25hbmQubmFtZSA9ICJzM2MyNDQwLW5hbmQiOworCXByaW50aygiUzNDMjQ0MDogSW5pdGlhbGlzaW5nIGFyY2hpdGVjdHVyZVxuIik7CiAKIAkvKiBjaGFuZ2UgaXJxIGZvciB3YXRjaGRvZyAqLwogCiAJczNjX2RldmljZV93ZHQucmVzb3VyY2VbMV0uc3RhcnQgPSBJUlFfUzNDMjQ0MF9XRFQ7CiAJczNjX2RldmljZV93ZHQucmVzb3VyY2VbMV0uZW5kICAgPSBJUlFfUzNDMjQ0MF9XRFQ7Ci19CiAKLXZvaWQgX19pbml0IHMzYzI0NDBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBjbGtkaXY7Ci0JdW5zaWduZWQgbG9uZyBjYW1kaXY7Ci0JdW5zaWduZWQgbG9uZyBoY2xrLCBmY2xrLCBwY2xrOwotCWludCBoZGl2ID0gMTsKKwkvKiByZWdpc3RlciBvdXIgc3lzdGVtIGRldmljZSBmb3IgZXZlcnl0aGluZyBlbHNlICovCiAKLQkvKiBub3cgd2UndmUgZ290IG91ciBtYWNoaW5lIGJpdHMgaW5pdGlhbGlzZWQsIHdvcmsgb3V0IHdoYXQKLQkgKiBjbG9ja3Mgd2UndmUgZ290ICovCi0KLQlmY2xrID0gczNjMjQxMF9nZXRfcGxsKF9fcmF3X3JlYWRsKFMzQzI0MTBfTVBMTENPTiksIHh0YWwpICogMjsKLQotCWNsa2RpdiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7Ci0JY2FtZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQ0MF9DQU1ESVZOKTsKLQotCS8qIHdvcmsgb3V0IGNsb2NrIHNjYWxpbmdzICovCi0KLQlzd2l0Y2ggKGNsa2RpdiAmIFMzQzI0NDBfQ0xLRElWTl9IRElWTl9NQVNLKSB7Ci0JY2FzZSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fMToKLQkJaGRpdiA9IDE7Ci0JCWJyZWFrOwotCi0JY2FzZSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fMjoKLQkJaGRpdiA9IDI7Ci0JCWJyZWFrOwotCi0JY2FzZSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fNF84OgotCQloZGl2ID0gKGNhbWRpdiAmIFMzQzI0NDBfQ0FNRElWTl9IQ0xLNF9IQUxGKSA/IDggOiA0OwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzNfNjoKLQkJaGRpdiA9IChjYW1kaXYgJiBTM0MyNDQwX0NBTURJVk5fSENMSzNfSEFMRikgPyA2IDogMzsKLQkJYnJlYWs7Ci0JfQotCi0JaGNsayA9IGZjbGsgLyBoZGl2OwotCXBjbGsgPSBoY2xrIC8gKChjbGtkaXYgJiBTM0MyNDQwX0NMS0RJVk5fUERJVk4pPyAyOjEpOwotCi0JLyogcHJpbnQgYnJpZWYgc3VtbWFyeSBvZiBjbG9ja3MsIGV0YyAqLwotCi0JcHJpbnRrKCJTM0MyNDQwOiBjb3JlICVsZC4lMDNsZCBNSHosIG1lbW9yeSAlbGQuJTAzbGQgTUh6LCBwZXJpcGhlcmFsICVsZC4lMDNsZCBNSHpcbiIsCi0JICAgICAgIHByaW50X21oeihmY2xrKSwgcHJpbnRfbWh6KGhjbGspLCBwcmludF9taHoocGNsaykpOwotCi0JLyogaW5pdGlhbGlzZSB0aGUgY2xvY2tzIGhlcmUsIHRvIGFsbG93IG90aGVyIHRoaW5ncyBsaWtlIHRoZQotCSAqIGNvbnNvbGUgdG8gdXNlIHRoZW0sIGFuZCB0byBhZGQgbmV3IG9uZXMgYWZ0ZXIgdGhlIGluaXRpYWxpc2F0aW9uCi0JICovCi0KLQlzM2MyNHh4X3NldHVwX2Nsb2Nrcyh4dGFsLCBmY2xrLCBoY2xrLCBwY2xrKTsKLX0KLQotLyogbmVlZCB0byByZWdpc3RlciBjbGFzcyBiZWZvcmUgd2UgYWN0dWFsbHkgcmVnaXN0ZXIgdGhlIGRldmljZSwgYW5kCi0gKiB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQgaGFzIGJlZW4gaW5pdGlhbGlzZWQgYmVmb3JlIGFueSBvZiB0aGUKLSAqIGRyaXZlcnMgZXZlbiB0cnkgdG8gdXNlIGl0IChldmVuIGlmIG5vdCBvbiBhbiBzM2MyNDQwIGJhc2VkIHN5c3RlbSkKLSAqIGFzIGEgZHJpdmVyIHdoaWNoIG1heSBzdXBwb3J0IGJvdGggMjQxMCBhbmQgMjQ0MCBtYXkgdHJ5IGFuZCB1c2UgaXQuCi0qLwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX2NvcmVfaW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MpOwotfQotCi1jb3JlX2luaXRjYWxsKHMzYzI0NDBfY29yZV9pbml0KTsKLQotaW50IF9faW5pdCBzM2MyNDQwX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcHJpbnRrKCJTM0MyNDQwOiBJbml0aWFsaXNpbmcgYXJjaGl0ZWN0dXJlXG4iKTsKLQotCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmczNjMjQ0MF9zeXNkZXYpOwotCWlmIChyZXQgIT0gMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgc3lzZGV2IGZvciBzM2MyNDQwXG4iKTsKLQllbHNlCi0JCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKHMzYzI0eHhfdWFydF9kZXZzLCBzM2MyNDQwX3VhcnRfY291bnQpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc3lzZGV2X3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2Rldik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi1jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDItY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjdiMzAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDItY2xvY2suYwpAQCAtMCwwICsxLDE3MSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDItY2xvY2suYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDQyIENsb2NrIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jbG9jay5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjcHUuaCIKKworLyogUzNDMjQ0MiBleHRlbmRlZCBjbG9jayBzdXBwb3J0ICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDJfY2FtaWZfdXBsbF9yb3VuZChzdHJ1Y3QgY2xrICpjbGssCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlpbnQgZGl2OworCisJaWYgKHJhdGUgPiBwYXJlbnRfcmF0ZSkKKwkJcmV0dXJuIHBhcmVudF9yYXRlOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCisJaWYgKGRpdiA9PSAzKQorCQlyZXR1cm4gcGFyZW50X3JhdGUgLyAzOworCisJLyogbm90ZSwgd2UgcmVtb3ZlIHRoZSArLy0gMSBjYWxjdWxhdGlvbnMgZm9yIHRoZSBkaXZpc29yICovCisKKwlkaXYgLz0gMjsKKworCWlmIChkaXYgPCAxKQorCQlkaXYgPSAxOworCWVsc2UgaWYgKGRpdiA+IDE2KQorCQlkaXYgPSAxNjsKKworCXJldHVybiBwYXJlbnRfcmF0ZSAvIChkaXYgKiAyKTsKK30KKworc3RhdGljIGludCBzM2MyNDQyX2NhbWlmX3VwbGxfc2V0cmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGNhbWRpdm4gPSAgX19yYXdfcmVhZGwoUzNDMjQ0MF9DQU1ESVZOKTsKKworCXJhdGUgPSBzM2MyNDQyX2NhbWlmX3VwbGxfcm91bmQoY2xrLCByYXRlKTsKKworCWNhbWRpdm4gJj0gflMzQzI0NDJfQ0FNRElWTl9DQU1DTEtfRElWMzsKKworCWlmIChyYXRlID09IHBhcmVudF9yYXRlKSB7CisJCWNhbWRpdm4gJj0gflMzQzI0NDBfQ0FNRElWTl9DQU1DTEtfU0VMOworCX0gZWxzZSBpZiAoKHBhcmVudF9yYXRlIC8gcmF0ZSkgPT0gMykgeworCQljYW1kaXZuIHw9IFMzQzI0NDBfQ0FNRElWTl9DQU1DTEtfU0VMOworCQljYW1kaXZuIHw9IFMzQzI0NDJfQ0FNRElWTl9DQU1DTEtfRElWMzsKKwl9IGVsc2UgeworCQljYW1kaXZuICY9IH5TM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX01BU0s7CisJCWNhbWRpdm4gfD0gUzNDMjQ0MF9DQU1ESVZOX0NBTUNMS19TRUw7CisJCWNhbWRpdm4gfD0gKCgocGFyZW50X3JhdGUgLyByYXRlKSAvIDIpIC0gMSk7CisJfQorCisJX19yYXdfd3JpdGVsKGNhbWRpdm4sIFMzQzI0NDBfQ0FNRElWTik7CisKKwlyZXR1cm4gMDsKK30KKworLyogRXh0cmEgUzNDMjQ0MiBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgczNjMjQ0Ml9jbGtfY2FtID0geworCS5uYW1lCQk9ICJjYW1pZiIsCisJLmlkCQk9IC0xLAorCS5lbmFibGUJCT0gczNjMjR4eF9jbGtjb25fZW5hYmxlLAorCS5jdHJsYml0CT0gUzNDMjQ0MF9DTEtDT05fQ0FNRVJBLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgczNjMjQ0Ml9jbGtfY2FtX3VwbGwgPSB7CisJLm5hbWUJCT0gImNhbWlmLXVwbGwiLAorCS5pZAkJPSAtMSwKKwkuc2V0X3JhdGUJPSBzM2MyNDQyX2NhbWlmX3VwbGxfc2V0cmF0ZSwKKwkucm91bmRfcmF0ZQk9IHMzYzI0NDJfY2FtaWZfdXBsbF9yb3VuZCwKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0Ml9jbGtfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCit7CisJdW5zaWduZWQgbG9uZyBjYW1kaXZuID0gX19yYXdfcmVhZGwoUzNDMjQ0MF9DQU1ESVZOKTsKKwl1bnNpZ25lZCBsb25nIGNsa2Rpdm47CisJc3RydWN0IGNsayAqY2xrX2g7CisJc3RydWN0IGNsayAqY2xrX3A7CisJc3RydWN0IGNsayAqY2xrX3VwbGw7CisKKwlwcmludGsoIlMzQzI0NDI6IENsb2NrIFN1cHBvcnQsIERWUyAlc1xuIiwKKwkgICAgICAgKGNhbWRpdm4gJiBTM0MyNDQwX0NBTURJVk5fRFZTRU4pID8gIm9uIiA6ICJvZmYiKTsKKworCWNsa19wID0gY2xrX2dldChOVUxMLCAicGNsayIpOworCWNsa19oID0gY2xrX2dldChOVUxMLCAiaGNsayIpOworCWNsa191cGxsID0gY2xrX2dldChOVUxMLCAidXBsbCIpOworCisJaWYgKElTX0VSUihjbGtfcCkgfHwgSVNfRVJSKGNsa19oKSB8fCBJU19FUlIoY2xrX3VwbGwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUzNDMjQ0MjogRmFpbGVkIHRvIGdldCBwYXJlbnQgY2xvY2tzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgcmF0ZSBvZiBVUExMLCBhbmQgaWYgaXQgaXMgbmVhciA5Nk1IeiwgdGhlbiBjaGFuZ2UKKwkgKiB0byB1c2luZyBoYWxmIHRoZSBVUExMIHJhdGUgZm9yIHRoZSBzeXN0ZW0gKi8KKworCWlmIChjbGtfZ2V0X3JhdGUoY2xrX3VwbGwpID4gKDk0ICogTUhaKSkgeworCQljbGtfdXNiX2J1cy5yYXRlID0gY2xrX2dldF9yYXRlKGNsa191cGxsKSAvIDI7CisKKwkJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKworCQljbGtkaXZuID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKKwkJY2xrZGl2biB8PSBTM0MyNDQwX0NMS0RJVk5fVUNMSzsKKwkJX19yYXdfd3JpdGVsKGNsa2Rpdm4sIFMzQzI0MTBfQ0xLRElWTik7CisKKwkJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOworCX0KKworCXMzYzI0NDJfY2xrX2NhbS5wYXJlbnQgPSBjbGtfaDsKKwlzM2MyNDQyX2Nsa19jYW1fdXBsbC5wYXJlbnQgPSBjbGtfdXBsbDsKKworCXMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJnMzYzI0NDJfY2xrX2NhbSk7CisJczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0Ml9jbGtfY2FtX3VwbGwpOworCisJY2xrX2Rpc2FibGUoJnMzYzI0NDJfY2xrX2NhbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfY2xrX2RyaXZlciA9IHsKKwkuYWRkCT0gczNjMjQ0Ml9jbGtfYWRkLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgczNjMjQ0Ml9jbGtfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQyX3N5c2NsYXNzLCAmczNjMjQ0Ml9jbGtfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDQyX2Nsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYmFlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTYW1zdW5nIFMzQzI0NDIgTW9iaWxlIENQVSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpb2ouaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWRzYy5oPgorCisjaW5jbHVkZSAiczNjMjQ0Mi5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgInBtLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2MyNDQyX3N5c2RldiA9IHsKKwkuY2xzCQk9ICZzM2MyNDQyX3N5c2NsYXNzLAorfTsKKworaW50IF9faW5pdCBzM2MyNDQyX2luaXQodm9pZCkKK3sKKwlwcmludGsoIlMzQzI0NDI6IEluaXRpYWxpc2luZyBhcmNoaXRlY3R1cmVcbiIpOworCisJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNkZXYpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDIuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlMzdkMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLmgKQEAgLTAsMCArMSwxNyBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDIuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgczNjMjQ0MiBjcHUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQyCitleHRlcm4gIGludCBzM2MyNDQyX2luaXQodm9pZCk7CisjZWxzZQorI2RlZmluZSBzM2MyNDQyX2luaXQgTlVMTAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC1pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LWlycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWRjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC1pcnEuYwpAQCAtMCwwICsxLDE0MiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtaXJxLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogQ2hhbmdlbG9nOgorICoJMjUtSnVsLTIwMDUgQkpECQlTcGxpdCBmcm9tIGlycS5jCisgKgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKworI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgInBtLmgiCisjaW5jbHVkZSAiaXJxLmgiCisKKy8qIGNhbWVyYSBpcnEgKi8KKworc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF9jYW0odW5zaWduZWQgaW50IGlycSwKKwkJCSAgICAgIHN0cnVjdCBpcnFkZXNjICpkZXNjLAorCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IHN1YnNyYywgc3VibXNrOworCXN0cnVjdCBpcnFkZXNjICpteWRlc2M7CisKKwkvKiByZWFkIHRoZSBjdXJyZW50IHBlbmRpbmcgaW50ZXJydXB0cywgYW5kIHRoZSBtYXNrCisJICogZm9yIHdoYXQgaXQgaXMgYXZhaWxhYmxlICovCisKKwlzdWJzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1NVQlNSQ1BORCk7CisJc3VibXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRTVUJNU0spOworCisJc3Vic3JjICY9IH5zdWJtc2s7CisJc3Vic3JjID4+PSAxMTsKKwlzdWJzcmMgJj0gMzsKKworCWlmIChzdWJzcmMgIT0gMCkgeworCQlpZiAoc3Vic3JjICYgMSkgeworCQkJbXlkZXNjID0gaXJxX2Rlc2MgKyBJUlFfUzNDMjQ0MF9DQU1fQzsKKwkJCWRlc2NfaGFuZGxlX2lycShJUlFfUzNDMjQ0MF9DQU1fQywgbXlkZXNjLCByZWdzKTsKKwkJfQorCQlpZiAoc3Vic3JjICYgMikgeworCQkJbXlkZXNjID0gaXJxX2Rlc2MgKyBJUlFfUzNDMjQ0MF9DQU1fUDsKKwkJCWRlc2NfaGFuZGxlX2lycShJUlFfUzNDMjQ0MF9DQU1fUCwgbXlkZXNjLCByZWdzKTsKKwkJfQorCX0KK30KKworI2RlZmluZSBJTlRNU0tfQ0FNICgxVUwgPDwgKElSUV9DQU0gLSBJUlFfRUlOVDApKQorCitzdGF0aWMgdm9pZAorczNjX2lycV9jYW1fbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfQ0FNLCAzPDwxMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX2NhbV91bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfdW5tYXNrKGlycW5vLCBJTlRNU0tfQ0FNKTsKK30KKworc3RhdGljIHZvaWQKK3MzY19pcnFfY2FtX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrYWNrKGlycW5vLCBJTlRNU0tfQ0FNLCAzPDwxMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzM2NfaXJxX2NhbSA9IHsKKwkubWFzawkgICAgPSBzM2NfaXJxX2NhbV9tYXNrLAorCS51bm1hc2sJICAgID0gczNjX2lycV9jYW1fdW5tYXNrLAorCS5hY2sJICAgID0gczNjX2lycV9jYW1fYWNrLAorfTsKKworc3RhdGljIGludCBzM2MyNDR4X2lycV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKK3sKKwl1bnNpZ25lZCBpbnQgaXJxbm87CisKKwlzZXRfaXJxX2NoaXAoSVJRX05GQ09OLCAmczNjX2lycV9sZXZlbF9jaGlwKTsKKwlzZXRfaXJxX2hhbmRsZXIoSVJRX05GQ09OLCBkb19sZXZlbF9JUlEpOworCXNldF9pcnFfZmxhZ3MoSVJRX05GQ09OLCBJUlFGX1ZBTElEKTsKKworCS8qIGFkZCBjaGFpbmVkIGhhbmRsZXIgZm9yIGNhbWVyYSAqLworCisJc2V0X2lycV9jaGlwKElSUV9DQU0sICZzM2NfaXJxX2xldmVsX2NoaXApOworCXNldF9pcnFfaGFuZGxlcihJUlFfQ0FNLCBkb19sZXZlbF9JUlEpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9DQU0sIHMzY19pcnFfZGVtdXhfY2FtKTsKKworCWZvciAoaXJxbm8gPSBJUlFfUzNDMjQ0MF9DQU1fQzsgaXJxbm8gPD0gSVJRX1MzQzI0NDBfQ0FNX1A7IGlycW5vKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycW5vLCAmczNjX2lycV9jYW0pOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0eF9pcnFfZHJpdmVyID0geworCS5hZGQJPSBzM2MyNDR4X2lycV9hZGQsCit9OworCitzdGF0aWMgaW50IHMzYzI0NDBfaXJxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9zeXNjbGFzcywgJnMzYzI0NHhfaXJxX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0MF9pcnFfaW5pdCk7CisKKworc3RhdGljIGludCBzM2MyNDQyX2lycV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsICZzM2MyNDR4X2lycV9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzI0NDJfaXJxX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHguYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4NTJhNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LmMKQEAgLTAsMCArMSwxODIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFNhbXN1bmcgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBNb2JpbGUgQ1BVIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvai5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZHNjLmg+CisKKyNpbmNsdWRlICJzM2MyNDQwLmgiCisjaW5jbHVkZSAiczNjMjQ0eC5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgInBtLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgczNjMjQ0eF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworCUlPREVTQ19FTlQoQ0xLUFdSKSwKKwlJT0RFU0NfRU5UKFRJTUVSKSwKKwlJT0RFU0NfRU5UKFdBVENIRE9HKSwKKwlJT0RFU0NfRU5UKExDRCksCisJSU9ERVNDX0VOVChBREMpLAorCUlPREVTQ19FTlQoVVNCSE9TVCksCit9OworCisvKiB1YXJ0IGluaXRpYWxpc2F0aW9uICovCisKK3ZvaWQgX19pbml0IHMzYzI0NHhfaW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKK3sKKwlzM2MyNHh4X2luaXRfdWFydGRldnMoInMzYzI0NDAtdWFydCIsIHMzYzI0MTBfdWFydF9yZXNvdXJjZXMsIGNmZywgbm8pOworfQorCit2b2lkIF9faW5pdCBzM2MyNDR4X21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpCit7CisJLyogcmVnaXN0ZXIgb3VyIGlvLXRhYmxlcyAqLworCisJaW90YWJsZV9pbml0KHMzYzI0NHhfaW9kZXNjLCBBUlJBWV9TSVpFKHMzYzI0NHhfaW9kZXNjKSk7CisJaW90YWJsZV9pbml0KG1hY2hfZGVzYywgc2l6ZSk7CisKKwkvKiByZW5hbWUgYW55IHBlcmlwaGVyYWxzIHVzZWQgZGlmZmVyaW5nIGZyb20gdGhlIHMzYzI0MTAgKi8KKworCXMzY19kZXZpY2VfaTJjLm5hbWUgID0gInMzYzI0NDAtaTJjIjsKKwlzM2NfZGV2aWNlX25hbmQubmFtZSA9ICJzM2MyNDQwLW5hbmQiOworfQorCit2b2lkIF9faW5pdCBzM2MyNDR4X2luaXRfY2xvY2tzKGludCB4dGFsKQoreworCXVuc2lnbmVkIGxvbmcgY2xrZGl2OworCXVuc2lnbmVkIGxvbmcgY2FtZGl2OworCXVuc2lnbmVkIGxvbmcgaGNsaywgZmNsaywgcGNsazsKKwlpbnQgaGRpdiA9IDE7CisKKwkvKiBub3cgd2UndmUgZ290IG91ciBtYWNoaW5lIGJpdHMgaW5pdGlhbGlzZWQsIHdvcmsgb3V0IHdoYXQKKwkgKiBjbG9ja3Mgd2UndmUgZ290ICovCisKKwlmY2xrID0gczNjMjQxMF9nZXRfcGxsKF9fcmF3X3JlYWRsKFMzQzI0MTBfTVBMTENPTiksIHh0YWwpICogMjsKKworCWNsa2RpdiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7CisJY2FtZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQ0MF9DQU1ESVZOKTsKKworCS8qIHdvcmsgb3V0IGNsb2NrIHNjYWxpbmdzICovCisKKwlzd2l0Y2ggKGNsa2RpdiAmIFMzQzI0NDBfQ0xLRElWTl9IRElWTl9NQVNLKSB7CisJY2FzZSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fMToKKwkJaGRpdiA9IDE7CisJCWJyZWFrOworCisJY2FzZSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fMjoKKwkJaGRpdiA9IDI7CisJCWJyZWFrOworCisJY2FzZSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fNF84OgorCQloZGl2ID0gKGNhbWRpdiAmIFMzQzI0NDBfQ0FNRElWTl9IQ0xLNF9IQUxGKSA/IDggOiA0OworCQlicmVhazsKKworCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzNfNjoKKwkJaGRpdiA9IChjYW1kaXYgJiBTM0MyNDQwX0NBTURJVk5fSENMSzNfSEFMRikgPyA2IDogMzsKKwkJYnJlYWs7CisJfQorCisJaGNsayA9IGZjbGsgLyBoZGl2OworCXBjbGsgPSBoY2xrIC8gKChjbGtkaXYgJiBTM0MyNDQwX0NMS0RJVk5fUERJVk4pPyAyOjEpOworCisJLyogcHJpbnQgYnJpZWYgc3VtbWFyeSBvZiBjbG9ja3MsIGV0YyAqLworCisJcHJpbnRrKCJTM0MyNDRYOiBjb3JlICVsZC4lMDNsZCBNSHosIG1lbW9yeSAlbGQuJTAzbGQgTUh6LCBwZXJpcGhlcmFsICVsZC4lMDNsZCBNSHpcbiIsCisJICAgICAgIHByaW50X21oeihmY2xrKSwgcHJpbnRfbWh6KGhjbGspLCBwcmludF9taHoocGNsaykpOworCisJLyogaW5pdGlhbGlzZSB0aGUgY2xvY2tzIGhlcmUsIHRvIGFsbG93IG90aGVyIHRoaW5ncyBsaWtlIHRoZQorCSAqIGNvbnNvbGUgdG8gdXNlIHRoZW0sIGFuZCB0byBhZGQgbmV3IG9uZXMgYWZ0ZXIgdGhlIGluaXRpYWxpc2F0aW9uCisJICovCisKKwlzM2MyNHh4X3NldHVwX2Nsb2Nrcyh4dGFsLCBmY2xrLCBoY2xrLCBwY2xrKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgczNjMjQ0eF9zbGVlcFtdID0geworCVNBVkVfSVRFTShTM0MyNDQwX0RTQzApLAorCVNBVkVfSVRFTShTM0MyNDQwX0RTQzEpLAorCVNBVkVfSVRFTShTM0MyNDQwX0dQSkRBVCksCisJU0FWRV9JVEVNKFMzQzI0NDBfR1BKQ09OKSwKKwlTQVZFX0lURU0oUzNDMjQ0MF9HUEpVUCkKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0eF9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzM2MyNDEwX3BtX2RvX3NhdmUoczNjMjQ0eF9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDR4X3NsZWVwKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjQ0eF9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlzM2MyNDEwX3BtX2RvX3Jlc3RvcmUoczNjMjQ0eF9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDR4X3NsZWVwKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHMzYzI0NHhfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0NHhfcmVzdW1lICBOVUxMCisjZW5kaWYKKworLyogU2luY2UgdGhlIFMzQzI0NDIgYW5kIFMzQzI0NDAgc2hhcmUgIGl0ZW1zLCBwdXQgYm90aCBzeXNjbGFzc2VzIGhlcmUgKi8KKworc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDQwX3N5c2NsYXNzID0geworCXNldF9rc2V0X25hbWUoInMzYzI0NDAtY29yZSIpLAorCS5zdXNwZW5kCT0gczNjMjQ0eF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjQ0eF9yZXN1bWUKK307CisKK3N0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0Ml9zeXNjbGFzcyA9IHsKKwlzZXRfa3NldF9uYW1lKCJzM2MyNDQyLWNvcmUiKSwKKwkuc3VzcGVuZAk9IHMzYzI0NHhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0NHhfcmVzdW1lCit9OworCisvKiBuZWVkIHRvIHJlZ2lzdGVyIGNsYXNzIGJlZm9yZSB3ZSBhY3R1YWxseSByZWdpc3RlciB0aGUgZGV2aWNlLCBhbmQKKyAqIHdlIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgYmVlbiBpbml0aWFsaXNlZCBiZWZvcmUgYW55IG9mIHRoZQorICogZHJpdmVycyBldmVuIHRyeSB0byB1c2UgaXQgKGV2ZW4gaWYgbm90IG9uIGFuIHMzYzI0NDAgYmFzZWQgc3lzdGVtKQorICogYXMgYSBkcml2ZXIgd2hpY2ggbWF5IHN1cHBvcnQgYm90aCAyNDEwIGFuZCAyNDQwIG1heSB0cnkgYW5kIHVzZSBpdC4KKyovCisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0NDBfY29yZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmczNjMjQ0MF9zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwoczNjMjQ0MF9jb3JlX2luaXQpOworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQyX2NvcmVfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MpOworfQorCitjb3JlX2luaXRjYWxsKHMzYzI0NDJfY29yZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlN2Y1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBjcHUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQyKQorCitleHRlcm4gdm9pZCBzM2MyNDR4X21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpOworCitleHRlcm4gdm9pZCBzM2MyNDR4X2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pOworCitleHRlcm4gdm9pZCBzM2MyNDR4X2luaXRfY2xvY2tzKGludCB4dGFsKTsKKworI2Vsc2UKKyNkZWZpbmUgczNjMjQ0eF9pbml0X2Nsb2NrcyBOVUxMCisjZGVmaW5lIHMzYzI0NHhfaW5pdF91YXJ0cyBOVUxMCisjZGVmaW5lIHMzYzI0NHhfbWFwX2lvIE5VTEwKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUwppbmRleCA3M2RlMmVhLi41ZjY3NjFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUwpAQCAtNjYsNyArNjYsOSBAQAogCUBAIGZsdXNoIHRoZSBjYWNoZXMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYmFjayBvdXQgdG8KIAlAQCBTRFJBTSBiZWZvcmUgdGhlIGNvcmUgcG93ZXJzIGRvd24KIAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAlibAlhcm05MjBfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKyNlbmRpZgogCiAJQEAgcHJlcGFyZSBjcHUgdG8gc2xlZXAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggYzU1YjczOS4uMWZmMmYwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xMjEsOCArMTIxLDggQEAKICMgQVJNOTI2VAogY29uZmlnIENQVV9BUk05MjZUCiAJYm9vbCAiU3VwcG9ydCBBUk05MjZUIHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX1ZFUlNBVElMRV9QQiB8fCBNQUNIX1ZFUlNBVElMRV9BQiB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQMTZYWCB8fCBNQUNIX1JFQUxWSUVXX0VCCi0JZGVmYXVsdCB5IGlmIEFSQ0hfVkVSU0FUSUxFX1BCIHx8IE1BQ0hfVkVSU0FUSUxFX0FCIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVAxNlhYCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgQVJDSF9WRVJTQVRJTEVfUEIgfHwgTUFDSF9WRVJTQVRJTEVfQUIgfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDE2WFggfHwgTUFDSF9SRUFMVklFV19FQiB8fCBBUkNIX1BOWDQwMDgKKwlkZWZhdWx0IHkgaWYgQVJDSF9WRVJTQVRJTEVfUEIgfHwgTUFDSF9WRVJTQVRJTEVfQUIgfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9QTlg0MDA4CiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVRKCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9waHlzbWVtLmMgYi9hcmNoL3VtL2tlcm5lbC9waHlzbWVtLmMKaW5kZXggZmMwZjBiMC4uMTY2Y2IwOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvcGh5c21lbS5jCisrKyBiL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYwpAQCAtNjksNyArNjksNyBAQAogCQlwYW5pYygiUGh5c2ljYWwgcmVtYXBwaW5nIGZvciAlcCBhbHJlYWR5IHByZXNlbnQiLAogCQkgICAgICBkZXNjLT52aXJ0KTsKIAotCXJiX2xpbmtfbm9kZSgmZGVzYy0+cmIsICgqbiktPnJiX3BhcmVudCwgbik7CisJcmJfbGlua19ub2RlKCZkZXNjLT5yYiwgcmJfcGFyZW50KCpuKSwgbik7CiAJcmJfaW5zZXJ0X2NvbG9yKCZkZXNjLT5yYiwgJnBoeXNfbWFwcGluZ3MpOwogfQogCmRpZmYgLS1naXQgYS9ibG9jay9hcy1pb3NjaGVkLmMgYi9ibG9jay9hcy1pb3NjaGVkLmMKaW5kZXggYTdjYWYzNS4uMGM3NTAzOSAxMDA2NDQKLS0tIGEvYmxvY2svYXMtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2FzLWlvc2NoZWQuYwpAQCAtMzUzLDEwICszNTMsOSBAQAogLyoKICAqIHJiIHRyZWUgc3VwcG9ydCBmdW5jdGlvbnMKICAqLwotI2RlZmluZSBSQl9OT05FCQkoMikKICNkZWZpbmUgUkJfRU1QVFkocm9vdCkJKChyb290KS0+cmJfbm9kZSA9PSBOVUxMKQotI2RlZmluZSBPTl9SQihub2RlKQkoKG5vZGUpLT5yYl9jb2xvciAhPSBSQl9OT05FKQotI2RlZmluZSBSQl9DTEVBUihub2RlKQkoKG5vZGUpLT5yYl9jb2xvciA9IFJCX05PTkUpCisjZGVmaW5lIE9OX1JCKG5vZGUpCShyYl9wYXJlbnQobm9kZSkgIT0gbm9kZSkKKyNkZWZpbmUgUkJfQ0xFQVIobm9kZSkJKHJiX3NldF9wYXJlbnQobm9kZSwgbm9kZSkpCiAjZGVmaW5lIHJiX2VudHJ5X2FycShub2RlKQlyYl9lbnRyeSgobm9kZSksIHN0cnVjdCBhc19ycSwgcmJfbm9kZSkKICNkZWZpbmUgQVJRX1JCX1JPT1QoYWQsIGFycSkJKCYoYWQpLT5zb3J0X2xpc3RbKGFycSktPmlzX3N5bmNdKQogI2RlZmluZSBycV9yYl9rZXkocnEpCQkocnEpLT5zZWN0b3IKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDA1MmIxNzQuLjYyMDBkOWIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtNjAsMTQgKzYwLDkgQEAKIC8qCiAgKiByYi10cmVlIGRlZmluZXMKICAqLwotI2RlZmluZSBSQl9OT05FCQkJKDIpCiAjZGVmaW5lIFJCX0VNUFRZKG5vZGUpCQkoKG5vZGUpLT5yYl9ub2RlID09IE5VTEwpCi0jZGVmaW5lIFJCX0NMRUFSX0NPTE9SKG5vZGUpCShub2RlKS0+cmJfY29sb3IgPSBSQl9OT05FCiAjZGVmaW5lIFJCX0NMRUFSKG5vZGUpCQlkbyB7CVwKLQkobm9kZSktPnJiX3BhcmVudCA9IE5VTEw7CVwKLQlSQl9DTEVBUl9DT0xPUigobm9kZSkpOwkJXAotCShub2RlKS0+cmJfcmlnaHQgPSBOVUxMOwlcCi0JKG5vZGUpLT5yYl9sZWZ0ID0gTlVMTDsJCVwKKwkJbWVtc2V0KG5vZGUsIDAsIHNpemVvZigqbm9kZSkpOyBcCiB9IHdoaWxlICgwKQogI2RlZmluZSBSQl9DTEVBUl9ST09UKHJvb3QpCSgocm9vdCktPnJiX25vZGUgPSBOVUxMKQogI2RlZmluZSByYl9lbnRyeV9jcnEobm9kZSkJcmJfZW50cnkoKG5vZGUpLCBzdHJ1Y3QgY2ZxX3JxLCByYl9ub2RlKQpAQCAtNTY3LDcgKzU2Miw2IEBACiAJY2ZxX3VwZGF0ZV9uZXh0X2NycShjcnEpOwogCiAJcmJfZXJhc2UoJmNycS0+cmJfbm9kZSwgJmNmcXEtPnNvcnRfbGlzdCk7Ci0JUkJfQ0xFQVJfQ09MT1IoJmNycS0+cmJfbm9kZSk7CiAKIAlpZiAoY2ZxX2NmcXFfb25fcnIoY2ZxcSkgJiYgUkJfRU1QVFkoJmNmcXEtPnNvcnRfbGlzdCkpCiAJCWNmcV9kZWxfY2ZxcV9ycihjZnFkLCBjZnFxKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYyBiL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYwppbmRleCAzYmQwNDE1Li5jOTRkZThlIDEwMDY0NAotLS0gYS9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMKKysrIGIvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jCkBAIC0xNjUsMTAgKzE2NSw5IEBACiAvKgogICogcmIgdHJlZSBzdXBwb3J0IGZ1bmN0aW9ucwogICovCi0jZGVmaW5lIFJCX05PTkUJCSgyKQogI2RlZmluZSBSQl9FTVBUWShyb290KQkoKHJvb3QpLT5yYl9ub2RlID09IE5VTEwpCi0jZGVmaW5lIE9OX1JCKG5vZGUpCSgobm9kZSktPnJiX2NvbG9yICE9IFJCX05PTkUpCi0jZGVmaW5lIFJCX0NMRUFSKG5vZGUpCSgobm9kZSktPnJiX2NvbG9yID0gUkJfTk9ORSkKKyNkZWZpbmUgT05fUkIobm9kZSkJKHJiX3BhcmVudChub2RlKSAhPSBub2RlKQorI2RlZmluZSBSQl9DTEVBUihub2RlKQkocmJfc2V0X3BhcmVudChub2RlLCBub2RlKSkKICNkZWZpbmUgcmJfZW50cnlfZHJxKG5vZGUpCXJiX2VudHJ5KChub2RlKSwgc3RydWN0IGRlYWRsaW5lX3JxLCByYl9ub2RlKQogI2RlZmluZSBEUlFfUkJfUk9PVChkZCwgZHJxKQkoJihkZCktPnNvcnRfbGlzdFtycV9kYXRhX2RpcigoZHJxKS0+cmVxdWVzdCldKQogI2RlZmluZSBycV9yYl9rZXkocnEpCQkocnEpLT5zZWN0b3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vZGFlbW9uLmggYi9kcml2ZXJzL2NoYXIvcmlvL2RhZW1vbi5oCmluZGV4IDU4MThhOGEuLjZlNjNmOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vZGFlbW9uLmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9kYWVtb24uaApAQCAtNTEsNyArNTEsNyBAQAogfTsKIAogc3RydWN0IERvd25Mb2FkIHsKLQljaGFyICpEYXRhUDsKKwljaGFyIF9fdXNlciAqRGF0YVA7CiAJdW5zaWduZWQgaW50IENvdW50OwogCXVuc2lnbmVkIGludCBQcm9kdWN0Q29kZTsKIH07CkBAIC04MywxOCArODMsMTggQEAKIHN0cnVjdCBMcGJSZXEgewogCXVuc2lnbmVkIGludCBIb3N0OwogCXVuc2lnbmVkIGludCBMaW5rOwotCXN0cnVjdCBMUEIgKkxwYlA7CisJc3RydWN0IExQQiBfX3VzZXIgKkxwYlA7CiB9OwogCiBzdHJ1Y3QgUnVwUmVxIHsKIAl1bnNpZ25lZCBpbnQgSG9zdE51bTsKIAl1bnNpZ25lZCBpbnQgUnVwTnVtOwotCXN0cnVjdCBSVVAgKlJ1cFA7CisJc3RydWN0IFJVUCBfX3VzZXIgKlJ1cFA7CiB9OwogCiBzdHJ1Y3QgUG9ydFJlcSB7CiAJdW5zaWduZWQgaW50IFN5c1BvcnQ7Ci0Jc3RydWN0IFBvcnQgKlBvcnRQOworCXN0cnVjdCBQb3J0IF9fdXNlciAqUG9ydFA7CiB9OwogCiBzdHJ1Y3QgU3RyZWFtSW5mbyB7CkBAIC0xMDUsMTIgKzEwNSwxMiBAQAogCiBzdHJ1Y3QgSG9zdFJlcSB7CiAJdW5zaWduZWQgaW50IEhvc3ROdW07Ci0Jc3RydWN0IEhvc3QgKkhvc3RQOworCXN0cnVjdCBIb3N0IF9fdXNlciAqSG9zdFA7CiB9OwogCiBzdHJ1Y3QgSG9zdERwUmFtIHsKIAl1bnNpZ25lZCBpbnQgSG9zdE51bTsKLQlzdHJ1Y3QgRHBSYW0gKkRwUmFtUDsKKwlzdHJ1Y3QgRHBSYW0gX191c2VyICpEcFJhbVA7CiB9OwogCiBzdHJ1Y3QgRGVidWdDdHJsIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vZnVuYy5oIGIvZHJpdmVycy9jaGFyL3Jpby9mdW5jLmgKaW5kZXggZTY0ZmU5OS4uNmIwMzkxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9mdW5jLmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9mdW5jLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIGludCBSSU9Cb290Q29kZUhPU1Qoc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBEb3duTG9hZCAqKTsKIGludCBSSU9Cb290Q29kZVVOS05PV04oc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBEb3duTG9hZCAqKTsKIHZvaWQgbXNlY190aW1lb3V0KHN0cnVjdCBIb3N0ICopOwotaW50IFJJT0Jvb3RSdXAoc3RydWN0IHJpb19pbmZvICosIHVuc2lnbmVkIGludCwgc3RydWN0IEhvc3QgKiwgc3RydWN0IFBLVCAqKTsKK2ludCBSSU9Cb290UnVwKHN0cnVjdCByaW9faW5mbyAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBIb3N0ICosIHN0cnVjdCBQS1QgX19pb21lbSAqKTsKIGludCBSSU9Cb290T2soc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBIb3N0ICosIHVuc2lnbmVkIGxvbmcpOwogaW50IFJJT1J0YUJvdW5kKHN0cnVjdCByaW9faW5mbyAqLCB1bnNpZ25lZCBpbnQpOwogdm9pZCByaW9fZmlsbF9ob3N0X3Nsb3QoaW50LCBpbnQsIHVuc2lnbmVkIGludCwgc3RydWN0IEhvc3QgKik7CkBAIC01NSw4ICs1NSw4IEBACiBpbnQgUklPRm9hZFJ0YShzdHJ1Y3QgSG9zdCAqLCBzdHJ1Y3QgTWFwICopOwogaW50IFJJT1pvbWJpZVJ0YShzdHJ1Y3QgSG9zdCAqLCBzdHJ1Y3QgTWFwICopOwogaW50IFJJT0NvbW1hbmRSdGEoc3RydWN0IHJpb19pbmZvICosIHVuc2lnbmVkIGxvbmcsIGludCAoKmZ1bmMpIChzdHJ1Y3QgSG9zdCAqLCBzdHJ1Y3QgTWFwICopKTsKLWludCBSSU9JZGVudGlmeVJ0YShzdHJ1Y3QgcmlvX2luZm8gKiwgdm9pZCAqKTsKLWludCBSSU9LaWxsTmVpZ2hib3VyKHN0cnVjdCByaW9faW5mbyAqLCB2b2lkICopOworaW50IFJJT0lkZW50aWZ5UnRhKHN0cnVjdCByaW9faW5mbyAqLCB2b2lkIF9fdXNlciAqKTsKK2ludCBSSU9LaWxsTmVpZ2hib3VyKHN0cnVjdCByaW9faW5mbyAqLCB2b2lkIF9fdXNlciAqKTsKIGludCBSSU9TdXNwZW5kQm9vdFJ0YShzdHJ1Y3QgSG9zdCAqLCBpbnQsIGludCk7CiBpbnQgUklPRm9hZFdha2V1cChzdHJ1Y3QgcmlvX2luZm8gKik7CiBzdHJ1Y3QgQ21kQmxrICpSSU9HZXRDbWRCbGsodm9pZCk7CkBAIC02OCw3ICs2OCw4IEBACiBpbnQgUklPVW5Vc2UodW5zaWduZWQgbG9uZywgc3RydWN0IENtZEJsayAqKTsKIAogLyogcmlvY3RybC5jICovCi1pbnQgcmlvY29udHJvbChzdHJ1Y3QgcmlvX2luZm8gKiwgZGV2X3QsIGludCwgY2FkZHJfdCwgaW50KTsKK2ludCByaW9jb250cm9sKHN0cnVjdCByaW9faW5mbyAqLCBkZXZfdCwgaW50LCB1bnNpZ25lZCBsb25nLCBpbnQpOworCiBpbnQgUklPUHJlZW1wdGl2ZUNtZChzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IFBvcnQgKiwgdW5zaWduZWQgY2hhcik7CiAKIC8qIHJpb2luaXQuYyAqLwpAQCAtNzcsMTMgKzc4LDEzIEBACiB2b2lkIFJJT0lTQWluaXQoc3RydWN0IHJpb19pbmZvICosIGludCk7CiBpbnQgUklPRG9BVChzdHJ1Y3QgcmlvX2luZm8gKiwgaW50LCBpbnQpOwogY2FkZHJfdCBSSU9DaGVja0ZvckFUQ2FyZChpbnQpOwotaW50IFJJT0Fzc2lnbkFUKHN0cnVjdCByaW9faW5mbyAqLCBpbnQsIGNhZGRyX3QsIGludCk7Ci1pbnQgUklPQm9hcmRUZXN0KHVuc2lnbmVkIGxvbmcsIGNhZGRyX3QsIHVuc2lnbmVkIGNoYXIsIGludCk7CitpbnQgUklPQXNzaWduQVQoc3RydWN0IHJpb19pbmZvICosIGludCwgdm9pZCBfX2lvbWVtICosIGludCk7CitpbnQgUklPQm9hcmRUZXN0KHVuc2lnbmVkIGxvbmcsIHZvaWQgX19pb21lbSAqLCB1bnNpZ25lZCBjaGFyLCBpbnQpOwogdm9pZCBSSU9BbGxvY0RhdGFTdHJ1Y3RzKHN0cnVjdCByaW9faW5mbyAqKTsKIHZvaWQgUklPU2V0dXBEYXRhU3RydWN0cyhzdHJ1Y3QgcmlvX2luZm8gKik7CiBpbnQgUklPRGVmYXVsdE5hbWUoc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBIb3N0ICosIHVuc2lnbmVkIGludCk7CiBzdHJ1Y3QgcmlvVmVyc2lvbiAqUklPVmVyc2lkKHZvaWQpOwotdm9pZCBSSU9Ib3N0UmVzZXQodW5zaWduZWQgaW50LCBzdHJ1Y3QgRHBSYW0gKiwgdW5zaWduZWQgaW50KTsKK3ZvaWQgUklPSG9zdFJlc2V0KHVuc2lnbmVkIGludCwgc3RydWN0IERwUmFtIF9faW9tZW0gKiwgdW5zaWduZWQgaW50KTsKIAogLyogcmlvaW50ci5jICovCiB2b2lkIFJJT1R4RW5hYmxlKGNoYXIgKik7CkBAIC05NSwxNCArOTYsMTQgQEAKIGludCBSSU9EZWxheShzdHJ1Y3QgUG9ydCAqUG9ydFAsIGludCk7CiBpbnQgUklPRGVsYXlfbmkoc3RydWN0IFBvcnQgKlBvcnRQLCBpbnQpOwogdm9pZCBtc190aW1lb3V0KHN0cnVjdCBQb3J0ICopOwotaW50IGNhbl9hZGRfdHJhbnNtaXQoc3RydWN0IFBLVCAqKiwgc3RydWN0IFBvcnQgKik7CitpbnQgY2FuX2FkZF90cmFuc21pdChzdHJ1Y3QgUEtUIF9faW9tZW0gKiosIHN0cnVjdCBQb3J0ICopOwogdm9pZCBhZGRfdHJhbnNtaXQoc3RydWN0IFBvcnQgKik7Ci12b2lkIHB1dF9mcmVlX2VuZChzdHJ1Y3QgSG9zdCAqLCBzdHJ1Y3QgUEtUICopOwotaW50IGNhbl9yZW1vdmVfcmVjZWl2ZShzdHJ1Y3QgUEtUICoqLCBzdHJ1Y3QgUG9ydCAqKTsKK3ZvaWQgcHV0X2ZyZWVfZW5kKHN0cnVjdCBIb3N0ICosIHN0cnVjdCBQS1QgX19pb21lbSAqKTsKK2ludCBjYW5fcmVtb3ZlX3JlY2VpdmUoc3RydWN0IFBLVCBfX2lvbWVtICoqLCBzdHJ1Y3QgUG9ydCAqKTsKIHZvaWQgcmVtb3ZlX3JlY2VpdmUoc3RydWN0IFBvcnQgKik7CiAKIC8qIHJpb3JvdXRlLmMgKi8KLWludCBSSU9Sb3V0ZVJ1cChzdHJ1Y3QgcmlvX2luZm8gKiwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgSG9zdCAqLCBzdHJ1Y3QgUEtUICopOworaW50IFJJT1JvdXRlUnVwKHN0cnVjdCByaW9faW5mbyAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBIb3N0ICosIHN0cnVjdCBQS1QgX19pb21lbSAqKTsKIHZvaWQgUklPRml4UGhicyhzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdW5zaWduZWQgaW50KTsKIHVuc2lnbmVkIGludCBHZXRVbml0VHlwZSh1bnNpZ25lZCBpbnQpOwogaW50IFJJT1NldENoYW5nZShzdHJ1Y3QgcmlvX2luZm8gKik7CkBAIC0xMzksNyArMTQwLDcgQEAKIHN0cnVjdCByaW9faW5mbyAqcmlvX2luZm9fc3RvcmUoaW50IGNtZCwgc3RydWN0IHJpb19pbmZvICpwKTsKICNlbmRpZgogCi1leHRlcm4gdm9pZCByaW9fY29weV90b19jYXJkKHZvaWQgKnRvLCB2b2lkICpmcm9tLCBpbnQgbGVuKTsKK2V4dGVybiB2b2lkIHJpb19jb3B5X3RvX2NhcmQodm9pZCAqZnJvbSwgdm9pZCBfX2lvbWVtICp0bywgaW50IGxlbik7CiBleHRlcm4gaW50IHJpb19taW5vcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiBpbnQgcmlvX2lzbW9kZW0oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vaG9zdC5oIGIvZHJpdmVycy9jaGFyL3Jpby9ob3N0LmgKaW5kZXggMTc5Y2RiZS4uZWUyZGRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9ob3N0LmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9ob3N0LmgKQEAgLTQ4LDggKzQ4LDggQEAKIAl1bnNpZ25lZCBjaGFyIEl2ZWM7CQkvKiBQT0xMRUQgb3IgaXZlYyBudW1iZXIgKi8KIAl1bnNpZ25lZCBjaGFyIE1vZGU7CQkvKiBDb250cm9sIHN0dWZmICovCiAJdW5zaWduZWQgY2hhciBTbG90OwkJLyogU2xvdCAqLwotCWNhZGRyX3QgQ2FkZHI7CQkJLyogS1YgYWRkcmVzcyBvZiBEUFJBTSAqLwotCXN0cnVjdCBEcFJhbSAqQ2FyZFA7CQkvKiBLViBhZGRyZXNzIG9mIERQUkFNLCB3aXRoIG92ZXJsYXkgKi8KKwl2b2lkICBfX2lvbWVtICpDYWRkcjsJCS8qIEtWIGFkZHJlc3Mgb2YgRFBSQU0gKi8KKwlzdHJ1Y3QgRHBSYW0gX19pb21lbSAqQ2FyZFA7CS8qIEtWIGFkZHJlc3Mgb2YgRFBSQU0sIHdpdGggb3ZlcmxheSAqLwogCXVuc2lnbmVkIGxvbmcgUGFkZHJQOwkJLyogUGh5cy4gYWRkcmVzcyBvZiBEUFJBTSAqLwogCWNoYXIgTmFtZVtNQVhfTkFNRV9MRU5dOwkvKiBUaGUgbmFtZSBvZiB0aGUgaG9zdCAqLwogCXVuc2lnbmVkIGludCBVbmlxdWVOdW07CQkvKiBob3N0IHVuaXF1ZSBudW1iZXIgKi8KQEAgLTU3LDcgKzU3LDcgQEAKIAl1bnNpZ25lZCBpbnQgV29ya1RvQmVEb25lOwkvKiBzZXQgdG8gdHJ1ZSBlYWNoIGludGVycnVwdCAqLwogCXVuc2lnbmVkIGludCBJbkludHI7CQkvKiBCZWluZyBzZXJ2aWNlZD8gKi8KIAl1bnNpZ25lZCBpbnQgSW50U3J2RG9uZTsJLyogaG9zdCdzIGludGVycnVwdCBoYXMgYmVlbiBzZXJ2aWNlZCAqLwotCXZvaWQgKCpDb3B5KSAodm9pZCAqLCB2b2lkICosIGludCk7CS8qIGNvcHkgZnVuYyAqLworCXZvaWQgKCpDb3B5KSAodm9pZCAqLCB2b2lkIF9faW9tZW0gKiwgaW50KTsJLyogY29weSBmdW5jICovCiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJLyoKIAkgKiogICAgICAgICAgICAgICBJIE0gUCBPIFIgVCBBIE4gVCAhCkBAIC04MywxMSArODMsMTEgQEAKIAogCXN0cnVjdCBUb3AgVG9wb2xvZ3lbTElOS1NfUEVSX1VOSVRdOwkvKiBvbmUgcGVyIGxpbmsgKi8KIAlzdHJ1Y3QgTWFwIE1hcHBpbmdbTUFYX1JVUF07CQkvKiBNYXBwaW5ncyBmb3IgaG9zdCAqLwotCXN0cnVjdCBQSEIgKlBoYlA7CQkJLyogUG9pbnRlciB0byB0aGUgUEhCIGFycmF5ICovCi0JdW5zaWduZWQgc2hvcnQgKlBoYk51bVA7CQkvKiBQdHIgdG8gTnVtYmVyIG9mIFBIQidzICovCi0Jc3RydWN0IExQQiAqTGlua1N0clA7CQkJLyogTGluayBTdHJ1Y3R1cmUgQXJyYXkgKi8KLQlzdHJ1Y3QgUlVQICpSdXBQOwkJCS8qIFNpeHRlZW4gcmVhbCBydXBzIGhlcmUgKi8KLQlzdHJ1Y3QgUEFSTV9NQVAgKlBhcm1NYXBQOwkJLyogcG9pbnRzIHRvIHRoZSBwYXJtbWFwICovCisJc3RydWN0IFBIQiBfX2lvbWVtICpQaGJQOwkJLyogUG9pbnRlciB0byB0aGUgUEhCIGFycmF5ICovCisJdW5zaWduZWQgc2hvcnQgX19pb21lbSAqUGhiTnVtUDsJLyogUHRyIHRvIE51bWJlciBvZiBQSEIncyAqLworCXN0cnVjdCBMUEIgX19pb21lbSAqTGlua1N0clA7CQkvKiBMaW5rIFN0cnVjdHVyZSBBcnJheSAqLworCXN0cnVjdCBSVVAgX19pb21lbSAqUnVwUDsJCS8qIFNpeHRlZW4gcmVhbCBydXBzIGhlcmUgKi8KKwlzdHJ1Y3QgUEFSTV9NQVAgX19pb21lbSAqUGFybU1hcFA7CS8qIHBvaW50cyB0byB0aGUgcGFybW1hcCAqLwogCXVuc2lnbmVkIGludCBFeHRyYVVuaXRzW01BWF9FWFRSQV9VTklUU107CS8qIHVua25vd24gdGhpbmdzICovCiAJdW5zaWduZWQgaW50IE51bUV4dHJhQm9vdGVkOwkJLyogaG93IG1hbnkgb2YgdGhlIGFib3ZlICovCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcG9ydC5oIGIvZHJpdmVycy9jaGFyL3Jpby9wb3J0LmgKaW5kZXggOWI1ZmEzZS4uNDljZjZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9wb3J0LmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9wb3J0LmgKQEAgLTQwLDcgKzQwLDcgQEAKIAlzdHJ1Y3QgZ3NfcG9ydCBnczsKIAlpbnQgUG9ydE51bTsJCQkvKiBSSU8gcG9ydCBuby4sIDAtNTExICovCiAJc3RydWN0IEhvc3QgKkhvc3RQOwotCWNhZGRyX3QgQ2FkZHI7CisJdm9pZCBfX2lvbWVtICpDYWRkcjsKIAl1bnNpZ25lZCBzaG9ydCBIb3N0UG9ydDsJLyogUG9ydCBudW1iZXIgb24gaG9zdCBjYXJkICovCiAJdW5zaWduZWQgY2hhciBSdXBOdW07CQkvKiBOdW1iZXIgb2YgUlVQIGZvciBwb3J0ICovCiAJdW5zaWduZWQgY2hhciBJRDI7CQkvKiBTZWNvbmQgSUQgb2YgUlRBIGZvciBwb3J0ICovCkBAIC05MiwxMyArOTIsMTMgQEAKICNkZWZpbmUgUklPX1JUU0ZMT1cJMHgwNDAwCQkvKiBSSU8ncyBvd24gUlRTRkxPVyBmbGFnICovCiAKIAotCXN0cnVjdCBQSEIgKlBoYlA7CQkvKiBwb2ludGVyIHRvIFBIQiBmb3IgcG9ydCAqLwotCXUxNiAqVHhBZGQ7CQkJLyogQWRkIHBhY2tldHMgaGVyZSAqLwotCXUxNiAqVHhTdGFydDsJCQkvKiBTdGFydCBvZiBhZGQgYXJyYXkgKi8KLQl1MTYgKlR4RW5kOwkJCS8qIEVuZCBvZiBhZGQgYXJyYXkgKi8KLQl1MTYgKlJ4UmVtb3ZlOwkJCS8qIFJlbW92ZSBwYWNrZXRzIGhlcmUgKi8KLQl1MTYgKlJ4U3RhcnQ7CQkJLyogU3RhcnQgb2YgcmVtb3ZlIGFycmF5ICovCi0JdTE2ICpSeEVuZDsJCQkvKiBFbmQgb2YgcmVtb3ZlIGFycmF5ICovCisJc3RydWN0IFBIQiBfX2lvbWVtICpQaGJQOwkvKiBwb2ludGVyIHRvIFBIQiBmb3IgcG9ydCAqLworCXUxNiBfX2lvbWVtICpUeEFkZDsJCS8qIEFkZCBwYWNrZXRzIGhlcmUgKi8KKwl1MTYgX19pb21lbSAqVHhTdGFydDsJCS8qIFN0YXJ0IG9mIGFkZCBhcnJheSAqLworCXUxNiBfX2lvbWVtICpUeEVuZDsJCS8qIEVuZCBvZiBhZGQgYXJyYXkgKi8KKwl1MTYgX19pb21lbSAqUnhSZW1vdmU7CQkvKiBSZW1vdmUgcGFja2V0cyBoZXJlICovCisJdTE2IF9faW9tZW0gKlJ4U3RhcnQ7CQkvKiBTdGFydCBvZiByZW1vdmUgYXJyYXkgKi8KKwl1MTYgX19pb21lbSAqUnhFbmQ7CQkvKiBFbmQgb2YgcmVtb3ZlIGFycmF5ICovCiAJdW5zaWduZWQgaW50IFJ0YVVuaXF1ZU51bTsJLyogVW5pcXVlIG51bWJlciBvZiBSVEEgKi8KIAl1bnNpZ25lZCBzaG9ydCBQb3J0U3RhdGU7CS8qIHN0YXR1cyBvZiBwb3J0ICovCiAJdW5zaWduZWQgc2hvcnQgTW9kZW1TdGF0ZTsJLyogc3RhdHVzIG9mIG1vZGVtIGxpbmVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpby5oIGIvZHJpdmVycy9jaGFyL3Jpby9yaW8uaAppbmRleCBiNGM5MTg3Li4xYmYzNjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpby5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvLmgKQEAgLTEyOSw4ICsxMjksOCBAQAogKioJUklPX09CSiB0YWtlcyBob3N0cC0+Q2FkZHIgYW5kIGEgVU5JWCBwb2ludGVyIHRvIGFuIG9iamVjdCBhbmQKICoqCXJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSBEUCBSQU0gYXJlYS4KICovCi0jZGVmaW5lCVJJT19QVFIoQyxPKSAoKCh1bnNpZ25lZCBjaGFyICopKEMpKSsoMHhGRkZGJihPKSkpCi0jZGVmaW5lCVJJT19PRkYoQyxPKSAoKGxvbmcpKE8pLShsb25nKShDKSkKKyNkZWZpbmUJUklPX1BUUihDLE8pICgoKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKShDKSkrKDB4RkZGRiYoTykpKQorI2RlZmluZQlSSU9fT0ZGKEMsTykgKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikoTyktKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKShDKSkKIAogLyoKICoqCUhvdyB0byBjb252ZXJ0IGZyb20gdmFyaW91cyBkaWZmZXJlbnQgZGV2aWNlIG51bWJlciBmb3JtYXRzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMKaW5kZXggNzhkZDg1Ni4uYWE0MzQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCkBAIC0zMzMsOSArMzMzLDkgQEAKIAlyZXR1cm4gIVJJT19GQUlMOwogfQogCi12b2lkIHJpb19jb3B5X3RvX2NhcmQodm9pZCAqdG8sIHZvaWQgKmZyb20sIGludCBsZW4pCit2b2lkIHJpb19jb3B5X3RvX2NhcmQodm9pZCAqZnJvbSwgdm9pZCBfX2lvbWVtICp0bywgaW50IGxlbikKIHsKLQlyaW9fbWVtY3B5X3RvaW8oTlVMTCwgdG8sIGZyb20sIGxlbik7CisJcmlvX2NvcHlfdG9pbyh0bywgZnJvbSwgbGVuKTsKIH0KIAogaW50IHJpb19taW5vcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNTczLDcgKzU3Myw3IEBACiAJZnVuY19lbnRlcigpOwogCiAJLyogVGhlICJkZXYiIGFyZ3VtZW50IGlzbid0IHVzZWQuICovCi0JcmMgPSByaW9jb250cm9sKHAsIDAsIGNtZCwgKHZvaWQgKikgYXJnLCBjYXBhYmxlKENBUF9TWVNfQURNSU4pKTsKKwlyYyA9IHJpb2NvbnRyb2wocCwgMCwgY21kLCBhcmcsIGNhcGFibGUoQ0FQX1NZU19BRE1JTikpOwogCiAJZnVuY19leGl0KCk7CiAJcmV0dXJuIHJjOwpAQCAtNTgzLDYgKzU4Myw3IEBACiAKIHN0YXRpYyBpbnQgcmlvX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcmM7CiAJc3RydWN0IFBvcnQgKlBvcnRQOwogCWludCBpdmFsOwpAQCAtNTk0LDE0ICs1OTUsMTQgQEAKIAlyYyA9IDA7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFRJT0NTU09GVENBUjoKLQkJaWYgKChyYyA9IGdldF91c2VyKGl2YWwsICh1bnNpZ25lZCBpbnQgKikgYXJnKSkgPT0gMCkgeworCQlpZiAoKHJjID0gZ2V0X3VzZXIoaXZhbCwgKHVuc2lnbmVkIF9fdXNlciAqKSBhcmdwKSkgPT0gMCkgewogCQkJdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIH5DTE9DQUwpIHwgKGl2YWwgPyBDTE9DQUwgOiAwKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFRJT0NHU0VSSUFMOgogCQlyYyA9IC1FRkFVTFQ7Ci0JCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAodm9pZCAqKSBhcmcsIHNpemVvZihzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkpKQotCQkJcmMgPSBnc19nZXRzZXJpYWwoJlBvcnRQLT5ncywgKHN0cnVjdCBzZXJpYWxfc3RydWN0ICopIGFyZyk7CisJCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBhcmdwLCBzaXplb2Yoc3RydWN0IHNlcmlhbF9zdHJ1Y3QpKSkKKwkJCXJjID0gZ3NfZ2V0c2VyaWFsKCZQb3J0UC0+Z3MsIGFyZ3ApOwogCQlicmVhazsKIAljYXNlIFRDU0JSSzoKIAkJaWYgKFBvcnRQLT5TdGF0ZSAmIFJJT19ERUxFVEVEKSB7CkBAIC02MzEsOCArNjMyLDggQEAKIAkJYnJlYWs7CiAJY2FzZSBUSU9DU1NFUklBTDoKIAkJcmMgPSAtRUZBVUxUOwotCQlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCAodm9pZCAqKSBhcmcsIHNpemVvZihzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkpKQotCQkJcmMgPSBnc19zZXRzZXJpYWwoJlBvcnRQLT5ncywgKHN0cnVjdCBzZXJpYWxfc3RydWN0ICopIGFyZyk7CisJCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGFyZ3AsIHNpemVvZihzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkpKQorCQkJcmMgPSBnc19zZXRzZXJpYWwoJlBvcnRQLT5ncywgYXJncCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJjID0gLUVOT0lPQ1RMQ01EOwpAQCAtOTE5LDcgKzkyMCw3IEBACiBzdGF0aWMgdm9pZCBmaXhfcmlvX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAl1bnNpZ25lZCBsb25nIGh3YmFzZTsKLQl1bnNpZ25lZCBjaGFyICpyZWJhc2U7CisJdW5zaWduZWQgY2hhciBfX2lvbWVtICpyZWJhc2U7CiAJdW5zaWduZWQgaW50IHQ7CiAKICNkZWZpbmUgQ05UUkxfUkVHX09GRlNFVCAgICAgICAgMHg1MApAQCAtOTk5LDcgKzEwMDAsNyBAQAogCQlpZiAoKCgxIDw8IGhwLT5JdmVjKSAmIHJpb19pcnFtYXNrKSA9PSAwKQogCQkJaHAtPkl2ZWMgPSAwOwogCQlocC0+Q2FkZHIgPSBpb3JlbWFwKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5QYWRkclAsIFJJT19XSU5ET1dfTEVOKTsKLQkJaHAtPkNhcmRQID0gKHN0cnVjdCBEcFJhbSAqKSBocC0+Q2FkZHI7CisJCWhwLT5DYXJkUCA9IChzdHJ1Y3QgRHBSYW0gX19pb21lbSAqKSBocC0+Q2FkZHI7CiAJCWhwLT5UeXBlID0gUklPX1BDSTsKIAkJaHAtPkNvcHkgPSByaW9fY29weV90b19jYXJkOwogCQlocC0+TW9kZSA9IFJJT19QQ0lfQk9PVF9GUk9NX1JBTTsKQEAgLTEwMjEsNyArMTAyMiw3IEBACiAJCQlwLT5SSU9OdW1Ib3N0cysrOwogCQkJZm91bmQrKzsKIAkJfSBlbHNlIHsKLQkJCWlvdW5tYXAoKGNoYXIgKikgKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5DYWRkcikpOworCQkJaW91bm1hcChwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uQ2FkZHIpOwogCQl9CiAJfQogCkBAIC0xMDQ3LDcgKzEwNDgsNyBAQAogCQkJaHAtPkl2ZWMgPSAwOwogCQlocC0+SXZlYyB8PSAweDgwMDA7CS8qIE1hcmsgYXMgbm9uLXNoYXJhYmxlICovCiAJCWhwLT5DYWRkciA9IGlvcmVtYXAocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlBhZGRyUCwgUklPX1dJTkRPV19MRU4pOwotCQlocC0+Q2FyZFAgPSAoc3RydWN0IERwUmFtICopIGhwLT5DYWRkcjsKKwkJaHAtPkNhcmRQID0gKHN0cnVjdCBEcFJhbSBfX2lvbWVtICopIGhwLT5DYWRkcjsKIAkJaHAtPlR5cGUgPSBSSU9fUENJOwogCQlocC0+Q29weSA9IHJpb19jb3B5X3RvX2NhcmQ7CiAJCWhwLT5Nb2RlID0gUklPX1BDSV9CT09UX0ZST01fUkFNOwpAQCAtMTA3MCw3ICsxMDcxLDcgQEAKIAkJCXAtPlJJT051bUhvc3RzKys7CiAJCQlmb3VuZCsrOwogCQl9IGVsc2UgewotCQkJaW91bm1hcCgoY2hhciAqKSAocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkNhZGRyKSk7CisJCQlpb3VubWFwKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5DYWRkcik7CiAJCX0KICNlbHNlCiAJCXByaW50ayhLRVJOX0VSUiAiRm91bmQgYW4gb2xkZXIgUklPIFBDSSBjYXJkLCBidXQgdGhlIGRyaXZlciBpcyBub3QgIiAiY29tcGlsZWQgdG8gc3VwcG9ydCBpdC5cbiIpOwpAQCAtMTA4NSw3ICsxMDg2LDcgQEAKIAkJLyogVGhlcmUgd2FzIHNvbWV0aGluZyBhYm91dCB0aGUgSVJRcyBvZiB0aGVzZSBjYXJkcy4gJ0ZvcmdldCB3aGF0Li0tUkVXICovCiAJCWhwLT5JdmVjID0gMDsKIAkJaHAtPkNhZGRyID0gaW9yZW1hcChwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUGFkZHJQLCBSSU9fV0lORE9XX0xFTik7Ci0JCWhwLT5DYXJkUCA9IChzdHJ1Y3QgRHBSYW0gKikgaHAtPkNhZGRyOworCQlocC0+Q2FyZFAgPSAoc3RydWN0IERwUmFtIF9faW9tZW0gKikgaHAtPkNhZGRyOwogCQlocC0+VHlwZSA9IFJJT19BVDsKIAkJaHAtPkNvcHkgPSByaW9fY29weV90b19jYXJkOwkvKiBBVCBjYXJkIFBDST8/Pz8gLSBQVkRMCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLS0gWUVTISB0aGlzIGlzIG5vdyBhIG5vcm1hbCBjb3B5LiBPbmx5IHRoZQpAQCAtMTExMSw3ICsxMTEyLDcgQEAKIAkJCX0KIAogCQkJaWYgKCFva2JvYXJkKQotCQkJCWlvdW5tYXAoKGNoYXIgKikgKGhwLT5DYWRkcikpOworCQkJCWlvdW5tYXAoaHAtPkNhZGRyKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguaCBiL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmgKaW5kZXggNGNlNzdmYi4uNTViOWM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5oCkBAIC0xMzEsOSArMTMxLDkgQEAKIAogCiAjaWZkZWYgQ09ORklHX1JJT19PTERQQ0kKLXN0YXRpYyBpbmxpbmUgdm9pZCAqcmlvX21lbWNweV90b2lvKHZvaWQgKmR1bW15LCB2b2lkICpkZXN0LCB2b2lkICpzb3VyY2UsIGludCBuKQorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKnJpb19tZW1jcHlfdG9pbyh2b2lkIF9faW9tZW0gKmR1bW15LCB2b2lkIF9faW9tZW0gKmRlc3QsIHZvaWQgKnNvdXJjZSwgaW50IG4pCiB7Ci0JY2hhciAqZHN0ID0gZGVzdDsKKwljaGFyIF9faW9tZW0gKmRzdCA9IGRlc3Q7CiAJY2hhciAqc3JjID0gc291cmNlOwogCiAJd2hpbGUgKG4tLSkgewpAQCAtMTQ0LDExICsxNDQsMjIgQEAKIAlyZXR1cm4gZGVzdDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKnJpb19jb3B5X3RvaW8odm9pZCBfX2lvbWVtICpkZXN0LCB2b2lkICpzb3VyY2UsIGludCBuKQoreworCWNoYXIgX19pb21lbSAqZHN0ID0gZGVzdDsKKwljaGFyICpzcmMgPSBzb3VyY2U7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqcmlvX21lbWNweV9mcm9taW8odm9pZCAqZGVzdCwgdm9pZCAqc291cmNlLCBpbnQgbikKKwl3aGlsZSAobi0tKQorCQl3cml0ZWIoKnNyYysrLCBkc3QrKyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgKnJpb19tZW1jcHlfZnJvbWlvKHZvaWQgKmRlc3QsIHZvaWQgX19pb21lbSAqc291cmNlLCBpbnQgbikKIHsKIAljaGFyICpkc3QgPSBkZXN0OwotCWNoYXIgKnNyYyA9IHNvdXJjZTsKKwljaGFyIF9faW9tZW0gKnNyYyA9IHNvdXJjZTsKIAogCXdoaWxlIChuLS0pCiAJCSpkc3QrKyA9IHJlYWRiKHNyYysrKTsKQEAgLTE1OCw2ICsxNjksNyBAQAogCiAjZWxzZQogI2RlZmluZSByaW9fbWVtY3B5X3RvaW8oZHVtbXksZGVzdCxzb3VyY2UsbikgICBtZW1jcHlfdG9pbyhkZXN0LCBzb3VyY2UsIG4pCisjZGVmaW5lIHJpb19jb3B5X3RvaW8gICAJCSAgICAgICBtZW1jcHlfdG9pbwogI2RlZmluZSByaW9fbWVtY3B5X2Zyb21pbyAgICAgICAgICAgICAgICAgICAgICBtZW1jcHlfZnJvbWlvCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9ib290LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2Jvb3QuYwppbmRleCAyOTAxNDNhLi5lY2EyYjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2Jvb3QuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2Jvb3QuYwpAQCAtNzEsNyArNzEsNyBAQAogI2luY2x1ZGUgImNtZGJsay5oIgogI2luY2x1ZGUgInJvdXRlLmgiCiAKLXN0YXRpYyBpbnQgUklPQm9vdENvbXBsZXRlKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IEhvc3QgKkhvc3RQLCB1bnNpZ25lZCBpbnQgUnVwLCBzdHJ1Y3QgUGt0Q21kICpQa3RDbWRQKTsKK3N0YXRpYyBpbnQgUklPQm9vdENvbXBsZXRlKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IEhvc3QgKkhvc3RQLCB1bnNpZ25lZCBpbnQgUnVwLCBzdHJ1Y3QgUGt0Q21kIF9faW9tZW0gKlBrdENtZFApOwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBSSU9BdFZlYzJDdHJsW10gPSB7CiAJLyogMCAqLyBJTlRFUlJVUFRfRElTQUJMRSwKQEAgLTIwNCwxMyArMjA0LDEzIEBACiBpbnQgUklPQm9vdENvZGVIT1NUKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IERvd25Mb2FkICpyYnApCiB7CiAJc3RydWN0IEhvc3QgKkhvc3RQOwotCXU4ICpDYWQ7Ci0JUEFSTV9NQVAgKlBhcm1NYXBQOworCXU4IF9faW9tZW0gKkNhZDsKKwlQQVJNX01BUCBfX2lvbWVtICpQYXJtTWFwUDsKIAlpbnQgUnVwTjsKIAlpbnQgUG9ydE47CiAJdW5zaWduZWQgaW50IGhvc3Q7Ci0JdTggKlN0YXJ0UDsKLQl1OCAqRGVzdFA7CisJdTggX19pb21lbSAqU3RhcnRQOworCXU4IF9faW9tZW0gKkRlc3RQOwogCWludCB3YWl0X2NvdW50OwogCXUxNiBPbGRQYXJtTWFwOwogCXUxNiBvZmZzZXQ7CQkvKiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYSB1MTYgKi8KQEAgLTI2Miw3ICsyNjIsNyBAQAogCQkgKiogRW5zdXJlIHRoYXQgdGhlIGhvc3QgcmVhbGx5IGlzIHN0b3BwZWQuCiAJCSAqKiBEaXNhYmxlIGl0J3MgZXh0ZXJuYWwgYnVzICYgdHdhbmcgaXRzIHJlc2V0IGxpbmUuCiAJCSAqLwotCQlSSU9Ib3N0UmVzZXQoSG9zdFAtPlR5cGUsIChzdHJ1Y3QgRHBSYW0gKikgSG9zdFAtPkNhcmRQLCBIb3N0UC0+U2xvdCk7CisJCVJJT0hvc3RSZXNldChIb3N0UC0+VHlwZSwgSG9zdFAtPkNhcmRQLCBIb3N0UC0+U2xvdCk7CiAKIAkJLyoKIAkJICoqIENvcHkgdGhlIGRhdGEgZGlyZWN0bHkgZnJvbSB1c2VyIHNwYWNlIHRvIHRoZSBTUkFNLgpAQCAtMjgwLDcgKzI4MCw3IEBACiAJCQlmdW5jX2V4aXQoKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihyYnAtPkRhdGFQLCBEb3duQ29kZSwgcmJwLT5Db3VudCkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKERvd25Db2RlLCByYnAtPkRhdGFQLCByYnAtPkNvdW50KSkgewogCQkJa2ZyZWUoRG93bkNvZGUpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJZnVuY19leGl0KCk7CkBAIC0zNjYsNyArMzY2LDcgQEAKIAkJICoqIGEgc2hvcnQgYnJhbmNoIHRvIDB4N0ZGOCwgd2hlcmUgYSBsb25nIGJyYW5jaCBpcyBjb2RlZC4KIAkJICovCiAKLQkJRGVzdFAgPSAodTggKikgJkNhZFsweDdGRjhdOwkvKiA8PDwtLS0tIFJFQUQgVEhFIEFCT1ZFIENPTU1FTlRTICovCisJCURlc3RQID0gJkNhZFsweDdGRjhdOwkvKiA8PDwtLS0tIFJFQUQgVEhFIEFCT1ZFIENPTU1FTlRTICovCiAKICNkZWZpbmUJTkZJWChOKQkoMHg2MCB8IChOKSkJLyogLk8gID0gKH4oLk8gKyBOKSk8PDQgKi8KICNkZWZpbmUJUEZJWChOKQkoMHgyMCB8IChOKSkJLyogLk8gID0gICAoLk8gKyBOKTw8NCAgKi8KQEAgLTQzOCw3ICs0MzgsNyBAQAogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJSSU8gTWVzZyBSdW4gRmFpbFxuIik7CiAJCQlIb3N0UC0+RmxhZ3MgJj0gflJVTl9TVEFURTsKIAkJCUhvc3RQLT5GbGFncyB8PSBSQ19TVFVGRkVEOwotCQkJUklPSG9zdFJlc2V0KCBIb3N0UC0+VHlwZSwgKHN0cnVjdCBEcFJhbSAqKUhvc3RQLT5DYXJkUCwgSG9zdFAtPlNsb3QgKTsKKwkJCVJJT0hvc3RSZXNldCggSG9zdFAtPlR5cGUsIEhvc3RQLT5DYXJkUCwgSG9zdFAtPlNsb3QgKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTQ1Myw5ICs0NTMsOSBAQAogCQkvKgogCQkgKiogR3JhYiBhIDMyIGJpdCBwb2ludGVyIHRvIHRoZSBwYXJtbWFwIHN0cnVjdHVyZQogCQkgKi8KLQkJUGFybU1hcFAgPSAoUEFSTV9NQVAgKikgUklPX1BUUihDYWQsIHJlYWR3KCZIb3N0UC0+X19QYXJtTWFwUikpOworCQlQYXJtTWFwUCA9IChQQVJNX01BUCBfX2lvbWVtICopIFJJT19QVFIoQ2FkLCByZWFkdygmSG9zdFAtPl9fUGFybU1hcFIpKTsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJQYXJtTWFwUCA6ICVwXG4iLCBQYXJtTWFwUCk7Ci0JCVBhcm1NYXBQID0gKFBBUk1fTUFQICopICgodW5zaWduZWQgbG9uZykgQ2FkICsgcmVhZHcoJkhvc3RQLT5fX1Bhcm1NYXBSKSk7CisJCVBhcm1NYXBQID0gKFBBUk1fTUFQIF9faW9tZW0gKikoQ2FkICsgcmVhZHcoJkhvc3RQLT5fX1Bhcm1NYXBSKSk7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiUGFybU1hcFAgOiAlcFxuIiwgUGFybU1hcFApOwogCiAJCS8qCkBAIC00NjgsNyArNDY4LDcgQEAKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiTGlua3MgPSAweCV4XG4iLCByZWFkdygmUGFybU1hcFAtPmxpbmtzKSk7CiAJCQlIb3N0UC0+RmxhZ3MgJj0gflJVTl9TVEFURTsKIAkJCUhvc3RQLT5GbGFncyB8PSBSQ19TVFVGRkVEOwotCQkJUklPSG9zdFJlc2V0KCBIb3N0UC0+VHlwZSwgKHN0cnVjdCBEcFJhbSAqKUhvc3RQLT5DYXJkUCwgSG9zdFAtPlNsb3QgKTsKKwkJCVJJT0hvc3RSZXNldCggSG9zdFAtPlR5cGUsIEhvc3RQLT5DYXJkUCwgSG9zdFAtPlNsb3QgKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJUaW1lZG91dCB3YWl0aW5nIGZvciBpbml0X2RvbmVcbiIpOwogCQkJSG9zdFAtPkZsYWdzICY9IH5SVU5fU1RBVEU7CiAJCQlIb3N0UC0+RmxhZ3MgfD0gUkNfU1RVRkZFRDsKLQkJCVJJT0hvc3RSZXNldCggSG9zdFAtPlR5cGUsIChzdHJ1Y3QgRHBSYW0gKilIb3N0UC0+Q2FyZFAsIEhvc3RQLT5TbG90ICk7CisJCQlSSU9Ib3N0UmVzZXQoIEhvc3RQLT5UeXBlLCBIb3N0UC0+Q2FyZFAsIEhvc3RQLT5TbG90ICk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC01MTIsMTAgKzUxMiwxMCBAQAogCQkgKiogMzIgYml0IHBvaW50ZXJzIGZvciB0aGUgZHJpdmVyIGluIGlvcmVtYXAgc3BhY2UuCiAJCSAqLwogCQlIb3N0UC0+UGFybU1hcFAgPSBQYXJtTWFwUDsKLQkJSG9zdFAtPlBoYlAgPSAoc3RydWN0IFBIQiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBhcm1NYXBQLT5waGJfcHRyKSk7Ci0JCUhvc3RQLT5SdXBQID0gKHN0cnVjdCBSVVAgKikgUklPX1BUUihDYWQsIHJlYWR3KCZQYXJtTWFwUC0+cnVwcykpOwotCQlIb3N0UC0+UGhiTnVtUCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBhcm1NYXBQLT5waGJfbnVtX3B0cikpOwotCQlIb3N0UC0+TGlua1N0clAgPSAoc3RydWN0IExQQiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBhcm1NYXBQLT5saW5rX3N0cl9wdHIpKTsKKwkJSG9zdFAtPlBoYlAgPSAoc3RydWN0IFBIQiBfX2lvbWVtICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGFybU1hcFAtPnBoYl9wdHIpKTsKKwkJSG9zdFAtPlJ1cFAgPSAoc3RydWN0IFJVUCBfX2lvbWVtICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGFybU1hcFAtPnJ1cHMpKTsKKwkJSG9zdFAtPlBoYk51bVAgPSAodW5zaWduZWQgc2hvcnQgX19pb21lbSAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBhcm1NYXBQLT5waGJfbnVtX3B0cikpOworCQlIb3N0UC0+TGlua1N0clAgPSAoc3RydWN0IExQQiBfX2lvbWVtICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGFybU1hcFAtPmxpbmtfc3RyX3B0cikpOwogCiAJCS8qCiAJCSAqKiBwb2ludCB0aGUgVW5peFJ1cHMgYXQgdGhlIHJlYWwgUnVwcwpAQCAtNTQwLDcgKzU0MCw3IEBACiAJCWZvciAoUG9ydE4gPSBwLT5SSU9GaXJzdFBvcnRzTWFwcGVkOyBQb3J0TiA8IHAtPlJJT0xhc3RQb3J0c01hcHBlZCArIFBPUlRTX1BFUl9SVEE7IFBvcnROKyspIHsKIAkJCWlmIChwLT5SSU9Qb3J0cFtQb3J0Tl0tPkhvc3RQID09IEhvc3RQKSB7CiAJCQkJc3RydWN0IFBvcnQgKlBvcnRQID0gcC0+UklPUG9ydHBbUG9ydE5dOwotCQkJCXN0cnVjdCBQSEIgKlBoYlA7CisJCQkJc3RydWN0IFBIQiBfX2lvbWVtICpQaGJQOwogCQkJCS8qIGludCBvbGRzcGw7ICovCiAKIAkJCQlpZiAoIVBvcnRQLT5NYXBwZWQpCkBAIC01NTEsMTIgKzU1MSwxMiBAQAogCiAJCQkJUG9ydFAtPlBoYlAgPSBQaGJQOwogCi0JCQkJUG9ydFAtPlR4QWRkID0gKHUxNiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnR4X2FkZCkpOwotCQkJCVBvcnRQLT5UeFN0YXJ0ID0gKHUxNiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnR4X3N0YXJ0KSk7Ci0JCQkJUG9ydFAtPlR4RW5kID0gKHUxNiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnR4X2VuZCkpOwotCQkJCVBvcnRQLT5SeFJlbW92ZSA9ICh1MTYgKikgUklPX1BUUihDYWQsIHJlYWR3KCZQaGJQLT5yeF9yZW1vdmUpKTsKLQkJCQlQb3J0UC0+UnhTdGFydCA9ICh1MTYgKikgUklPX1BUUihDYWQsIHJlYWR3KCZQaGJQLT5yeF9zdGFydCkpOwotCQkJCVBvcnRQLT5SeEVuZCA9ICh1MTYgKikgUklPX1BUUihDYWQsIHJlYWR3KCZQaGJQLT5yeF9lbmQpKTsKKwkJCQlQb3J0UC0+VHhBZGQgPSAodTE2IF9faW9tZW0gKikgUklPX1BUUihDYWQsIHJlYWR3KCZQaGJQLT50eF9hZGQpKTsKKwkJCQlQb3J0UC0+VHhTdGFydCA9ICh1MTYgX19pb21lbSAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnR4X3N0YXJ0KSk7CisJCQkJUG9ydFAtPlR4RW5kID0gKHUxNiBfX2lvbWVtICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGhiUC0+dHhfZW5kKSk7CisJCQkJUG9ydFAtPlJ4UmVtb3ZlID0gKHUxNiBfX2lvbWVtICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGhiUC0+cnhfcmVtb3ZlKSk7CisJCQkJUG9ydFAtPlJ4U3RhcnQgPSAodTE2IF9faW9tZW0gKikgUklPX1BUUihDYWQsIHJlYWR3KCZQaGJQLT5yeF9zdGFydCkpOworCQkJCVBvcnRQLT5SeEVuZCA9ICh1MTYgX19pb21lbSAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnJ4X2VuZCkpOwogCiAJCQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7CiAJCQkJLyoKQEAgLTYwMSw5ICs2MDEsOSBAQAogICoJcmV0dXJuIDEuIElmIHdlIGhhdmVudCwgdGhlbiByZXR1cm4gMC4KICAqLwogCi1pbnQgUklPQm9vdFJ1cChzdHJ1Y3QgcmlvX2luZm8gKnAsIHVuc2lnbmVkIGludCBSdXAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgc3RydWN0IFBLVCAqUGFja2V0UCkKK2ludCBSSU9Cb290UnVwKHN0cnVjdCByaW9faW5mbyAqcCwgdW5zaWduZWQgaW50IFJ1cCwgc3RydWN0IEhvc3QgKkhvc3RQLCBzdHJ1Y3QgUEtUIF9faW9tZW0gKlBhY2tldFApCiB7Ci0Jc3RydWN0IFBrdENtZCAqUGt0Q21kUCA9IChzdHJ1Y3QgUGt0Q21kICopIFBhY2tldFAtPmRhdGE7CisJc3RydWN0IFBrdENtZCBfX2lvbWVtICpQa3RDbWRQID0gKHN0cnVjdCBQa3RDbWQgX19pb21lbSAqKSBQYWNrZXRQLT5kYXRhOwogCXN0cnVjdCBQa3RDbWRfTSAqUGt0UmVwbHlQOwogCXN0cnVjdCBDbWRCbGsgKkNtZEJsa1A7CiAJdW5zaWduZWQgaW50IHNlcXVlbmNlOwpAQCAtNzIyLDcgKzcyMiw3IEBACiAgKglSdGFVbmlxIGlzIHRoZSBib290ZWQgUlRBLgogICovCiAKLXN0YXRpYyBpbnQgUklPQm9vdENvbXBsZXRlKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IEhvc3QgKkhvc3RQLCB1bnNpZ25lZCBpbnQgUnVwLCBzdHJ1Y3QgUGt0Q21kICpQa3RDbWRQKQorc3RhdGljIGludCBSSU9Cb290Q29tcGxldGUoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHVuc2lnbmVkIGludCBSdXAsIHN0cnVjdCBQa3RDbWQgX19pb21lbSAqUGt0Q21kUCkKIHsKIAlzdHJ1Y3QgTWFwICpNYXBQID0gTlVMTDsKIAlzdHJ1Y3QgTWFwICpNYXBQMiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYwppbmRleCBlNmQyYjE0Li40ZGY2YWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKQEAgLTE4MCw3ICsxODAsNyBAQAogfQogCiAKLWludCBSSU9JZGVudGlmeVJ0YShzdHJ1Y3QgcmlvX2luZm8gKnAsIHZvaWQgKiBhcmcpCitpbnQgUklPSWRlbnRpZnlSdGEoc3RydWN0IHJpb19pbmZvICpwLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKIAl1bnNpZ25lZCBpbnQgSG9zdDsKIApAQCAtMjQ1LDcgKzI0NSw3IEBACiB9CiAKIAotaW50IFJJT0tpbGxOZWlnaGJvdXIoc3RydWN0IHJpb19pbmZvICpwLCB2b2lkICogYXJnKQoraW50IFJJT0tpbGxOZWlnaGJvdXIoc3RydWN0IHJpb19pbmZvICpwLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKIAl1aW50IEhvc3Q7CiAJdWludCBJRDsKQEAgLTM3MCw5ICszNzAsOSBAQAogLyoKICoqIEluY29taW5nIGNvbW1hbmQgb24gdGhlIENPTU1BTkRfUlVQIHRvIGJlIHByb2Nlc3NlZC4KICovCi1zdGF0aWMgaW50IFJJT0NvbW1hbmRSdXAoc3RydWN0IHJpb19pbmZvICpwLCB1aW50IFJ1cCwgc3RydWN0IEhvc3QgKkhvc3RQLCBzdHJ1Y3QgUEtUICogUGFja2V0UCkKK3N0YXRpYyBpbnQgUklPQ29tbWFuZFJ1cChzdHJ1Y3QgcmlvX2luZm8gKnAsIHVpbnQgUnVwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHN0cnVjdCBQS1QgX19pb21lbSAqUGFja2V0UCkKIHsKLQlzdHJ1Y3QgUGt0Q21kICpQa3RDbWRQID0gKHN0cnVjdCBQa3RDbWQgKikgUGFja2V0UC0+ZGF0YTsKKwlzdHJ1Y3QgUGt0Q21kIF9faW9tZW0gKlBrdENtZFAgPSAoc3RydWN0IFBrdENtZCBfX2lvbWVtICopUGFja2V0UC0+ZGF0YTsKIAlzdHJ1Y3QgUG9ydCAqUG9ydFA7CiAJc3RydWN0IFVuaXhSdXAgKlVuaXhSdXBQOwogCXVuc2lnbmVkIHNob3J0IFN5c1BvcnQ7CkBAIC00MDcsMTIgKzQwNywxMiBAQAogCQl9IGVsc2UKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJDT05UUk9MIGluZm9ybWF0aW9uOiBUaGlzIGlzIHRoZSBSVVAgZm9yIGxpbmsgYGAlYycnIG9mIGhvc3QgYGAlcycnXG4iLCAoJ0EnICsgUnVwIC0gTUFYX1JVUCksIEhvc3RQLT5OYW1lKTsKIAotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUEFDS0VUIGluZm9ybWF0aW9uOiBEZXN0aW5hdGlvbiAweCV4OjB4JXhcbiIsIFBhY2tldFAtPmRlc3RfdW5pdCwgUGFja2V0UC0+ZGVzdF9wb3J0KTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogU291cmNlCSAgMHgleDoweCV4XG4iLCBQYWNrZXRQLT5zcmNfdW5pdCwgUGFja2V0UC0+c3JjX3BvcnQpOwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUEFDS0VUIGluZm9ybWF0aW9uOiBMZW5ndGgJICAweCV4ICglZClcbiIsIFBhY2tldFAtPmxlbiwgUGFja2V0UC0+bGVuKTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogQ29udHJvbAkgMHgleCAoJWQpXG4iLCBQYWNrZXRQLT5jb250cm9sLCBQYWNrZXRQLT5jb250cm9sKTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogQ2hlY2sJICAgMHgleCAoJWQpXG4iLCBQYWNrZXRQLT5jc3VtLCBQYWNrZXRQLT5jc3VtKTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNPTU1BTkQgaW5mb3JtYXRpb246IEhvc3QgUG9ydCBOdW1iZXIgMHgleCwgIiAiQ29tbWFuZCBDb2RlIDB4JXhcbiIsIFBrdENtZFAtPlBoYk51bSwgUGt0Q21kUC0+Q29tbWFuZCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJQQUNLRVQgaW5mb3JtYXRpb246IERlc3RpbmF0aW9uIDB4JXg6MHgleFxuIiwgcmVhZGIoJlBhY2tldFAtPmRlc3RfdW5pdCksIHJlYWRiKCZQYWNrZXRQLT5kZXN0X3BvcnQpKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogU291cmNlCSAgMHgleDoweCV4XG4iLCByZWFkYigmUGFja2V0UC0+c3JjX3VuaXQpLCByZWFkYigmUGFja2V0UC0+c3JjX3BvcnQpKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogTGVuZ3RoCSAgMHgleCAoJWQpXG4iLCByZWFkYigmUGFja2V0UC0+bGVuKSwgcmVhZGIoJlBhY2tldFAtPmxlbikpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUEFDS0VUIGluZm9ybWF0aW9uOiBDb250cm9sCSAweCV4ICglZClcbiIsIHJlYWRiKCZQYWNrZXRQLT5jb250cm9sKSwgcmVhZGIoJlBhY2tldFAtPmNvbnRyb2wpKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogQ2hlY2sJICAgMHgleCAoJWQpXG4iLCByZWFkdygmUGFja2V0UC0+Y3N1bSksIHJlYWR3KCZQYWNrZXRQLT5jc3VtKSk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJDT01NQU5EIGluZm9ybWF0aW9uOiBIb3N0IFBvcnQgTnVtYmVyIDB4JXgsICIgIkNvbW1hbmQgQ29kZSAweCV4XG4iLCByZWFkYigmUGt0Q21kUC0+UGhiTnVtKSwgcmVhZGIoJlBrdENtZFAtPkNvbW1hbmQpKTsKIAkJcmV0dXJuIDE7CiAJfQogCVBvcnRQID0gcC0+UklPUG9ydHBbU3lzUG9ydF07CkBAIC02MDEsNyArNjAxLDcgQEAKIAkJLyoKIAkJICoqIFdoYW1teSEgYmxhdCB0aGF0IHBhY2shCiAJCSAqLwotCQlIb3N0UC0+Q29weSgoY2FkZHJfdCkgJiBDbWRCbGtQLT5QYWNrZXQsIFJJT19QVFIoSG9zdFAtPkNhZGRyLCBVbml4UnVwUC0+UnVwUC0+dHhwa3QpLCBzaXplb2Yoc3RydWN0IFBLVCkpOworCQlIb3N0UC0+Q29weSgmQ21kQmxrUC0+UGFja2V0LCBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlVuaXhSdXBQLT5SdXBQLT50eHBrdCkpLCBzaXplb2Yoc3RydWN0IFBLVCkpOwogCiAJCS8qCiAJCSAqKiBwbGFjZSBjb21tYW5kIHBhY2tldCBvbiB0aGUgcGVuZGluZyBwb3NpdGlvbi4KQEAgLTY1NSw3ICs2NTUsNyBAQAogewogCXN0cnVjdCBDbWRCbGsgKkNtZEJsa1A7CiAJc3RydWN0IFVuaXhSdXAgKlVuaXhSdXBQOwotCXN0cnVjdCBQS1QgKlBhY2tldFA7CisJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCXVuc2lnbmVkIHNob3J0IFJ1cDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC02NzYsNyArNjc2LDcgQEAKIAkJaWYgKHJlYWR3KCZVbml4UnVwUC0+UnVwUC0+cnhjb250cm9sKSAhPSBSWF9SVVBfSU5BQ1RJVkUpIHsKIAkJCWludCBGcmVlTWU7CiAKLQkJCVBhY2tldFAgPSAoc3RydWN0IFBLVCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlVuaXhSdXBQLT5SdXBQLT5yeHBrdCkpOworCQkJUGFja2V0UCA9IChzdHJ1Y3QgUEtUIF9faW9tZW0gKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZVbml4UnVwUC0+UnVwUC0+cnhwa3QpKTsKIAogCQkJc3dpdGNoIChyZWFkYigmUGFja2V0UC0+ZGVzdF9wb3J0KSkgewogCQkJY2FzZSBCT09UX1JVUDoKQEAgLTY5NCw5ICs2OTQsOSBAQAogCQkJCSAqLwogCQkJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZVbml4UnVwUC0+UnVwTG9jaywgZmxhZ3MpOwogCQkJCUZyZWVNZSA9IFJJT0NvbW1hbmRSdXAocCwgUnVwLCBIb3N0UCwgUGFja2V0UCk7Ci0JCQkJaWYgKFBhY2tldFAtPmRhdGFbNV0gPT0gTUVNRFVNUCkgewotCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiTWVtZHVtcCBmcm9tIDB4JXggY29tcGxldGVcbiIsICoodW5zaWduZWQgc2hvcnQgKikgJiAoUGFja2V0UC0+ZGF0YVs2XSkpOwotCQkJCQlIb3N0UC0+Q29weSgoY2FkZHJfdCkgJiAoUGFja2V0UC0+ZGF0YVs4XSksIChjYWRkcl90KSBwLT5SSU9NZW1EdW1wLCAzMik7CisJCQkJaWYgKHJlYWRiKCZQYWNrZXRQLT5kYXRhWzVdKSA9PSBNRU1EVU1QKSB7CisJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJNZW1kdW1wIGZyb20gMHgleCBjb21wbGV0ZVxuIiwgcmVhZHcoJihQYWNrZXRQLT5kYXRhWzZdKSkpOworCQkJCQlyaW9fbWVtY3B5X2Zyb21pbyhwLT5SSU9NZW1EdW1wLCAmKFBhY2tldFAtPmRhdGFbOF0pLCAzMik7CiAJCQkJfQogCQkJCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmVW5peFJ1cFAtPlJ1cExvY2ssIGZsYWdzKTsKIAkJCQlicmVhazsKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQkJCS8qCiAJCQkJICoqIFdoYW1teSEgYmxhdCB0aGF0IHBhY2shCiAJCQkJICovCi0JCQkJSG9zdFAtPkNvcHkoKGNhZGRyX3QpICYgQ21kQmxrUC0+UGFja2V0LCBSSU9fUFRSKEhvc3RQLT5DYWRkciwgVW5peFJ1cFAtPlJ1cFAtPnR4cGt0KSwgc2l6ZW9mKHN0cnVjdCBQS1QpKTsKKwkJCQlIb3N0UC0+Q29weSgmQ21kQmxrUC0+UGFja2V0LCBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlVuaXhSdXBQLT5SdXBQLT50eHBrdCkpLCBzaXplb2Yoc3RydWN0IFBLVCkpOwogCiAJCQkJLyoKIAkJCQkgKiogcmVtb3ZlIHRoZSBjb21tYW5kIGZyb20gdGhlIHJ1cCBjb21tYW5kIHF1ZXVlLi4uCkBAIC04MjQsNyArODI0LDcgQEAKIGludCBSSU9SRmx1c2hFbmFibGUodW5zaWduZWQgbG9uZyBpUG9ydFAsIHN0cnVjdCBDbWRCbGsgKkNtZEJsa1ApCiB7CiAJc3RydWN0IFBvcnQgKlBvcnRQID0gKHN0cnVjdCBQb3J0ICopIGlQb3J0UDsKLQlzdHJ1Y3QgUEtUICpQYWNrZXRQOworCXN0cnVjdCBQS1QgX19pb21lbSAqUGFja2V0UDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwppbmRleCA3NWIyNTU3Li4wNTJlODEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwpAQCAtODAsNyArODAsNyBAQAogc3RhdGljIHN0cnVjdCBMcGJSZXEgTHBiUmVxOwogc3RhdGljIHN0cnVjdCBSdXBSZXEgUnVwUmVxOwogc3RhdGljIHN0cnVjdCBQb3J0UmVxIFBvcnRSZXE7Ci1zdGF0aWMgc3RydWN0IEhvc3RSZXEgSG9zdFJlcTsKK3N0YXRpYyBzdHJ1Y3QgSG9zdFJlcSBIb3N0UmVxOwkvKiBvaCByZWFsbHk/ICBnbG9iYWw/ICBhbmQgbm8gbG9ja2luZz8gKi8KIHN0YXRpYyBzdHJ1Y3QgSG9zdERwUmFtIEhvc3REcFJhbTsKIHN0YXRpYyBzdHJ1Y3QgRGVidWdDdHJsIERlYnVnQ3RybDsKIHN0YXRpYyBzdHJ1Y3QgTWFwIE1hcEVudDsKQEAgLTEyNiwxMiArMTI2LDE5IEBACiAKICNkZWZpbmUgZHJ2X21ha2VkZXYobWFqLCBtaW4pICgoKCh1aW50KSBtYWogJiAweGZmKSA8PCA4KSB8ICgodWludCkgbWluICYgMHhmZikpCiAKLWludCByaW9jb250cm9sKHAsIGRldiwgY21kLCBhcmcsIHN1KQotc3RydWN0IHJpb19pbmZvICpwOwotZGV2X3QgZGV2OwotaW50IGNtZDsKLWNhZGRyX3QgYXJnOwotaW50IHN1Oworc3RhdGljIGludCBjb3B5X2Zyb21faW8odm9pZCBfX3VzZXIgKnRvLCB2b2lkIF9faW9tZW0gKmZyb20sIHNpemVfdCBzaXplKQoreworCXZvaWQgKmJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaW50IHJlcyA9IC1FTk9NRU07CisJaWYgKGJ1ZikgeworCQlyaW9fbWVtY3B5X2Zyb21pbyhidWYsIGZyb20sIHNpemUpOworCQlyZXMgPSBjb3B5X3RvX3VzZXIodG8sIGJ1Ziwgc2l6ZSk7CisJCWtmcmVlKGJ1Zik7CisJfQorCXJldHVybiByZXM7Cit9CisKK2ludCByaW9jb250cm9sKHN0cnVjdCByaW9faW5mbyAqcCwgZGV2X3QgZGV2LCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywgaW50IHN1KQogewogCXVpbnQgSG9zdDsJCS8qIGxlYXZlIG1lIHVuc2lnbmVkISAqLwogCXVpbnQgcG9ydDsJCS8qIGFuZCBtZSEgKi8KQEAgLTEzOSw5ICsxNDYsMTAgQEAKIAl1c2hvcnQgbG9vcDsKIAlpbnQgRW50cnk7CiAJc3RydWN0IFBvcnQgKlBvcnRQOwotCXN0cnVjdCBQS1QgKlBhY2tldFA7CisJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCWludCByZXR2YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKIAlmdW5jX2VudGVyKCk7CiAKQEAgLTE0OSw3ICsxNTcsNyBAQAogCUhvc3QgPSAwOwogCVBvcnRQID0gTlVMTDsKIAotCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiY29udHJvbCBpb2N0bCBjbWQ6IDB4JXggYXJnOiAlcFxuIiwgY21kLCBhcmcpOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiY29udHJvbCBpb2N0bCBjbWQ6IDB4JXggYXJnOiAlcFxuIiwgY21kLCBhcmdwKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJCS8qCkBAIC0xNjAsMTEgKzE2OCwxMSBAQAogCQkgKiogb3RoZXJ3aXNlIGp1c3QgdGhlIHNwZWNpZmllZCBob3N0IGNhcmQgd2lsbCBiZSBjaGFuZ2VkLgogCQkgKi8KIAljYXNlIFJJT19TRVRfVElNRVI6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFVF9USU1FUiB0byAlbGRtc1xuIiwgKHVuc2lnbmVkIGxvbmcpYXJnKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fU0VUX1RJTUVSIHRvICVsZG1zXG4iLCBhcmcpOwogCQl7CiAJCQlpbnQgaG9zdCwgdmFsdWU7Ci0JCQlob3N0ID0gKCh1bnNpZ25lZCBsb25nKSBhcmcgPj4gMTYpICYgMHgwMDAwRkZGRjsKLQkJCXZhbHVlID0gKHVuc2lnbmVkIGxvbmcpIGFyZyAmIDB4MDAwMGZmZmY7CisJCQlob3N0ID0gKGFyZyA+PiAxNikgJiAweDAwMDBGRkZGOworCQkJdmFsdWUgPSBhcmcgJiAweDAwMDBmZmZmOwogCQkJaWYgKGhvc3QgPT0gLTEpIHsKIAkJCQlmb3IgKGhvc3QgPSAwOyBob3N0IDwgcC0+UklPTnVtSG9zdHM7IGhvc3QrKykgewogCQkJCQlpZiAocC0+UklPSG9zdHNbaG9zdF0uRmxhZ3MgPT0gUkNfUlVOTklORykgewpAQCAtMTgzLDI2ICsxOTEsMjYgQEAKIAogCWNhc2UgUklPX0ZPQURfUlRBOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19GT0FEX1JUQVxuIik7Ci0JCXJldHVybiBSSU9Db21tYW5kUnRhKHAsICh1bnNpZ25lZCBsb25nKWFyZywgUklPRm9hZFJ0YSk7CisJCXJldHVybiBSSU9Db21tYW5kUnRhKHAsIGFyZywgUklPRm9hZFJ0YSk7CiAKIAljYXNlIFJJT19aT01CSUVfUlRBOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19aT01CSUVfUlRBXG4iKTsKLQkJcmV0dXJuIFJJT0NvbW1hbmRSdGEocCwgKHVuc2lnbmVkIGxvbmcpYXJnLCBSSU9ab21iaWVSdGEpOworCQlyZXR1cm4gUklPQ29tbWFuZFJ0YShwLCBhcmcsIFJJT1pvbWJpZVJ0YSk7CiAKIAljYXNlIFJJT19JREVOVElGWV9SVEE6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0lERU5USUZZX1JUQVxuIik7Ci0JCXJldHVybiBSSU9JZGVudGlmeVJ0YShwLCBhcmcpOworCQlyZXR1cm4gUklPSWRlbnRpZnlSdGEocCwgYXJncCk7CiAKIAljYXNlIFJJT19LSUxMX05FSUdIQk9VUjoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fS0lMTF9ORUlHSEJPVVJcbiIpOwotCQlyZXR1cm4gUklPS2lsbE5laWdoYm91cihwLCBhcmcpOworCQlyZXR1cm4gUklPS2lsbE5laWdoYm91cihwLCBhcmdwKTsKIAogCWNhc2UgU1BFQ0lBTF9SVVBfQ01EOgogCQl7CiAJCQlzdHJ1Y3QgQ21kQmxrICpDbWRCbGtQOwogCiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlNQRUNJQUxfUlVQX0NNRFxuIik7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJlNwZWNpYWxSdXBDbWQsIGFyZywgc2l6ZW9mKFNwZWNpYWxSdXBDbWQpKSkgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZTcGVjaWFsUnVwQ21kLCBhcmdwLCBzaXplb2YoU3BlY2lhbFJ1cENtZCkpKSB7CiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJTUEVDSUFMX1JVUF9DTUQgY29weSBmYWlsZWRcbiIpOwogCQkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIzOSw3ICsyNDcsNyBAQAogCQlpZiAoKHJldHZhbCA9IFJJT0FwZWwocCkpICE9IDApCiAJCQlyZXR1cm4gcmV0dmFsOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBwLT5SSU9Db25uZWN0VGFibGUsIFRPVEFMX01BUF9FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCBNYXApKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZ3AsIHAtPlJJT0Nvbm5lY3RUYWJsZSwgVE9UQUxfTUFQX0VOVFJJRVMgKiBzaXplb2Yoc3RydWN0IE1hcCkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19HRVRfVEFCTEUgY29weSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMjg0LDcgKzI5Miw3IEBACiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IE5PVF9TVVBFUl9VU0VSOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIoJnAtPlJJT0Nvbm5lY3RUYWJsZVswXSwgYXJnLCBUT1RBTF9NQVBfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgTWFwKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLT5SSU9Db25uZWN0VGFibGVbMF0sIGFyZ3AsIFRPVEFMX01BUF9FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCBNYXApKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUFVUX1RBQkxFIGNvcHkgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMzMwLDcgKzMzOCw3IEBACiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IE5PVF9TVVBFUl9VU0VSOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlpZiAoY29weV90b191c2VyKGFyZywgcC0+UklPQmluZFRhYiwgKHNpemVvZih1bG9uZykgKiBNQVhfUlRBX0JJTkRJTkdTKSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBwLT5SSU9CaW5kVGFiLCAoc2l6ZW9mKHVsb25nKSAqIE1BWF9SVEFfQklORElOR1MpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fR0VUX0JJTkRJTkdTIGNvcHkgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTM0OSw3ICszNTcsNyBAQAogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBOT1RfU1VQRVJfVVNFUjsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLT5SSU9CaW5kVGFiWzBdLCBhcmcsIChzaXplb2YodWxvbmcpICogTUFYX1JUQV9CSU5ESU5HUykpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcC0+UklPQmluZFRhYlswXSwgYXJncCwgKHNpemVvZih1bG9uZykgKiBNQVhfUlRBX0JJTkRJTkdTKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1BVVF9CSU5ESU5HUyBjb3B5IGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTM3MywxMiArMzgxLDEyIEBACiAJCQlmb3IgKEVudHJ5ID0gMDsgRW50cnkgPCBNQVhfUlRBX0JJTkRJTkdTOyBFbnRyeSsrKSB7CiAJCQkJaWYgKChFbXB0eVNsb3QgPT0gLTEpICYmIChwLT5SSU9CaW5kVGFiW0VudHJ5XSA9PSAwTCkpCiAJCQkJCUVtcHR5U2xvdCA9IEVudHJ5OwotCQkJCWVsc2UgaWYgKHAtPlJJT0JpbmRUYWJbRW50cnldID09IChsb25nKWFyZykgeworCQkJCWVsc2UgaWYgKHAtPlJJT0JpbmRUYWJbRW50cnldID09IGFyZykgewogCQkJCQkvKgogCQkJCQkgKiogQWxyZWFkeSBleGlzdHMgLSBkZWxldGUKIAkJCQkJICovCiAJCQkJCXAtPlJJT0JpbmRUYWJbRW50cnldID0gMEw7Ci0JCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUmVtb3ZpbmcgUnRhICVsZCBmcm9tIHAtPlJJT0JpbmRUYWJcbiIsICh1bnNpZ25lZCBsb25nKWFyZyk7CisJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUmVtb3ZpbmcgUnRhICVsZCBmcm9tIHAtPlJJT0JpbmRUYWJcbiIsIGFyZyk7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCX0KQEAgLTM4NiwxMCArMzk0LDEwIEBACiAJCQkgKiogRG9zZW4ndCBleGlzdCAtIGFkZAogCQkJICovCiAJCQlpZiAoRW1wdHlTbG90ICE9IC0xKSB7Ci0JCQkJcC0+UklPQmluZFRhYltFbXB0eVNsb3RdID0gKHVuc2lnbmVkIGxvbmcpYXJnOwotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQWRkaW5nIFJ0YSAlbHggdG8gcC0+UklPQmluZFRhYlxuIiwgKHVuc2lnbmVkIGxvbmcpIGFyZyk7CisJCQkJcC0+UklPQmluZFRhYltFbXB0eVNsb3RdID0gYXJnOworCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQWRkaW5nIFJ0YSAlbHggdG8gcC0+UklPQmluZFRhYlxuIiwgYXJnKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJwLT5SSU9CaW5kVGFiIGZ1bGwhIC0gUnRhICVseCBub3QgYWRkZWRcbiIsICh1bnNpZ25lZCBsb25nKSBhcmcpOworCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAicC0+UklPQmluZFRhYiBmdWxsISAtIFJ0YSAlbHggbm90IGFkZGVkXG4iLCBhcmcpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCQkJcmV0dXJuIDA7CkBAIC0zOTcsNyArNDA1LDcgQEAKIAogCWNhc2UgUklPX1JFU1VNRToKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUkVTVU1FXG4iKTsKLQkJcG9ydCA9ICh1bnNpZ25lZCBsb25nKSBhcmc7CisJCXBvcnQgPSBhcmc7CiAJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gNTExKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUkVTVU1FOiBCYWQgcG9ydCBudW1iZXIgJWRcbiIsIHBvcnQpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBQT1JUX05VTUJFUl9PVVRfT0ZfUkFOR0U7CkBAIC00MzMsNyArNDQxLDcgQEAKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gTk9UX1NVUEVSX1VTRVI7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmTWFwRW50LCBhcmcsIHNpemVvZihNYXBFbnQpKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJk1hcEVudCwgYXJncCwgc2l6ZW9mKE1hcEVudCkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkNvcHkgZnJvbSB1c2VyIHNwYWNlIGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQ0Nyw3ICs0NTUsNyBAQAogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBOT1RfU1VQRVJfVVNFUjsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZNYXBFbnQsIGFyZywgc2l6ZW9mKE1hcEVudCkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmTWFwRW50LCBhcmdwLCBzaXplb2YoTWFwRW50KSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQ29weSBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNDYxLDcgKzQ2OSw3IEBACiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IE5PVF9TVVBFUl9VU0VSOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIoJk1hcEVudCwgYXJnLCBzaXplb2YoTWFwRW50KSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZNYXBFbnQsIGFyZ3AsIHNpemVvZihNYXBFbnQpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJDb3B5IGZyb20gZGF0YSBzcGFjZSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00NjksMTQgKzQ3NywxNCBAQAogCQlyZXR1cm4gUklPRGVsZXRlUnRhKHAsICZNYXBFbnQpOwogCiAJY2FzZSBSSU9fUVVJQ0tfQ0hFQ0s6Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcC0+UklPUnRhRGlzQ29ucywgc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnAtPlJJT1J0YURpc0NvbnMsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAJCXJldHVybiAwOwogCiAJY2FzZSBSSU9fTEFTVF9FUlJPUjoKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZwLT5SSU9FcnJvciwgc2l6ZW9mKHN0cnVjdCBFcnJvcikpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwLT5SSU9FcnJvciwgc2l6ZW9mKHN0cnVjdCBFcnJvcikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwogCkBAIC00ODUsNyArNDkzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljYXNlIFJJT19HRVRfTU9EVFlQRToKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwb3J0LCBhcmcsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJnBvcnQsIGFyZ3AsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTUwNSw3ICs1MTMsNyBAQAogCQkgKiogUmV0dXJuIG1vZHVsZSB0eXBlIG9mIHBvcnQKIAkJICovCiAJCXBvcnQgPSBQb3J0UC0+SG9zdFAtPlVuaXhSdXBzW1BvcnRQLT5SdXBOdW1dLk1vZFR5cGVzOwotCQlpZiAoY29weV90b191c2VyKGFyZywgJnBvcnQsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwb3J0LCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNTIxLDcgKzUyOSw3IEBACiAKIAljYXNlIFJJT19TRVRVUF9QT1JUUzoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJTZXR1cCBwb3J0c1xuIik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFNldHVwLCBhcmcsIHNpemVvZihQb3J0U2V0dXApKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJlBvcnRTZXR1cCwgYXJncCwgc2l6ZW9mKFBvcnRTZXR1cCkpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkVGQVVMVCIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC01NTEsNyArNTU5LDcgQEAKIAogCWNhc2UgUklPX0dFVF9QT1JUX1NFVFVQOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkdldCBwb3J0IHNldHVwXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZQb3J0U2V0dXAsIGFyZywgc2l6ZW9mKFBvcnRTZXR1cCkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFNldHVwLCBhcmdwLCBzaXplb2YoUG9ydFNldHVwKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC01NzIsNyArNTgwLDcgQEAKIAkJUG9ydFNldHVwLlhwT25bTUFYX1hQX0NUUkxfTEVOIC0gMV0gPSAnXDAnOwogCQlQb3J0U2V0dXAuWHBPZmZbTUFYX1hQX0NUUkxfTEVOIC0gMV0gPSAnXDAnOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmUG9ydFNldHVwLCBzaXplb2YoUG9ydFNldHVwKSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmUG9ydFNldHVwLCBzaXplb2YoUG9ydFNldHVwKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNTgwLDcgKzU4OCw3IEBACiAKIAljYXNlIFJJT19HRVRfUE9SVF9QQVJBTVM6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiR2V0IHBvcnQgcGFyYW1zXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZQb3J0UGFyYW1zLCBhcmcsIHNpemVvZihzdHJ1Y3QgUG9ydFBhcmFtcykpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFBhcmFtcywgYXJncCwgc2l6ZW9mKHN0cnVjdCBQb3J0UGFyYW1zKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC01OTMsNyArNjAxLDcgQEAKIAkJUG9ydFBhcmFtcy5TdGF0ZSA9IFBvcnRQLT5TdGF0ZTsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJQb3J0ICVkXG4iLCBQb3J0UGFyYW1zLlBvcnQpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmUG9ydFBhcmFtcywgc2l6ZW9mKHN0cnVjdCBQb3J0UGFyYW1zKSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmUG9ydFBhcmFtcywgc2l6ZW9mKHN0cnVjdCBQb3J0UGFyYW1zKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNjAxLDcgKzYwOSw3IEBACiAKIAljYXNlIFJJT19HRVRfUE9SVF9UVFk6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiR2V0IHBvcnQgdHR5XG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZQb3J0VHR5LCBhcmcsIHNpemVvZihzdHJ1Y3QgUG9ydFR0eSkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFR0eSwgYXJncCwgc2l6ZW9mKHN0cnVjdCBQb3J0VHR5KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC02MTIsMTQgKzYyMCwxNCBAQAogCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUG9ydCAlZFxuIiwgUG9ydFR0eS5wb3J0KTsKIAkJUG9ydFAgPSAocC0+UklPUG9ydHBbUG9ydFR0eS5wb3J0XSk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmUG9ydFR0eSwgc2l6ZW9mKHN0cnVjdCBQb3J0VHR5KSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmUG9ydFR0eSwgc2l6ZW9mKHN0cnVjdCBQb3J0VHR5KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBSSU9fU0VUX1BPUlRfVFRZOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJlBvcnRUdHksIGFyZywgc2l6ZW9mKHN0cnVjdCBQb3J0VHR5KSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZQb3J0VHR5LCBhcmdwLCBzaXplb2Yoc3RydWN0IFBvcnRUdHkpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTYzNCw3ICs2NDIsNyBAQAogCiAJY2FzZSBSSU9fU0VUX1BPUlRfUEFSQU1TOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlNldCBwb3J0IHBhcmFtc1xuIik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFBhcmFtcywgYXJnLCBzaXplb2YoUG9ydFBhcmFtcykpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFBhcmFtcywgYXJncCwgc2l6ZW9mKFBvcnRQYXJhbXMpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTY1MCw3ICs2NTgsNyBAQAogCiAJY2FzZSBSSU9fR0VUX1BPUlRfU1RBVFM6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0dFVF9QT1JUX1NUQVRTXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwb3J0U3RhdHMsIGFyZywgc2l6ZW9mKHN0cnVjdCBwb3J0U3RhdHMpKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJnBvcnRTdGF0cywgYXJncCwgc2l6ZW9mKHN0cnVjdCBwb3J0U3RhdHMpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTY2NSwxNCArNjczLDE0IEBACiAJCXBvcnRTdGF0cy5vcGVucyA9IFBvcnRQLT5vcGVuczsKIAkJcG9ydFN0YXRzLmNsb3NlcyA9IFBvcnRQLT5jbG9zZXM7CiAJCXBvcnRTdGF0cy5pb2N0bHMgPSBQb3J0UC0+aW9jdGxzOwotCQlpZiAoY29weV90b191c2VyKGFyZywgJnBvcnRTdGF0cywgc2l6ZW9mKHN0cnVjdCBwb3J0U3RhdHMpKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwb3J0U3RhdHMsIHNpemVvZihzdHJ1Y3QgcG9ydFN0YXRzKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBSSU9fUkVTRVRfUE9SVF9TVEFUUzoKLQkJcG9ydCA9ICh1bnNpZ25lZCBsb25nKSBhcmc7CisJCXBvcnQgPSBhcmc7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1JFU0VUX1BPUlRfU1RBVFNcbiIpOwogCQlpZiAocG9ydCA+PSBSSU9fUE9SVFMpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gUE9SVF9OVU1CRVJfT1VUX09GX1JBTkdFOwpAQCAtNjkwLDcgKzY5OCw3IEBACiAKIAljYXNlIFJJT19HQVRIRVJfUE9SVF9TVEFUUzoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fR0FUSEVSX1BPUlRfU1RBVFNcbiIpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJnBvcnRTdGF0cywgYXJnLCBzaXplb2Yoc3RydWN0IHBvcnRTdGF0cykpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcG9ydFN0YXRzLCBhcmdwLCBzaXplb2Yoc3RydWN0IHBvcnRTdGF0cykpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNzA2LDcgKzcxNCw3IEBACiAKIAljYXNlIFJJT19SRUFEX0NPTkZJRzoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUkVBRF9DT05GSUdcbiIpOwotCQlpZiAoY29weV90b191c2VyKGFyZywgJnAtPlJJT0NvbmYsIHNpemVvZihzdHJ1Y3QgQ29uZikpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnAtPlJJT0NvbmYsIHNpemVvZihzdHJ1Y3QgQ29uZikpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTcxOCw3ICs3MjYsNyBAQAogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBOT1RfU1VQRVJfVVNFUjsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLT5SSU9Db25mLCBhcmcsIHNpemVvZihzdHJ1Y3QgQ29uZikpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcC0+UklPQ29uZiwgYXJncCwgc2l6ZW9mKHN0cnVjdCBDb25mKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC03NDYsNyArNzU0LDcgQEAKIAljYXNlIFJJT19TRVRERUJVRzoKIAljYXNlIFJJT19HRVRERUJVRzoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fU0VUREVCVUcvUklPX0dFVERFQlVHXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZEZWJ1Z0N0cmwsIGFyZywgc2l6ZW9mKERlYnVnQ3RybCkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmRGVidWdDdHJsLCBhcmdwLCBzaXplb2YoRGVidWdDdHJsKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC03NjMsNyArNzcxLDcgQEAKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkdldCBnbG9iYWwgZGVidWcgMHgleCB3YWl0IDB4JXhcbiIsIHAtPnJpb19kZWJ1ZywgcC0+UklPRGVidWdXYWl0KTsKIAkJCQlEZWJ1Z0N0cmwuRGVidWcgPSBwLT5yaW9fZGVidWc7CiAJCQkJRGVidWdDdHJsLldhaXQgPSBwLT5SSU9EZWJ1Z1dhaXQ7Ci0JCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZEZWJ1Z0N0cmwsIHNpemVvZihEZWJ1Z0N0cmwpKSkgeworCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJkRlYnVnQ3RybCwgc2l6ZW9mKERlYnVnQ3RybCkpKSB7CiAJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFVC9HRVQgREVCVUc6IGJhZCBwb3J0IG51bWJlciAlZFxuIiwgRGVidWdDdHJsLlN5c1BvcnQpOwogCQkJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTc4NSw3ICs3OTMsNyBAQAogCQl9IGVsc2UgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fR0VUREVCVUcgMHgleFxuIiwgcC0+UklPUG9ydHBbRGVidWdDdHJsLlN5c1BvcnRdLT5EZWJ1Zyk7CiAJCQlEZWJ1Z0N0cmwuRGVidWcgPSBwLT5SSU9Qb3J0cFtEZWJ1Z0N0cmwuU3lzUG9ydF0tPkRlYnVnOwotCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZEZWJ1Z0N0cmwsIHNpemVvZihEZWJ1Z0N0cmwpKSkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmRGVidWdDdHJsLCBzaXplb2YoRGVidWdDdHJsKSkpIHsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19HRVRERUJVRzogQmFkIGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CiAJCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTgwMCw3ICs4MDgsNyBAQAogCQkgKiogdGV4dHVhbCBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nLgogCQkgKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fVkVSU0lEXG4iKTsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsIFJJT1ZlcnNpZCgpLCBzaXplb2Yoc3RydWN0IHJpb1ZlcnNpb24pKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZ3AsIFJJT1ZlcnNpZCgpLCBzaXplb2Yoc3RydWN0IHJpb1ZlcnNpb24pKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fVkVSU0lEOiBCYWQgY29weSB0byB1c2VyIHNwYWNlIChob3N0PSVkKVxuIiwgSG9zdCk7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04MTMsNyArODIxLDcgQEAKIAkJICoqIGF0IGluaXQgdGltZS4KIAkJICovCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX05VTV9IT1NUU1xuIik7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcC0+UklPTnVtSG9zdHMsIHNpemVvZihwLT5SSU9OdW1Ib3N0cykpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnAtPlJJT051bUhvc3RzLCBzaXplb2YocC0+UklPTnVtSG9zdHMpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fTlVNX0hPU1RTOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTgyNCw3ICs4MzIsNyBAQAogCQkvKgogCQkgKiogS2lsbCBob3N0LiBUaGlzIG1heSBub3QgYmUgaW4gdGhlIGZpbmFsIHZlcnNpb24uLi4KIAkJICovCi0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfRk9BRCAlbGRcbiIsICh1bnNpZ25lZCBsb25nKSBhcmcpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0ZPQUQgJWxkXG4iLCBhcmcpOwogCQlpZiAoIXN1KSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0ZPQUQ6IE5vdCBzdXBlciB1c2VyXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gTk9UX1NVUEVSX1VTRVI7CkBAIC04NTgsNyArODY2LDcgQEAKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gTk9UX1NVUEVSX1VTRVI7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmRG93bkxvYWQsIGFyZywgc2l6ZW9mKERvd25Mb2FkKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZEb3duTG9hZCwgYXJncCwgc2l6ZW9mKERvd25Mb2FkKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0RPV05MT0FEOiBDb3B5IGluIGZyb20gdXNlciBzcGFjZSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04ODgsNyArODk2LDcgQEAKIAkJewogCQkJdW5zaWduZWQgaW50IGhvc3Q7CiAKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmaG9zdCwgYXJnLCBzaXplb2YoaG9zdCkpKSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJmhvc3QsIGFyZ3AsIHNpemVvZihob3N0KSkpIHsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1JFUTogQ29weSBpbiBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04OTcsNyArOTA1LDcgQEAKIAkJCSAqKiBGZXRjaCB0aGUgcGFybW1hcAogCQkJICovCiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19QQVJNU1xuIik7Ci0JCQlpZiAoY29weV90b191c2VyKGFyZywgcC0+UklPSG9zdHNbaG9zdF0uUGFybU1hcFAsIHNpemVvZihQQVJNX01BUCkpKSB7CisJCQlpZiAoY29weV9mcm9tX2lvKGFyZ3AsIHAtPlJJT0hvc3RzW2hvc3RdLlBhcm1NYXBQLCBzaXplb2YoUEFSTV9NQVApKSkgewogCQkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUEFSTVM6IENvcHkgb3V0IHRvIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTkwNyw3ICs5MTUsNyBAQAogCiAJY2FzZSBSSU9fSE9TVF9SRVE6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfUkVRXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZIb3N0UmVxLCBhcmcsIHNpemVvZihIb3N0UmVxKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZIb3N0UmVxLCBhcmdwLCBzaXplb2YoSG9zdFJlcSkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1JFUTogQ29weSBpbiBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtOTI4LDcgKzkzNiw3IEBACiAKIAljYXNlIFJJT19IT1NUX0RQUkFNOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJlcXVlc3QgZm9yIERQUkFNXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZIb3N0RHBSYW0sIGFyZywgc2l6ZW9mKEhvc3REcFJhbSkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmSG9zdERwUmFtLCBhcmdwLCBzaXplb2YoSG9zdERwUmFtKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfRFBSQU06IENvcHkgaW4gZnJvbSB1c2VyIHNwYWNlIGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTk0NSwxMyArOTUzLDEzIEBACiAJCQkvKiBJdCdzIGhhcmR3YXJlIGxpa2UgdGhpcyB0aGF0IHJlYWxseSBnZXRzIG9uIG15IHRpdHMuICovCiAJCQlzdGF0aWMgdW5zaWduZWQgY2hhciBjb3B5W3NpemVvZihzdHJ1Y3QgRHBSYW0pXTsKIAkJCWZvciAob2ZmID0gMDsgb2ZmIDwgc2l6ZW9mKHN0cnVjdCBEcFJhbSk7IG9mZisrKQotCQkJCWNvcHlbb2ZmXSA9IHJlYWRiKCZwLT5SSU9Ib3N0c1tIb3N0RHBSYW0uSG9zdE51bV0uQ2FkZHJbb2ZmXSk7CisJCQkJY29weVtvZmZdID0gcmVhZGIocC0+UklPSG9zdHNbSG9zdERwUmFtLkhvc3ROdW1dLkNhZGRyICsgb2ZmKTsKIAkJCWlmIChjb3B5X3RvX3VzZXIoSG9zdERwUmFtLkRwUmFtUCwgY29weSwgc2l6ZW9mKHN0cnVjdCBEcFJhbSkpKSB7CiAJCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0RQUkFNOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KLQkJfSBlbHNlIGlmIChjb3B5X3RvX3VzZXIoSG9zdERwUmFtLkRwUmFtUCwgcC0+UklPSG9zdHNbSG9zdERwUmFtLkhvc3ROdW1dLkNhZGRyLCBzaXplb2Yoc3RydWN0IERwUmFtKSkpIHsKKwkJfSBlbHNlIGlmIChjb3B5X2Zyb21faW8oSG9zdERwUmFtLkRwUmFtUCwgcC0+UklPSG9zdHNbSG9zdERwUmFtLkhvc3ROdW1dLkNhZGRyLCBzaXplb2Yoc3RydWN0IERwUmFtKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0RQUkFNOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtOTYwLDEzICs5NjgsMTMgQEAKIAogCWNhc2UgUklPX1NFVF9CVVNZOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19TRVRfQlVTWVxuIik7Ci0JCWlmICgodW5zaWduZWQgbG9uZykgYXJnID4gNTExKSB7Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19TRVRfQlVTWTogQmFkIHBvcnQgbnVtYmVyICVsZFxuIiwgKHVuc2lnbmVkIGxvbmcpIGFyZyk7CisJCWlmIChhcmcgPiA1MTEpIHsKKwkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFVF9CVVNZOiBCYWQgcG9ydCBudW1iZXIgJWxkXG4iLCBhcmcpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBQT1JUX05VTUJFUl9PVVRfT0ZfUkFOR0U7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlyaW9fc3Bpbl9sb2NrX2lycXNhdmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXAtPlJJT1BvcnRwWyh1bnNpZ25lZCBsb25nKSBhcmddLT5TdGF0ZSB8PSBSSU9fQlVTWTsKKwkJcC0+UklPUG9ydHBbYXJnXS0+U3RhdGUgfD0gUklPX0JVU1k7CiAJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC05NzYsNyArOTg0LDcgQEAKIAkJICoqIChwcm9iYWJseSBmb3IgZGVidWcgcmVhc29ucykKIAkJICovCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfUE9SVFxuIik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFJlcSwgYXJnLCBzaXplb2YoUG9ydFJlcSkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFJlcSwgYXJncCwgc2l6ZW9mKFBvcnRSZXEpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9QT1JUOiBDb3B5IGluIGZyb20gdXNlciBzcGFjZSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMDAxLDcgKzEwMDksNyBAQAogCQkgKiogKHByb2JhYmx5IGZvciBkZWJ1ZyByZWFzb25zKQogCQkgKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9SVVBcbiIpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJlJ1cFJlcSwgYXJnLCBzaXplb2YoUnVwUmVxKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZSdXBSZXEsIGFyZ3AsIHNpemVvZihSdXBSZXEpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9SVVA6IENvcHkgaW4gZnJvbSB1c2VyIHNwYWNlIGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEwMjUsNyArMTAzMyw3IEBACiAJCX0KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSZXF1ZXN0IGZvciBydXAgJWQgZnJvbSBob3N0ICVkXG4iLCBSdXBSZXEuUnVwTnVtLCBSdXBSZXEuSG9zdE51bSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcihIb3N0UC0+VW5peFJ1cHNbUnVwUmVxLlJ1cE51bV0uUnVwUCwgUnVwUmVxLlJ1cFAsIHNpemVvZihzdHJ1Y3QgUlVQKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV9pbyhSdXBSZXEuUnVwUCwgSG9zdFAtPlVuaXhSdXBzW1J1cFJlcS5SdXBOdW1dLlJ1cFAsIHNpemVvZihzdHJ1Y3QgUlVQKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1JVUDogQmFkIGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEwMzgsNyArMTA0Niw3IEBACiAJCSAqKiAocHJvYmFibHkgZm9yIGRlYnVnIHJlYXNvbnMpCiAJCSAqLwogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0xQQlxuIik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmTHBiUmVxLCBhcmcsIHNpemVvZihMcGJSZXEpKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJkxwYlJlcSwgYXJncCwgc2l6ZW9mKExwYlJlcSkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0xQQjogQmFkIGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTA2Miw3ICsxMDcwLDcgQEAKIAkJfQogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJlcXVlc3QgZm9yIGxwYiAlZCBmcm9tIGhvc3QgJWRcbiIsIExwYlJlcS5MaW5rLCBMcGJSZXEuSG9zdCk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcihMcGJSZXEuTHBiUCwgJkhvc3RQLT5MaW5rU3RyUFtMcGJSZXEuTGlua10sIHNpemVvZihzdHJ1Y3QgTFBCKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV9pbyhMcGJSZXEuTHBiUCwgJkhvc3RQLT5MaW5rU3RyUFtMcGJSZXEuTGlua10sIHNpemVvZihzdHJ1Y3QgTFBCKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfTFBCOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTExMzYsNyArMTE0NCw3IEBACiAJY2FzZSBSSU9fTUFQX0IxMTBfVE9fMTEwOgogCWNhc2UgUklPX01BUF9CMTEwX1RPXzExNTIwMDoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJCYXVkIHJhdGUgbWFwcGluZ1xuIik7Ci0JCXBvcnQgPSAodW5zaWduZWQgbG9uZykgYXJnOworCQlwb3J0ID0gYXJnOwogCQlpZiAocG9ydCA8IDAgfHwgcG9ydCA+IDUxMSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJCYXVkIHJhdGUgbWFwcGluZzogQmFkIHBvcnQgbnVtYmVyICVkXG4iLCBwb3J0KTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gUE9SVF9OVU1CRVJfT1VUX09GX1JBTkdFOwpAQCAtMTE2Niw3ICsxMTc0LDcgQEAKIAogCWNhc2UgUklPX1NFTkRfUEFDS0VUOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19TRU5EX1BBQ0tFVFxuIik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmU2VuZFBhY2ssIGFyZywgc2l6ZW9mKFNlbmRQYWNrKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZTZW5kUGFjaywgYXJncCwgc2l6ZW9mKFNlbmRQYWNrKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFTkRfUEFDS0VUOiBCYWQgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMjEwLDcgKzEyMTgsNyBAQAogCQlyZXR1cm4gc3UgPyAwIDogLUVQRVJNOwogCiAJY2FzZSBSSU9fV0hBVF9NRVNHOgotCQlpZiAoY29weV90b191c2VyKGFyZywgJnAtPlJJT05vTWVzc2FnZSwgc2l6ZW9mKHAtPlJJT05vTWVzc2FnZSkpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnAtPlJJT05vTWVzc2FnZSwgc2l6ZW9mKHAtPlJJT05vTWVzc2FnZSkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19XSEFUX01FU0c6IEJhZCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTIxOCw3ICsxMjI2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFJJT19NRU1fRFVNUDoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZTdWJDbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBTdWJDbWRTdHJ1Y3QpKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJlN1YkNtZCwgYXJncCwgc2l6ZW9mKHN0cnVjdCBTdWJDbWRTdHJ1Y3QpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTEyNDgsNyArMTI1Niw3IEBACiAJCQlQb3J0UC0+U3RhdGUgfD0gUklPX0JVU1k7CiAKIAkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBwLT5SSU9NZW1EdW1wLCBNRU1EVU1QX1NJWkUpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgcC0+UklPTWVtRHVtcCwgTUVNRFVNUF9TSVpFKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fTUVNX0RVTVAgY29weSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTI1NiwzMCArMTI2NCwzMCBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgUklPX1RJQ0s6Ci0JCWlmICgodW5zaWduZWQgbG9uZykgYXJnID49IHAtPlJJT051bUhvc3RzKQorCQlpZiAoYXJnID49IHAtPlJJT051bUhvc3RzKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiU2V0IGludGVycnVwdCBmb3IgaG9zdCAlbGRcbiIsICh1bnNpZ25lZCBsb25nKSBhcmcpOwotCQl3cml0ZWIoMHhGRiwgJnAtPlJJT0hvc3RzWyh1bnNpZ25lZCBsb25nKSBhcmddLlNldEludCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiU2V0IGludGVycnVwdCBmb3IgaG9zdCAlbGRcbiIsIGFyZyk7CisJCXdyaXRlYigweEZGLCAmcC0+UklPSG9zdHNbYXJnXS5TZXRJbnQpOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgUklPX1RPQ0s6Ci0JCWlmICgodW5zaWduZWQgbG9uZykgYXJnID49IHAtPlJJT051bUhvc3RzKQorCQlpZiAoYXJnID49IHAtPlJJT051bUhvc3RzKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQ2xlYXIgaW50ZXJydXB0IGZvciBob3N0ICVsZFxuIiwgKHVuc2lnbmVkIGxvbmcpIGFyZyk7Ci0JCXdyaXRlYigweEZGLCAmcC0+UklPSG9zdHNbKHVuc2lnbmVkIGxvbmcpIGFyZ10uUmVzZXRJbnQpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkNsZWFyIGludGVycnVwdCBmb3IgaG9zdCAlbGRcbiIsIGFyZyk7CisJCXdyaXRlYigweEZGLCAmcC0+UklPSG9zdHNbYXJnXS5SZXNldEludCk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBSSU9fUkVBRF9DSEVDSzoKIAkJLyogQ2hlY2sgcmVhZHMgZm9yIHBrdHMgd2l0aCBkYXRhWzBdIHRoZSBzYW1lICovCiAJCXAtPlJJT1JlYWRDaGVjayA9ICFwLT5SSU9SZWFkQ2hlY2s7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcC0+UklPUmVhZENoZWNrLCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmcC0+UklPUmVhZENoZWNrLCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQlyZXR1cm4gMDsKIAogCWNhc2UgUklPX1JFQURfUkVHSVNURVI6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmU3ViQ21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgU3ViQ21kU3RydWN0KSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZTdWJDbWQsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgU3ViQ21kU3RydWN0KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC0xMzE0LDcgKzEzMjIsNyBAQAogCQkJUG9ydFAtPlN0YXRlIHw9IFJJT19CVVNZOwogCiAJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQlpZiAoY29weV90b191c2VyKGFyZywgJnAtPkNkUmVnaXN0ZXIsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwLT5DZFJlZ2lzdGVyLCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1JFQURfUkVHSVNURVIgY29weSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTMyNywxMCArMTMzNSwxMCBAQAogCQkgKi8KIAljYXNlIFJJT19NQUtFX0RFVjoKIAkJewotCQkJdW5zaWduZWQgaW50IHBvcnQgPSAodW5zaWduZWQgbG9uZykgYXJnICYgUklPX01PREVNX01BU0s7CisJCQl1bnNpZ25lZCBpbnQgcG9ydCA9IGFyZyAmIFJJT19NT0RFTV9NQVNLOwogCQkJdW5zaWduZWQgaW50IHJldDsKIAotCQkJc3dpdGNoICgodW5zaWduZWQgbG9uZykgYXJnICYgUklPX0RFVl9NQVNLKSB7CisJCQlzd2l0Y2ggKGFyZyAmIFJJT19ERVZfTUFTSykgewogCQkJY2FzZSBSSU9fREVWX0RJUkVDVDoKIAkJCQlyZXQgPSBkcnZfbWFrZWRldihNQUpPUihkZXYpLCBwb3J0KTsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIk1ha2VkZXYgZGlyZWN0IDB4JXggaXMgMHgleFxuIiwgcG9ydCwgcmV0KTsKQEAgLTEzNTgsNyArMTM2Niw3IEBACiAJCQlpbnQgbWlubzsKIAkJCXVuc2lnbmVkIGxvbmcgcmV0OwogCi0JCQlkdiA9IChkZXZfdCkgKCh1bnNpZ25lZCBsb25nKSBhcmcpOworCQkJZHYgPSAoZGV2X3QpIChhcmcpOwogCQkJbWlubyA9IFJJT19VTk1PREVNKGR2KTsKIAogCQkJaWYgKFJJT19JU01PREVNKGR2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9pbml0LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYwppbmRleCAyNGQyOTkyLi4xMmUzNGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYwpAQCAtNzksNyArNzksNyBAQAogCiBpbnQgUklPUENJaW5pdChzdHJ1Y3QgcmlvX2luZm8gKnAsIGludCBNb2RlKTsKIAotc3RhdGljIGludCBSSU9TY3J1YihpbnQsIHU4ICosIGludCk7CitzdGF0aWMgaW50IFJJT1NjcnViKGludCwgdTggX19pb21lbSAqLCBpbnQpOwogCiAKIC8qKgpAQCAtOTIsMTAgKzkyLDEwIEBACiAqKiBiaXRzID4gMCBpbmRpY2F0ZXMgMTYgYml0IG9wZXJhdGlvbi4KICovCiAKLWludCBSSU9Bc3NpZ25BVChzdHJ1Y3QgcmlvX2luZm8gKnAsIGludAlCYXNlLCBjYWRkcl90CXZpcnRBZGRyLCBpbnQgbW9kZSkKK2ludCBSSU9Bc3NpZ25BVChzdHJ1Y3QgcmlvX2luZm8gKnAsIGludAlCYXNlLCB2b2lkIF9faW9tZW0gKnZpcnRBZGRyLCBpbnQgbW9kZSkKIHsKIAlpbnQJCWJpdHM7Ci0Jc3RydWN0IERwUmFtICpjYXJkcCA9IChzdHJ1Y3QgRHBSYW0gKil2aXJ0QWRkcjsKKwlzdHJ1Y3QgRHBSYW0gX19pb21lbSAqY2FyZHAgPSAoc3RydWN0IERwUmFtIF9faW9tZW0gKil2aXJ0QWRkcjsKIAogCWlmICgoQmFzZSA8IE9ORV9NRUcpIHx8IChtb2RlICYgQllURV9BQ0NFU1NfTU9ERSkpCiAJCWJpdHMgPSBCWVRFX09QRVJBVElPTjsKQEAgLTEwNyw3ICsxMDcsNyBAQAogCSoqIHRyYW5zaWVudCBzdHVmZi4KIAkqLwogCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5DYWRkcgk9IHZpcnRBZGRyOwotCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5DYXJkUAk9IChzdHJ1Y3QgRHBSYW0gKil2aXJ0QWRkcjsKKwlwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uQ2FyZFAJPSB2aXJ0QWRkcjsKIAogCS8qCiAJKiogUmV2aXNpb24gMDEgQVQgaG9zdCBjYXJkcyBkb24ndCBzdXBwb3J0IFdPUkQgb3BlcmF0aW9ucywKQEAgLTE1MSwxMCArMTUxLDEwIEBACiAqKiBSQU0gdGVzdCBhIGJvYXJkLiAKICoqIE5vdGhpbmcgdG9vIGNvbXBsaWNhdGVkLCBqdXN0IGVub3VnaCB0byBjaGVjayBpdCBvdXQuCiAqLwotaW50IFJJT0JvYXJkVGVzdCh1bnNpZ25lZCBsb25nIHBhZGRyLCBjYWRkcl90CWNhZGRyLCB1bnNpZ25lZCBjaGFyIHR5cGUsIGludCBzbG90KQoraW50IFJJT0JvYXJkVGVzdCh1bnNpZ25lZCBsb25nIHBhZGRyLCB2b2lkIF9faW9tZW0gKmNhZGRyLCB1bnNpZ25lZCBjaGFyIHR5cGUsIGludCBzbG90KQogewotCXN0cnVjdCBEcFJhbSAqRHBSYW0gPSAoc3RydWN0IERwUmFtICopY2FkZHI7Ci0JY2hhciAqcmFtWzRdOworCXN0cnVjdCBEcFJhbSBfX2lvbWVtICpEcFJhbSA9IGNhZGRyOworCXZvaWQgX19pb21lbSAqcmFtWzRdOwogCWludCAgc2l6ZVs0XTsKIAlpbnQgIG9wLCBiYW5rOwogCWludCAgbmJhbmtzOwpAQCAtMTc5LDEyICsxNzksMTIgQEAKIAlzaXplWzJdID0gRFBfU1JBTTNfU0laRTsKIAlzaXplWzNdID0gRFBfU0NSQVRDSF9TSVpFOwogCi0JcmFtWzBdID0gKGNoYXIgKikmRHBSYW0tPkRwU3JhbTFbMF07Ci0JcmFtWzFdID0gKGNoYXIgKikmRHBSYW0tPkRwU3JhbTJbMF07Ci0JcmFtWzJdID0gKGNoYXIgKikmRHBSYW0tPkRwU3JhbTNbMF07CisJcmFtWzBdID0gRHBSYW0tPkRwU3JhbTE7CisJcmFtWzFdID0gRHBSYW0tPkRwU3JhbTI7CisJcmFtWzJdID0gRHBSYW0tPkRwU3JhbTM7CiAJbmJhbmtzID0gKHR5cGUgPT0gUklPX1BDSSkgPyAzIDogNDsKIAlpZiAobmJhbmtzID09IDQpCi0JCXJhbVszXSA9IChjaGFyICopJkRwUmFtLT5EcFNjcmF0Y2hbMF07CisJCXJhbVszXSA9IERwUmFtLT5EcFNjcmF0Y2g7CiAKIAogCWlmIChuYmFua3MgPT0gMykgewpAQCAtMjAyLDcgKzIwMiw3IEBACiAJKi8KIAlmb3IgKG9wPTA7IG9wPFRFU1RfRU5EOyBvcCsrKSB7CiAJCWZvciAoYmFuaz0wOyBiYW5rPG5iYW5rczsgYmFuaysrKSB7Ci0JCQlpZiAoUklPU2NydWIob3AsICh1OCAqKXJhbVtiYW5rXSwgc2l6ZVtiYW5rXSkgPT0gUklPX0ZBSUwpIHsKKwkJCWlmIChSSU9TY3J1YihvcCwgcmFtW2JhbmtdLCBzaXplW2JhbmtdKSA9PSBSSU9fRkFJTCkgewogCQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBSSU9TY3J1YiBiYW5kICVkLCBvcCAlZCBmYWlsZWRcbiIsIAogCQkJCQkJCWJhbmssIG9wKTsKIAkJCQlyZXR1cm4gUklPX0ZBSUw7CkBAIC0yMjcsNyArMjI3LDcgQEAKICoqIHRvIGNoZWNrIHRoYXQgdGhlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgcGhhc2Ugd2FzIHJldGFpbmVkLgogKi8KIAotc3RhdGljIGludCBSSU9TY3J1YihpbnQgb3AsIHU4ICpyYW0sIGludCBzaXplKQorc3RhdGljIGludCBSSU9TY3J1YihpbnQgb3AsIHU4IF9faW9tZW0gKnJhbSwgaW50IHNpemUpCiB7CiAJaW50IG9mZjsKIAl1bnNpZ25lZCBjaGFyCW9sZGJ5dGU7CkBAIC0zOTMsNyArMzkzLDcgQEAKICAgICByZXR1cm4gJnN0VmVyc2lvbjsKIH0KIAotdm9pZCBSSU9Ib3N0UmVzZXQodW5zaWduZWQgaW50IFR5cGUsIHN0cnVjdCBEcFJhbSAqRHBSYW1QLCB1bnNpZ25lZCBpbnQgU2xvdCkKK3ZvaWQgUklPSG9zdFJlc2V0KHVuc2lnbmVkIGludCBUeXBlLCBzdHJ1Y3QgRHBSYW0gX19pb21lbSAqRHBSYW1QLCB1bnNpZ25lZCBpbnQgU2xvdCkKIHsKIAkvKgogCSoqIFJlc2V0IHRoZSBUcHUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9pbnRyLmMKaW5kZXggOTdmMGZhNS4uZWVjMWZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9pbnRyLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9pbnRyLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCXN0cnVjdCByaW9faW5mbyAqcDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBjOwotCXN0cnVjdCBQS1QgKlBhY2tldFA7CisJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlQb3J0UCA9IChzdHJ1Y3QgUG9ydCAqKSBlbjsKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQlpZiAoYyA9PSAwKQogCQkJYnJlYWs7CiAKLQkJcmlvX21lbWNweV90b2lvKFBvcnRQLT5Ib3N0UC0+Q2FkZHIsIChjYWRkcl90KSBQYWNrZXRQLT5kYXRhLCBQb3J0UC0+Z3MueG1pdF9idWYgKyBQb3J0UC0+Z3MueG1pdF90YWlsLCBjKTsKKwkJcmlvX21lbWNweV90b2lvKFBvcnRQLT5Ib3N0UC0+Q2FkZHIsIFBhY2tldFAtPmRhdGEsIFBvcnRQLT5ncy54bWl0X2J1ZiArIFBvcnRQLT5ncy54bWl0X3RhaWwsIGMpOwogCQkvKiAgICB1ZGVsYXkgKDEpOyAqLwogCiAJCXdyaXRlYihjLCAmKFBhY2tldFAtPmxlbikpOwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCWZvciAocG9ydCA9IHAtPlJJT0ZpcnN0UG9ydHNCb290ZWQ7IHBvcnQgPCBwLT5SSU9MYXN0UG9ydHNCb290ZWQgKyBQT1JUU19QRVJfUlRBOyBwb3J0KyspIHsKIAkJCXN0cnVjdCBQb3J0ICpQb3J0UCA9IHAtPlJJT1BvcnRwW3BvcnRdOwogCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eVA7Ci0JCQlzdHJ1Y3QgUEtUICpQYWNrZXRQOworCQkJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCiAJCQkvKgogCQkJICoqIG5vdCBtYXBwZWQgaW4gLSBtb3N0IG9mIHRoZSBSSU9Qb3J0cFtdIGluZm9ybWF0aW9uCkBAIC0yOTgsNyArMjk4LDcgQEAKIAkJZm9yIChwb3J0ID0gcC0+UklPRmlyc3RQb3J0c0Jvb3RlZDsgcG9ydCA8IHAtPlJJT0xhc3RQb3J0c0Jvb3RlZCArIFBPUlRTX1BFUl9SVEE7IHBvcnQrKykgewogCQkJc3RydWN0IFBvcnQgKlBvcnRQID0gcC0+UklPUG9ydHBbcG9ydF07CiAJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5UDsKLQkJCXN0cnVjdCBQS1QgKlBhY2tldFA7CisJCQlzdHJ1Y3QgUEtUIF9faW9tZW0gKlBhY2tldFA7CiAKIAkJCS8qCiAJCQkgKiogbm90IG1hcHBlZCBpbiAtIG1vc3Qgb2YgdGhlIFJJT1BvcnRwW10gaW5mb3JtYXRpb24KQEAgLTQyNywxMyArNDI3LDEzIEBACiAKIAkJCQl3aGlsZSAoUG9ydFAtPldmbHVzaEZsYWcgJiYgY2FuX2FkZF90cmFuc21pdCgmUGFja2V0UCwgUG9ydFApICYmIChQb3J0UC0+SW5Vc2UgPT0gTk9UX0lOVVNFKSkgewogCQkJCQlpbnQgcDsKLQkJCQkJc3RydWN0IFBrdENtZCAqUGt0Q21kUDsKKwkJCQkJc3RydWN0IFBrdENtZCBfX2lvbWVtICpQa3RDbWRQOwogCiAJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiQWRkIFdGTFVTSCBtYXJrZXIgdG8gZGF0YSBxdWV1ZVxuIik7CiAJCQkJCS8qCiAJCQkJCSAqKiBtYWtlIGl0IGxvb2sganVzdCBsaWtlIGEgV0ZMVVNIIGNvbW1hbmQKIAkJCQkJICovCi0JCQkJCVBrdENtZFAgPSAoc3RydWN0IFBrdENtZCAqKSAmUGFja2V0UC0+ZGF0YVswXTsKKwkJCQkJUGt0Q21kUCA9IChzdHJ1Y3QgUGt0Q21kIF9faW9tZW0gKikgJlBhY2tldFAtPmRhdGFbMF07CiAKIAkJCQkJd3JpdGViKFdGTFVTSCwgJlBrdENtZFAtPkNvbW1hbmQpOwogCkBAIC01MjUsOSArNTI1LDkgQEAKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqVHR5UDsKIAl1bnNpZ25lZCBzaG9ydCB0cmFuc0NvdW50OwotCXN0cnVjdCBQS1QgKlBhY2tldFA7CisJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBEYXRhQ250OwotCXVuc2lnbmVkIGNoYXIgKnB0cjsKKwl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKnB0cjsKIAl1bnNpZ25lZCBjaGFyICpidWY7CiAJaW50IGNvcGllZCA9IDA7CiAKQEAgLTU4NSwxOSArNTg1LDE5IEBACiAJCQkvKgogCQkJICoqIGNoZWNrIHRoYXQgaXQgaXMgbm90IGEgY29tbWFuZCEKIAkJCSAqLwotCQkJaWYgKFBhY2tldFAtPmxlbiAmIFBLVF9DTURfQklUKSB7CisJCQlpZiAocmVhZGIoJlBhY2tldFAtPmxlbikgJiBQS1RfQ01EX0JJVCkgewogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiUklPOiB1bmV4cGVjdGVkIGNvbW1hbmQgcGFja2V0IHJlY2VpdmVkIG9uIFBIQlxuIik7CiAJCQkJLyogICAgICByaW9fZHByaW50KFJJT19ERUJVR19JTlRSLCAoIiBzeXNwb3J0ICAgPSAlZFxuIiwgcC0+UklPUG9ydHAtPlBvcnROdW0pKTsgKi8KLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBkZXN0X3VuaXQgPSAlZFxuIiwgUGFja2V0UC0+ZGVzdF91bml0KTsKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBkZXN0X3BvcnQgPSAlZFxuIiwgUGFja2V0UC0+ZGVzdF9wb3J0KTsKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBzcmNfdW5pdCAgPSAlZFxuIiwgUGFja2V0UC0+c3JjX3VuaXQpOwotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiIHNyY19wb3J0ICA9ICVkXG4iLCBQYWNrZXRQLT5zcmNfcG9ydCk7Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIgbGVuCSAgID0gJWRcbiIsIFBhY2tldFAtPmxlbik7Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIgY29udHJvbCAgID0gJWRcbiIsIFBhY2tldFAtPmNvbnRyb2wpOwotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiIGNzdW0JICAgPSAlZFxuIiwgUGFja2V0UC0+Y3N1bSk7CisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIgZGVzdF91bml0ID0gJWRcbiIsIHJlYWRiKCZQYWNrZXRQLT5kZXN0X3VuaXQpKTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBkZXN0X3BvcnQgPSAlZFxuIiwgcmVhZGIoJlBhY2tldFAtPmRlc3RfcG9ydCkpOworCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiIHNyY191bml0ICA9ICVkXG4iLCByZWFkYigmUGFja2V0UC0+c3JjX3VuaXQpKTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBzcmNfcG9ydCAgPSAlZFxuIiwgcmVhZGIoJlBhY2tldFAtPnNyY19wb3J0KSk7CisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIgbGVuCSAgID0gJWRcbiIsIHJlYWRiKCZQYWNrZXRQLT5sZW4pKTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBjb250cm9sICAgPSAlZFxuIiwgcmVhZGIoJlBhY2tldFAtPmNvbnRyb2wpKTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBjc3VtCSAgID0gJWRcbiIsIHJlYWR3KCZQYWNrZXRQLT5jc3VtKSk7CiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIJIGRhdGEgYnl0ZXM6ICIpOwogCQkJCWZvciAoRGF0YUNudCA9IDA7IERhdGFDbnQgPCBQS1RfTUFYX0RBVEFfTEVOOyBEYXRhQ250KyspCi0JCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiJWRcbiIsIFBhY2tldFAtPmRhdGFbRGF0YUNudF0pOworCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiVkXG4iLCByZWFkYigmUGFja2V0UC0+ZGF0YVtEYXRhQ250XSkpOwogCQkJCXJlbW92ZV9yZWNlaXZlKFBvcnRQKTsKIAkJCQlwdXRfZnJlZV9lbmQoUG9ydFAtPkhvc3RQLCBQYWNrZXRQKTsKIAkJCQljb250aW51ZTsJLyogd2l0aCBuZXh0IHBhY2tldCAqLwpAQCAtNjE4LDI0ICs2MTgsMjQgQEAKIAkJCSAqKiBhbmQgYXZhaWxhYmxlIHNwYWNlLgogCQkJICovCiAKLQkJCXRyYW5zQ291bnQgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbShUdHlQLCBQYWNrZXRQLT5sZW4gJiBQS1RfTEVOX01BU0spOworCQkJdHJhbnNDb3VudCA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKFR0eVAsIHJlYWRiKCZQYWNrZXRQLT5sZW4pICYgUEtUX0xFTl9NQVNLKTsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19SRUMsICJwb3J0ICVkOiBDb3B5ICVkIGJ5dGVzXG4iLCBQb3J0UC0+UG9ydE51bSwgdHJhbnNDb3VudCk7CiAJCQkvKgogCQkJICoqIFRvIHVzZSB0aGUgZm9sbG93aW5nICdra3ByaW50ZnMnIGZvciBkZWJ1Z2dpbmcgLSBjaGFuZ2UgdGhlICcjdW5kZWYnCiAJCQkgKiogdG8gJyNkZWZpbmUnLCAodGhpcyBpcyB0aGUgb25seSBwbGFjZSBfX19ERUJVR19JVF9fXyBvY2N1cnMgaW4gdGhlCiAJCQkgKiogZHJpdmVyKS4KIAkJCSAqLwotCQkJcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgUGFja2V0UC0+ZGF0YSArIFBvcnRQLT5SeERhdGFTdGFydDsKKwkJCXB0ciA9ICh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikgUGFja2V0UC0+ZGF0YSArIFBvcnRQLT5SeERhdGFTdGFydDsKIAogCQkJdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcoVHR5UCwgJmJ1ZiwgdHJhbnNDb3VudCk7CiAJCQlyaW9fbWVtY3B5X2Zyb21pbyhidWYsIHB0ciwgdHJhbnNDb3VudCk7CiAJCQlQb3J0UC0+UnhEYXRhU3RhcnQgKz0gdHJhbnNDb3VudDsKLQkJCVBhY2tldFAtPmxlbiAtPSB0cmFuc0NvdW50OworCQkJd3JpdGViKHJlYWRiKCZQYWNrZXRQLT5sZW4pLXRyYW5zQ291bnQsICZQYWNrZXRQLT5sZW4pOwogCQkJY29waWVkICs9IHRyYW5zQ291bnQ7CiAKIAogCi0JCQlpZiAoUGFja2V0UC0+bGVuID09IDApIHsKKwkJCWlmIChyZWFkYigmUGFja2V0UC0+bGVuKSA9PSAwKSB7CiAJCQkJLyoKIAkJCQkgKiogSWYgd2UgaGF2ZSBlbXB0aWVkIHRoZSBwYWNrZXQsIHRoZW4gd2UgY2FuCiAJCQkJICoqIGZyZWUgaXQsIGFuZCByZXNldCB0aGUgc3RhcnQgcG9pbnRlciBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcGFyYW0uYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvcGFyYW0uYwppbmRleCBkMmU4MDkyLi4xMDY2ZDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3BhcmFtLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9wYXJhbS5jCkBAIC0xNTQsOCArMTU0LDggQEAKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqVHR5UDsKIAlpbnQgcmV0dmFsOwotCXN0cnVjdCBwaGJfcGFyYW0gKnBoYl9wYXJhbV9wdHI7Ci0Jc3RydWN0IFBLVCAqUGFja2V0UDsKKwlzdHJ1Y3QgcGhiX3BhcmFtIF9faW9tZW0gKnBoYl9wYXJhbV9wdHI7CisJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCWludCByZXM7CiAJdTggQ29yMSA9IDAsIENvcjIgPSAwLCBDb3I0ID0gMCwgQ29yNSA9IDA7CiAJdTggVHhYb24gPSAwLCBUeFhvZmYgPSAwLCBSeFhvbiA9IDAsIFJ4WG9mZiA9IDA7CkBAIC0yMzUsNyArMjM1LDcgQEAKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfUEFSQU0sICJjYW5fYWRkX3RyYW5zbWl0KCkgcmV0dXJucyAleFxuIiwgcmVzKTsKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfUEFSQU0sICJQYWNrZXQgaXMgJXBcbiIsIFBhY2tldFApOwogCi0JcGhiX3BhcmFtX3B0ciA9IChzdHJ1Y3QgcGhiX3BhcmFtICopIFBhY2tldFAtPmRhdGE7CisJcGhiX3BhcmFtX3B0ciA9IChzdHJ1Y3QgcGhiX3BhcmFtIF9faW9tZW0gKikgUGFja2V0UC0+ZGF0YTsKIAogCiAJc3dpdGNoIChUdHlQLT50ZXJtaW9zLT5jX2NmbGFnICYgQ1NJWkUpIHsKQEAgLTU4MCwxMSArNTgwLDExIEBACiAqKiBXZSBjYW4gYWRkIGFub3RoZXIgcGFja2V0IHRvIGEgdHJhbnNtaXQgcXVldWUgaWYgdGhlIHBhY2tldCBwb2ludGVyIHBvaW50ZWQKICoqIHRvIGJ5IHRoZSBUeEFkZCBwb2ludGVyIGhhcyBQS1RfSU5fVVNFIGNsZWFyIGluIGl0cyBhZGRyZXNzLgogKi8KLWludCBjYW5fYWRkX3RyYW5zbWl0KHN0cnVjdCBQS1QgKipQa3RQLCBzdHJ1Y3QgUG9ydCAqUG9ydFApCitpbnQgY2FuX2FkZF90cmFuc21pdChzdHJ1Y3QgUEtUIF9faW9tZW0gKipQa3RQLCBzdHJ1Y3QgUG9ydCAqUG9ydFApCiB7Ci0Jc3RydWN0IFBLVCAqdHA7CisJc3RydWN0IFBLVCBfX2lvbWVtICp0cDsKIAotCSpQa3RQID0gdHAgPSAoc3RydWN0IFBLVCAqKSBSSU9fUFRSKFBvcnRQLT5DYWRkciwgcmVhZHcoUG9ydFAtPlR4QWRkKSk7CisJKlBrdFAgPSB0cCA9IChzdHJ1Y3QgUEtUIF9faW9tZW0gKikgUklPX1BUUihQb3J0UC0+Q2FkZHIsIHJlYWR3KFBvcnRQLT5UeEFkZCkpOwogCiAJcmV0dXJuICEoKHVuc2lnbmVkIGxvbmcpIHRwICYgUEtUX0lOX1VTRSk7CiB9CkBAIC02MDgsOSArNjA4LDkgQEAKICAqIFB1dCBhIHBhY2tldCBvbnRvIHRoZSBlbmQgb2YgdGhlCiAgKiBmcmVlIGxpc3QKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBwdXRfZnJlZV9lbmQoc3RydWN0IEhvc3QgKkhvc3RQLCBzdHJ1Y3QgUEtUICpQa3RQKQordm9pZCBwdXRfZnJlZV9lbmQoc3RydWN0IEhvc3QgKkhvc3RQLCBzdHJ1Y3QgUEtUIF9faW9tZW0gKlBrdFApCiB7Ci0Jc3RydWN0IHJpb19mcmVlX2xpc3QgKnRtcF9wb2ludGVyOworCXN0cnVjdCByaW9fZnJlZV9saXN0IF9faW9tZW0gKnRtcF9wb2ludGVyOwogCXVuc2lnbmVkIHNob3J0IG9sZF9lbmQsIG5ld19lbmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNjI1LDE1ICs2MjUsMTUgQEAKIAogCWlmICgob2xkX2VuZCA9IHJlYWR3KCZIb3N0UC0+UGFybU1hcFAtPmZyZWVfbGlzdF9lbmQpKSAhPSBUUE5VTEwpIHsKIAkJbmV3X2VuZCA9IFJJT19PRkYoSG9zdFAtPkNhZGRyLCBQa3RQKTsKLQkJdG1wX3BvaW50ZXIgPSAoc3RydWN0IHJpb19mcmVlX2xpc3QgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIG9sZF9lbmQpOworCQl0bXBfcG9pbnRlciA9IChzdHJ1Y3QgcmlvX2ZyZWVfbGlzdCBfX2lvbWVtICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCBvbGRfZW5kKTsKIAkJd3JpdGV3KG5ld19lbmQsICZ0bXBfcG9pbnRlci0+bmV4dCk7Ci0JCXdyaXRldyhvbGRfZW5kLCAmKChzdHJ1Y3QgcmlvX2ZyZWVfbGlzdCAqKSBQa3RQKS0+cHJldik7Ci0JCXdyaXRldyhUUE5VTEwsICYoKHN0cnVjdCByaW9fZnJlZV9saXN0ICopIFBrdFApLT5uZXh0KTsKKwkJd3JpdGV3KG9sZF9lbmQsICYoKHN0cnVjdCByaW9fZnJlZV9saXN0IF9faW9tZW0gKikgUGt0UCktPnByZXYpOworCQl3cml0ZXcoVFBOVUxMLCAmKChzdHJ1Y3QgcmlvX2ZyZWVfbGlzdCBfX2lvbWVtICopIFBrdFApLT5uZXh0KTsKIAkJd3JpdGV3KG5ld19lbmQsICZIb3N0UC0+UGFybU1hcFAtPmZyZWVfbGlzdF9lbmQpOwogCX0gZWxzZSB7CQkvKiBGaXJzdCBwYWNrZXQgb24gdGhlIGZyZWUgbGlzdCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4hICovCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19QRkUsICJwdXRfZnJlZV9lbmQoKTogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iKTsKIAkJd3JpdGV3KFJJT19PRkYoSG9zdFAtPkNhZGRyLCBQa3RQKSwgJkhvc3RQLT5QYXJtTWFwUC0+ZnJlZV9saXN0X2VuZCk7Ci0JCXRtcF9wb2ludGVyID0gKHN0cnVjdCByaW9fZnJlZV9saXN0ICopIFBrdFA7CisJCXRtcF9wb2ludGVyID0gKHN0cnVjdCByaW9fZnJlZV9saXN0IF9faW9tZW0gKikgUGt0UDsKIAkJd3JpdGV3KFRQTlVMTCwgJnRtcF9wb2ludGVyLT5wcmV2KTsKIAkJd3JpdGV3KFRQTlVMTCwgJnRtcF9wb2ludGVyLT5uZXh0KTsKIAl9CkBAIC02NDcsMTAgKzY0NywxMCBAQAogKiogcmVsZXZhbnQgcGFja2V0LCBbaGF2aW5nIGNsZWFyZWQgdGhlIFBLVF9JTl9VU0UgYml0XS4gSWYgUEtUX0lOX1VTRSBpcyBjbGVhciwKICoqIHRoZW4gY2FuX3JlbW92ZV9yZWNlaXZlKCkgcmV0dXJucyAwLgogKi8KLWludCBjYW5fcmVtb3ZlX3JlY2VpdmUoc3RydWN0IFBLVCAqKlBrdFAsIHN0cnVjdCBQb3J0ICpQb3J0UCkKK2ludCBjYW5fcmVtb3ZlX3JlY2VpdmUoc3RydWN0IFBLVCBfX2lvbWVtICoqUGt0UCwgc3RydWN0IFBvcnQgKlBvcnRQKQogewogCWlmIChyZWFkdyhQb3J0UC0+UnhSZW1vdmUpICYgUEtUX0lOX1VTRSkgewotCQkqUGt0UCA9IChzdHJ1Y3QgUEtUICopIFJJT19QVFIoUG9ydFAtPkNhZGRyLCByZWFkdyhQb3J0UC0+UnhSZW1vdmUpICYgflBLVF9JTl9VU0UpOworCQkqUGt0UCA9IChzdHJ1Y3QgUEtUIF9faW9tZW0gKikgUklPX1BUUihQb3J0UC0+Q2FkZHIsIHJlYWR3KFBvcnRQLT5SeFJlbW92ZSkgJiB+UEtUX0lOX1VTRSk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYwppbmRleCAzNTcwODUzLi5hOTlmM2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3JvdXRlLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9yb3V0ZS5jCkBAIC04Niw5ICs4Niw5IEBACiAqKiBJbmNvbWluZyBvbiB0aGUgUk9VVEVfUlVQCiAqKiBJIHdyb3RlIHRoaXMgd2hpbGUgSSB3YXMgdGlyZWQuIEZvcmdpdmUgbWUuCiAqLwotaW50IFJJT1JvdXRlUnVwKHN0cnVjdCByaW9faW5mbyAqcCwgdW5zaWduZWQgaW50IFJ1cCwgc3RydWN0IEhvc3QgKkhvc3RQLCBzdHJ1Y3QgUEtUICogUGFja2V0UCkKK2ludCBSSU9Sb3V0ZVJ1cChzdHJ1Y3QgcmlvX2luZm8gKnAsIHVuc2lnbmVkIGludCBSdXAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgc3RydWN0IFBLVCBfX2lvbWVtICogUGFja2V0UCkKIHsKLQlzdHJ1Y3QgUGt0Q21kICpQa3RDbWRQID0gKHN0cnVjdCBQa3RDbWQgKikgUGFja2V0UC0+ZGF0YTsKKwlzdHJ1Y3QgUGt0Q21kIF9faW9tZW0gKlBrdENtZFAgPSAoc3RydWN0IFBrdENtZCBfX2lvbWVtICopIFBhY2tldFAtPmRhdGE7CiAJc3RydWN0IFBrdENtZF9NICpQa3RSZXBseVA7CiAJc3RydWN0IENtZEJsayAqQ21kQmxrUDsKIAlzdHJ1Y3QgUG9ydCAqUG9ydFA7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAlpZiAoIVJJT0Jvb3RPayhwLCBIb3N0UCwgUnRhVW5pcSkpIHsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1JPVVRFLCAiUlRBICV4IHRyaWVkIHRvIGdldCBhbiBJRCwgYnV0IGRvZXMgbm90IGJlbG9uZyAtIEZPQUQgaXQhXG4iLCBSdGFVbmlxKTsKIAkJUGt0UmVwbHlQLT5Db21tYW5kID0gUk9VVEVfRk9BRDsKLQkJSG9zdFAtPkNvcHkoIlJUX0ZPQUQiLCBQa3RSZXBseVAtPkNvbW1hbmRUZXh0LCA3KTsKKwkJbWVtY3B5KFBrdFJlcGx5UC0+Q29tbWFuZFRleHQsICJSVF9GT0FEIiwgNyk7CiAJCVJJT1F1ZXVlQ21kQmxrKEhvc3RQLCBSdXAsIENtZEJsa1ApOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJCQkJSG9zdFAtPk1hcHBpbmdbVGhpc1VuaXRdLkZsYWdzIHw9IE1TR19ET05FOwogCQkJCX0KIAkJCQlQa3RSZXBseVAtPkNvbW1hbmQgPSBST1VURV9GT0FEOwotCQkJCUhvc3RQLT5Db3B5KCJSVF9GT0FEIiwgUGt0UmVwbHlQLT5Db21tYW5kVGV4dCwgNyk7CisJCQkJbWVtY3B5KFBrdFJlcGx5UC0+Q29tbWFuZFRleHQsICJSVF9GT0FEIiwgNyk7CiAJCQkJUklPUXVldWVDbWRCbGsoSG9zdFAsIFJ1cCwgQ21kQmxrUCk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CkBAIC0zNjcsNyArMzY3LDcgQEAKIAkJCQlQa3RSZXBseVAtPklETnVtMiA9IFJPVVRFX05PX0lEOwogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19ST1VURSwgIlJUQSAnJXMnIGhhcyBiZWVuIGFsbG9jYXRlZCBJRCAlZFxuIiwgSG9zdFAtPk1hcHBpbmdbVGhpc1VuaXRdLk5hbWUsIFBrdFJlcGx5UC0+SUROdW0pOwogCQkJfQotCQkJSG9zdFAtPkNvcHkoIlJUX0FMTE9DQVQiLCBQa3RSZXBseVAtPkNvbW1hbmRUZXh0LCAxMCk7CisJCQltZW1jcHkoUGt0UmVwbHlQLT5Db21tYW5kVGV4dCwgIlJUX0FMTE9DQVQiLCAxMCk7CiAKIAkJCVJJT1F1ZXVlQ21kQmxrKEhvc3RQLCBSdXAsIENtZEJsa1ApOwogCkBAIC00NjksNyArNDY5LDcgQEAKIAkJfQogCiAJCVBrdFJlcGx5UC0+Q29tbWFuZCA9IFJPVVRFX0ZPQUQ7Ci0JCUhvc3RQLT5Db3B5KCJSVF9GT0FEIiwgUGt0UmVwbHlQLT5Db21tYW5kVGV4dCwgNyk7CisJCW1lbWNweShQa3RSZXBseVAtPkNvbW1hbmRUZXh0LCAiUlRfRk9BRCIsIDcpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqKiB3ZSBkaWQgYm9vdCBpdCAoYXMgYW4gZXh0cmEpLCBhbmQgdGhlcmUgbWF5IG5vdyBiZSBhIHRhYmxlCkBAIC00ODksNyArNDg5LDcgQEAKIAkJCX0KIAkJfQogCQlQa3RSZXBseVAtPkNvbW1hbmQgPSBST1VURV9VU0VEOwotCQlIb3N0UC0+Q29weSgiUlRfVVNFRCIsIFBrdFJlcGx5UC0+Q29tbWFuZFRleHQsIDcpOworCQltZW1jcHkoUGt0UmVwbHlQLT5Db21tYW5kVGV4dCwgIlJUX1VTRUQiLCA3KTsKIAl9CiAJUklPUXVldWVDbWRCbGsoSG9zdFAsIFJ1cCwgQ21kQmxrUCk7CiAJcmV0dXJuIDE7CkBAIC01MTcsOCArNTE3LDggQEAKIAogCQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUE9SVFNfUEVSX1JUQTsgcG9ydCsrLCBQb3J0TisrKSB7CiAJCQl1bnNpZ25lZCBzaG9ydCBkZXN0X3BvcnQgPSBwb3J0ICsgODsKLQkJCXUxNiAqVHhQa3RQOwotCQkJc3RydWN0IFBLVCAqUGt0OworCQkJdTE2IF9faW9tZW0gKlR4UGt0UDsKKwkJCXN0cnVjdCBQS1QgX19pb21lbSAqUGt0OwogCiAJCQlQb3J0UCA9IHAtPlJJT1BvcnRwW1BvcnROXTsKIApAQCAtNTU1LDEyICs1NTUsMTIgQEAKIAkJCQkgKiogY2FyZC4gVGhpcyBuZWVkcyB0byBiZSB0cmFuc2xhdGVkIGludG8gYSAzMiBiaXQgcG9pbnRlcgogCQkJCSAqKiBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgZnJvbSB0aGUgZHJpdmVyLgogCQkJCSAqLwotCQkJCVBrdCA9IChzdHJ1Y3QgUEtUICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdyhUeFBrdFApKTsKKwkJCQlQa3QgPSAoc3RydWN0IFBLVCBfX2lvbWVtICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdyhUeFBrdFApKTsKIAogCQkJCS8qCiAJCQkJICoqIElmIHRoZSBwYWNrZXQgaXMgdXNlZCwgcmVzZXQgaXQuCiAJCQkJICovCi0JCQkJUGt0ID0gKHN0cnVjdCBQS1QgKikgKCh1bnNpZ25lZCBsb25nKSBQa3QgJiB+UEtUX0lOX1VTRSk7CisJCQkJUGt0ID0gKHN0cnVjdCBQS1QgX19pb21lbSAqKSAoKHVuc2lnbmVkIGxvbmcpIFBrdCAmIH5QS1RfSU5fVVNFKTsKIAkJCQl3cml0ZWIoZGVzdF91bml0LCAmUGt0LT5kZXN0X3VuaXQpOwogCQkJCXdyaXRlYihkZXN0X3BvcnQsICZQa3QtPmRlc3RfcG9ydCk7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RhYmxlLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RhYmxlLmMKaW5kZXggZDNhYmUwZC4uN2U5ODgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW90YWJsZS5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvdGFibGUuYwpAQCAtNTM0LDggKzUzNCw4IEBACiAJCQkJCQlpZiAoUG9ydFAtPlNlY29uZEJsb2NrKSB7CiAJCQkJCQkJdTE2IGRlc3RfdW5pdCA9IEhvc3RNYXBQLT5JRDsKIAkJCQkJCQl1MTYgZGVzdF9wb3J0ID0gcG9ydCAtIFN5c1BvcnQ7Ci0JCQkJCQkJdTE2ICpUeFBrdFA7Ci0JCQkJCQkJc3RydWN0IFBLVCAqUGt0OworCQkJCQkJCXUxNiBfX2lvbWVtICpUeFBrdFA7CisJCQkJCQkJc3RydWN0IFBLVCBfX2lvbWVtICpQa3Q7CiAKIAkJCQkJCQlmb3IgKFR4UGt0UCA9IFBvcnRQLT5UeFN0YXJ0OyBUeFBrdFAgPD0gUG9ydFAtPlR4RW5kOyBUeFBrdFArKykgewogCQkJCQkJCQkvKgpAQCAtNTQ1LDEyICs1NDUsMTIgQEAKIAkJCQkJCQkJICoqIGEgMzIgYml0IHBvaW50ZXIgc28gaXQgY2FuIGJlCiAJCQkJCQkJCSAqKiBhY2Nlc3NlZCBmcm9tIHRoZSBkcml2ZXIuCiAJCQkJCQkJCSAqLwotCQkJCQkJCQlQa3QgPSAoc3RydWN0IFBLVCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJipUeFBrdFApKTsKLQkJCQkJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RBQkxFLCAiVHggcGFja2V0ICgleCkgZGVzdGluYXRpb246IE9sZCAleDoleCBOZXcgJXg6JXhcbiIsICpUeFBrdFAsIFBrdC0+ZGVzdF91bml0LCBQa3QtPmRlc3RfcG9ydCwgZGVzdF91bml0LCBkZXN0X3BvcnQpOworCQkJCQkJCQlQa3QgPSAoc3RydWN0IFBLVCBfX2lvbWVtICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmKlR4UGt0UCkpOworCQkJCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJUeCBwYWNrZXQgKCV4KSBkZXN0aW5hdGlvbjogT2xkICV4OiV4IE5ldyAleDoleFxuIiwgcmVhZHcoVHhQa3RQKSwgcmVhZGIoJlBrdC0+ZGVzdF91bml0KSwgcmVhZGIoJlBrdC0+ZGVzdF9wb3J0KSwgZGVzdF91bml0LCBkZXN0X3BvcnQpOwogCQkJCQkJCQl3cml0ZXcoZGVzdF91bml0LCAmUGt0LT5kZXN0X3VuaXQpOwogCQkJCQkJCQl3cml0ZXcoZGVzdF9wb3J0LCAmUGt0LT5kZXN0X3BvcnQpOwogCQkJCQkJCX0KLQkJCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJQb3J0ICVkIHBoYiBkZXN0aW5hdGlvbjogT2xkICV4OiV4IE5ldyAleDoleFxuIiwgcG9ydCwgUG9ydFAtPlBoYlAtPmRlc3RpbmF0aW9uICYgMHhmZiwgKFBvcnRQLT5QaGJQLT5kZXN0aW5hdGlvbiA+PiA4KSAmIDB4ZmYsIGRlc3RfdW5pdCwgZGVzdF9wb3J0KTsKKwkJCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJQb3J0ICVkIHBoYiBkZXN0aW5hdGlvbjogT2xkICV4OiV4IE5ldyAleDoleFxuIiwgcG9ydCwgcmVhZGIoJlBvcnRQLT5QaGJQLT5kZXN0aW5hdGlvbikgJiAweGZmLCAocmVhZGIoJlBvcnRQLT5QaGJQLT5kZXN0aW5hdGlvbikgPj4gOCkgJiAweGZmLCBkZXN0X3VuaXQsIGRlc3RfcG9ydCk7CiAJCQkJCQkJd3JpdGV3KGRlc3RfdW5pdCArIChkZXN0X3BvcnQgPDwgOCksICZQb3J0UC0+UGhiUC0+ZGVzdGluYXRpb24pOwogCQkJCQkJfQogCQkJCQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBzZW1fZmxhZ3MpOwpAQCAtNzgxLDEzICs3ODEsMTMgQEAKIAkJICoqIHVubGVzcyB0aGUgaG9zdCBoYXMgYmVlbiBib290ZWQKIAkJICovCiAJCWlmICgoSG9zdFAtPkZsYWdzICYgUlVOX1NUQVRFKSA9PSBSQ19SVU5OSU5HKSB7Ci0JCQlzdHJ1Y3QgUEhCICpQaGJQID0gUG9ydFAtPlBoYlAgPSAmSG9zdFAtPlBoYlBbSG9zdFBvcnRdOwotCQkJUG9ydFAtPlR4QWRkID0gKHUxNiAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlBoYlAtPnR4X2FkZCkpOwotCQkJUG9ydFAtPlR4U3RhcnQgPSAodTE2ICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmUGhiUC0+dHhfc3RhcnQpKTsKLQkJCVBvcnRQLT5UeEVuZCA9ICh1MTYgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZQaGJQLT50eF9lbmQpKTsKLQkJCVBvcnRQLT5SeFJlbW92ZSA9ICh1MTYgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZQaGJQLT5yeF9yZW1vdmUpKTsKLQkJCVBvcnRQLT5SeFN0YXJ0ID0gKHUxNiAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlBoYlAtPnJ4X3N0YXJ0KSk7Ci0JCQlQb3J0UC0+UnhFbmQgPSAodTE2ICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmUGhiUC0+cnhfZW5kKSk7CisJCQlzdHJ1Y3QgUEhCIF9faW9tZW0gKlBoYlAgPSBQb3J0UC0+UGhiUCA9ICZIb3N0UC0+UGhiUFtIb3N0UG9ydF07CisJCQlQb3J0UC0+VHhBZGQgPSAodTE2IF9faW9tZW0gKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZQaGJQLT50eF9hZGQpKTsKKwkJCVBvcnRQLT5UeFN0YXJ0ID0gKHUxNiBfX2lvbWVtICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmUGhiUC0+dHhfc3RhcnQpKTsKKwkJCVBvcnRQLT5UeEVuZCA9ICh1MTYgX19pb21lbSAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlBoYlAtPnR4X2VuZCkpOworCQkJUG9ydFAtPlJ4UmVtb3ZlID0gKHUxNiBfX2lvbWVtICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmUGhiUC0+cnhfcmVtb3ZlKSk7CisJCQlQb3J0UC0+UnhTdGFydCA9ICh1MTYgX19pb21lbSAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlBoYlAtPnJ4X3N0YXJ0KSk7CisJCQlQb3J0UC0+UnhFbmQgPSAodTE2IF9faW9tZW0gKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZQaGJQLT5yeF9lbmQpKTsKIAkJfSBlbHNlCiAJCQlQb3J0UC0+UGhiUCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jCmluZGV4IDIwNDI2NzYuLmE0ZjBiMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90dHkuYwpAQCAtNTc2LDcgKzU3Niw3IEBACiAqLwogaW50IFJJT1Nob3J0Q29tbWFuZChzdHJ1Y3QgcmlvX2luZm8gKnAsIHN0cnVjdCBQb3J0ICpQb3J0UCwgaW50IGNvbW1hbmQsIGludCBsZW4sIGludCBhcmcpCiB7Ci0Jc3RydWN0IFBLVCAqUGFja2V0UDsKKwlzdHJ1Y3QgUEtUIF9faW9tZW0gKlBhY2tldFA7CiAJaW50IHJldHJpZXMgPSAyMDsJLyogYXQgMTAgcGVyIHNlY29uZCAtPiAyIHNlY29uZHMgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3VuaXhydXAuaCBiL2RyaXZlcnMvY2hhci9yaW8vdW5peHJ1cC5oCmluZGV4IDQzMDZlMDEuLjQ2YmQ1MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vdW5peHJ1cC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vdW5peHJ1cC5oCkBAIC00NCw3ICs0NCw3IEBACiBzdHJ1Y3QgVW5peFJ1cCB7CiAJc3RydWN0IENtZEJsayAqQ21kc1dhaXRpbmdQOwkvKiBDb21tYW5kcyB3YWl0aW5nIHRvIGJlIGRvbmUgKi8KIAlzdHJ1Y3QgQ21kQmxrICpDbWRQZW5kaW5nUDsJLyogVGhlIGNvbW1hbmQgY3VycmVudGx5IGJlaW5nIHNlbnQgKi8KLQlzdHJ1Y3QgUlVQICpSdXBQOwkvKiB0aGUgUnVwIHRvIHNlbmQgaXQgdG8gKi8KKwlzdHJ1Y3QgUlVQIF9faW9tZW0gKlJ1cFA7CS8qIHRoZSBSdXAgdG8gc2VuZCBpdCB0byAqLwogCXVuc2lnbmVkIGludCBJZDsJCS8qIElkIG51bWJlciAqLwogCXVuc2lnbmVkIGludCBCYXNlU3lzUG9ydDsJLyogU3lzUG9ydCBvZiBmaXJzdCB0dHkgb24gdGhpcyBSVEEgKi8KIAl1bnNpZ25lZCBpbnQgTW9kVHlwZXM7CQkvKiBNb2R1bGVzIG9uIHRoaXMgUlRBICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9zZGhjaS5jIGIvZHJpdmVycy9tbWMvc2RoY2kuYwppbmRleCBiMDA1MzI4Li42YmZjZGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL3NkaGNpLmMKQEAgLTEwNzMsNyArMTA3Myw3IEBACiAJdGFza2xldF9pbml0KCZob3N0LT5maW5pc2hfdGFza2xldCwKIAkJc2RoY2lfdGFza2xldF9maW5pc2gsICh1bnNpZ25lZCBsb25nKWhvc3QpOwogCi0Jc2V0dXBfdGltZXIoJmhvc3QtPnRpbWVyLCBzZGhjaV90aW1lb3V0X3RpbWVyLCAoaW50KWhvc3QpOworCXNldHVwX3RpbWVyKCZob3N0LT50aW1lciwgc2RoY2lfdGltZW91dF90aW1lciwgKGxvbmcpaG9zdCk7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIHNkaGNpX2lycSwgU0FfU0hJUlEsCiAJCWhvc3QtPnNsb3RfZGVzY3IsIGhvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL0tjb25maWcKaW5kZXggZjZiNzc1ZS4uNWFjMjY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCkBAIC03OCw3ICs3OCw3IEBACiAJICBvcHRpb24uCiAKIAkgIFRoZSBvcHRpb24gc3BlY2lmaWVzIHdoaWNoIEZsYXNoIHNlY3RvcnMgaG9sZHMgdGhlIFJlZEJvb3QKLQkgIHBhcnRpdGlvbiB0YWJsZS4gIEEgemVybyBvciBwb3NpdGl2ZSB2YWx1ZSBnaXZlcyBhbiBhYnNvbGV0ZQorCSAgcGFydGl0aW9uIHRhYmxlLiAgQSB6ZXJvIG9yIHBvc2l0aXZlIHZhbHVlIGdpdmVzIGFuIGFic29sdXRlCiAJICBlcmFzZSBibG9jayBudW1iZXIuIEEgbmVnYXRpdmUgdmFsdWUgc3BlY2lmaWVzIGEgbnVtYmVyIG9mCiAJICBzZWN0b3JzIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBkZXZpY2UuCiAKQEAgLTEwMyw3ICsxMDMsNyBAQAogCWJvb2wgIkNvbW1hbmQgbGluZSBwYXJ0aXRpb24gdGFibGUgcGFyc2luZyIKIAlkZXBlbmRzIG9uIE1URF9QQVJUSVRJT05TID0gInkiCiAJLS0taGVscC0tLQotCSAgQWxsb3cgZ2VuZXJpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBNVEQgcGFyaXRpdGlvbiB0YWJsZXMgdmlhIHRoZSBrZXJuZWwKKwkgIEFsbG93IGdlbmVyaWMgY29uZmlndXJhdGlvbiBvZiB0aGUgTVREIHBhcnRpdGlvbiB0YWJsZXMgdmlhIHRoZSBrZXJuZWwKIAkgIGNvbW1hbmQgbGluZS4gTXVsdGlwbGUgZmxhc2ggcmVzb3VyY2VzIGFyZSBzdXBwb3J0ZWQgZm9yIGhhcmR3YXJlIHdoZXJlCiAJICBkaWZmZXJlbnQga2luZHMgb2YgZmxhc2ggbWVtb3J5IGFyZSBhdmFpbGFibGUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCmluZGV4IGE3ZWM1OTUuLjZkOGYzMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwpAQCAtMzAsNyArMzAsNiBAQAogCiBjb25maWcgTVREX0dFTl9QUk9CRQogCXRyaXN0YXRlCi0Jc2VsZWN0IE9CU09MRVRFX0lOVEVSTU9EVUxFCiAKIGNvbmZpZyBNVERfQ0ZJX0FEVl9PUFRJT05TCiAJYm9vbCAiRmxhc2ggY2hpcCBkcml2ZXIgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9jaGlwcy9NYWtlZmlsZQppbmRleCA4YWZlMzA5Li43NWJjMWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9jaGlwcy9NYWtlZmlsZQpAQCAtMywxMyArMyw2IEBACiAjCiAjICRJZDogTWFrZWZpbGUuY29tbW9uLHYgMS41IDIwMDUvMTEvMDcgMTE6MTQ6MjIgZ2xlaXhuZXIgRXhwICQKIAotIyAgICAgICAgICAgICAgICAgICAgICAgKioqIEJJRyBVR0xZIE5PVEUgKioqCi0jCi0jIFRoZSByZW1vdmFsIG9mIGdldF9tb2R1bGVfc3ltYm9sKCkgYW5kIHJlcGxhY2VtZW50IHdpdGgKLSMgaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKCkgZXQgYWwgaGFzIGludHJvZHVjZWQgYSBsaW5rIG9yZGVyIGRlcGVuZGVuY3kKLSMgaGVyZSB3aGVyZSBwcmV2aW91c2x5IHRoZXJlIHdhcyBub25lLiAgV2Ugbm93IGhhdmUgdG8gZW5zdXJlIHRoYXQKLSMgdGhlIENGSSBjb21tYW5kIHNldCBkcml2ZXJzIGFyZSBsaW5rZWQgYmVmb3JlIGdlbl9wcm9iZS5vCi0KIG9iai0kKENPTkZJR19NVEQpCQkrPSBjaGlwcmVnLm8KIG9iai0kKENPTkZJR19NVERfQU1EU1REKQkrPSBhbWRfZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9DRkkpCQkrPSBjZmlfcHJvYmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvYW1kX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYwppbmRleCA1NzExNTYxLi4xNmVhY2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYwpAQCAtOTcsNyArOTcsNiBAQAogCWludCBpbnRlcmxlYXZlOwogCWludCBudW1jaGlwczsKIAl1bnNpZ25lZCBsb25nIGNoaXBzaGlmdDsKLS8vCWNvbnN0IGNoYXIgKmltX25hbWU7CiAJc3RydWN0IGZsY2hpcCBjaGlwc1swXTsKIH07CiAKQEAgLTEzMSwxMiArMTMwLDYgQEAKIAkubW9kdWxlID0gVEhJU19NT0RVTEUKIH07CiAKLQotCi1zdGF0aWMgY29uc3QgY2hhciBpbV9uYW1lW10gPSAiYW1kX2ZsYXNoIjsKLQotCi0KIHN0YXRpYyBpbmxpbmUgX191MzIgd2lkZV9yZWFkKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UzMiBhZGRyKQogewogCWlmIChtYXAtPmJ1c3dpZHRoID09IDEpIHsKQEAgLTczNyw2ICs3MzAsNyBAQAogCQlvZmZzZXQgKz0gZGV2X3NpemU7CiAJfQogCW10ZC0+dHlwZSA9IE1URF9OT1JGTEFTSDsKKwltdGQtPndyaXRlc2l6ZSA9IDE7CiAJbXRkLT5mbGFncyA9IE1URF9DQVBfTk9SRkxBU0g7CiAJbXRkLT5uYW1lID0gbWFwLT5uYW1lOwogCW10ZC0+ZXJhc2UgPSBhbWRfZmxhc2hfZXJhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCmluZGV4IDFjMDc0ZDYuLjBkNDM1ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCkBAIC0zMzEsMTMgKzMzMSw2IEBACiAJcmV0dXJuIGV4dHA7CiB9CiAKLS8qIFRoaXMgcm91dGluZSBpcyBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBtdGQgY29kZSB2aWEKLSAqIGludGVyX21vZHVsZV9yZWdpc3Rlci4gIEl0IG11c3Qgb25seSBiZSBhY2Nlc3NlZCB0aHJvdWdoCi0gKiBpbnRlcl9tb2R1bGVfZ2V0IHdoaWNoIHdpbGwgYnVtcCB0aGUgdXNlIGNvdW50IG9mIHRoaXMgbW9kdWxlLiAgVGhlCi0gKiBhZGRyZXNzZXMgcGFzc2VkIGJhY2sgaW4gY2ZpIGFyZSB2YWxpZCBhcyBsb25nIGFzIHRoZSB1c2UgY291bnQgb2YKLSAqIHRoaXMgbW9kdWxlIGlzIG5vbi16ZXJvLCBpLmUuIGJldHdlZW4gaW50ZXJfbW9kdWxlX2dldCBhbmQKLSAqIGludGVyX21vZHVsZV9wdXQuICBLZWl0aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiAyOSBPY3QgMjAwMC4KLSAqLwogc3RydWN0IG10ZF9pbmZvICpjZmlfY21kc2V0XzAwMDEoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBwcmltYXJ5KQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwpAQCAtNDA2LDcgKzM5OSw3IEBACiAJZm9yIChpPTA7IGk8IGNmaS0+bnVtY2hpcHM7IGkrKykgewogCQljZmktPmNoaXBzW2ldLndvcmRfd3JpdGVfdGltZSA9IDE8PGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dFR5cDsKIAkJY2ZpLT5jaGlwc1tpXS5idWZmZXJfd3JpdGVfdGltZSA9IDE8PGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0VHlwOwotCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWUgPSAxPDxjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0VHlwOworCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWUgPSAxMDAwPDxjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0VHlwOwogCQljZmktPmNoaXBzW2ldLnJlZl9wb2ludF9jb3VudGVyID0gMDsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmKGNmaS0+Y2hpcHNbaV0ud3EpKTsKIAl9CkBAIC00MTUsNiArNDA4LDExIEBACiAKIAlyZXR1cm4gY2ZpX2ludGVsZXh0X3NldHVwKG10ZCk7CiB9CitzdHJ1Y3QgbXRkX2luZm8gKmNmaV9jbWRzZXRfMDAwMyhzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IHByaW1hcnkpIF9fYXR0cmlidXRlX18oKGFsaWFzKCJjZmlfY21kc2V0XzAwMDEiKSkpOworc3RydWN0IG10ZF9pbmZvICpjZmlfY21kc2V0XzAyMDAoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBwcmltYXJ5KSBfX2F0dHJpYnV0ZV9fKChhbGlhcygiY2ZpX2NtZHNldF8wMDAxIikpKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNmaV9jbWRzZXRfMDAwMSk7CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfY21kc2V0XzAwMDMpOworRVhQT1JUX1NZTUJPTF9HUEwoY2ZpX2NtZHNldF8wMjAwKTsKIAogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqY2ZpX2ludGVsZXh0X3NldHVwKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewpAQCAtNTQ3LDEyICs1NDUsMTIgQEAKIAkJaWYgKGV4dHAtPk1pbm9yVmVyc2lvbiA+PSAnNCcpIHsKIAkJCXN0cnVjdCBjZmlfaW50ZWxleHRfcHJvZ3JhbW1pbmdfcmVnaW9uaW5mbyAqcHJpbmZvOwogCQkJcHJpbmZvID0gKHN0cnVjdCBjZmlfaW50ZWxleHRfcHJvZ3JhbW1pbmdfcmVnaW9uaW5mbyAqKSZleHRwLT5leHRyYVtvZmZzXTsKLQkJCU1URF9QUk9HUkVHSU9OX1NJWkUobXRkKSA9IGNmaS0+aW50ZXJsZWF2ZSA8PCBwcmluZm8tPlByb2dSZWdTaGlmdDsKKwkJCW10ZC0+d3JpdGVzaXplID0gY2ZpLT5pbnRlcmxlYXZlIDw8IHByaW5mby0+UHJvZ1JlZ1NoaWZ0OwogCQkJTVREX1BST0dSRUdJT05fQ1RSTE1PREVfVkFMSUQobXRkKSA9IGNmaS0+aW50ZXJsZWF2ZSAqIHByaW5mby0+Q29udHJvbFZhbGlkOwogCQkJTVREX1BST0dSRUdJT05fQ1RSTE1PREVfSU5WQUxJRChtdGQpID0gY2ZpLT5pbnRlcmxlYXZlICogcHJpbmZvLT5Db250cm9sSW52YWxpZDsKLQkJCW10ZC0+ZmxhZ3MgfD0gTVREX1BST0dSQU1fUkVHSU9OUzsKKwkJCW10ZC0+ZmxhZ3MgJj0gfk1URF9CSVRfV1JJVEVBQkxFOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcm9ncmFtIHJlZ2lvbiBzaXplL2N0cmxfdmFsaWQvY3RybF9pbnZhbCA9ICVkLyVkLyVkXG4iLAotCQkJICAgICAgIG1hcC0+bmFtZSwgTVREX1BST0dSRUdJT05fU0laRShtdGQpLAorCQkJICAgICAgIG1hcC0+bmFtZSwgbXRkLT53cml0ZXNpemUsCiAJCQkgICAgICAgTVREX1BST0dSRUdJT05fQ1RSTE1PREVfVkFMSUQobXRkKSwKIAkJCSAgICAgICBNVERfUFJPR1JFR0lPTl9DVFJMTU9ERV9JTlZBTElEKG10ZCkpOwogCQl9CkBAIC04OTYsMjYgKzg5NCwzMyBAQAogCiAvKgogICogV2hlbiBhIGRlbGF5IGlzIHJlcXVpcmVkIGZvciB0aGUgZmxhc2ggb3BlcmF0aW9uIHRvIGNvbXBsZXRlLCB0aGUKLSAqIHhpcF91ZGVsYXkoKSBmdW5jdGlvbiBpcyBwb2xsaW5nIGZvciBib3RoIHRoZSBnaXZlbiB0aW1lb3V0IGFuZCBwZW5kaW5nCi0gKiAoYnV0IHN0aWxsIG1hc2tlZCkgaGFyZHdhcmUgaW50ZXJydXB0cy4gIFdoZW5ldmVyIHRoZXJlIGlzIGFuIGludGVycnVwdAotICogcGVuZGluZyB0aGVuIHRoZSBmbGFzaCBlcmFzZSBvciB3cml0ZSBvcGVyYXRpb24gaXMgc3VzcGVuZGVkLCBhcnJheSBtb2RlCi0gKiByZXN0b3JlZCBhbmQgaW50ZXJydXB0cyB1bm1hc2tlZC4gIFRhc2sgc2NoZWR1bGluZyBtaWdodCBhbHNvIGhhcHBlbiBhdCB0aGF0Ci0gKiBwb2ludC4gIFRoZSBDUFUgZXZlbnR1YWxseSByZXR1cm5zIGZyb20gdGhlIGludGVycnVwdCBvciB0aGUgY2FsbCB0bwotICogc2NoZWR1bGUoKSBhbmQgdGhlIHN1c3BlbmRlZCBmbGFzaCBvcGVyYXRpb24gaXMgcmVzdW1lZCBmb3IgdGhlIHJlbWFpbmluZwotICogb2YgdGhlIGRlbGF5IHBlcmlvZC4KKyAqIHhpcF93YWl0X2Zvcl9vcGVyYXRpb24oKSBmdW5jdGlvbiBpcyBwb2xsaW5nIGZvciBib3RoIHRoZSBnaXZlbiB0aW1lb3V0CisgKiBhbmQgcGVuZGluZyAoYnV0IHN0aWxsIG1hc2tlZCkgaGFyZHdhcmUgaW50ZXJydXB0cy4gIFdoZW5ldmVyIHRoZXJlIGlzIGFuCisgKiBpbnRlcnJ1cHQgcGVuZGluZyB0aGVuIHRoZSBmbGFzaCBlcmFzZSBvciB3cml0ZSBvcGVyYXRpb24gaXMgc3VzcGVuZGVkLAorICogYXJyYXkgbW9kZSByZXN0b3JlZCBhbmQgaW50ZXJydXB0cyB1bm1hc2tlZC4gIFRhc2sgc2NoZWR1bGluZyBtaWdodCBhbHNvCisgKiBoYXBwZW4gYXQgdGhhdCBwb2ludC4gIFRoZSBDUFUgZXZlbnR1YWxseSByZXR1cm5zIGZyb20gdGhlIGludGVycnVwdCBvcgorICogdGhlIGNhbGwgdG8gc2NoZWR1bGUoKSBhbmQgdGhlIHN1c3BlbmRlZCBmbGFzaCBvcGVyYXRpb24gaXMgcmVzdW1lZCBmb3IKKyAqIHRoZSByZW1haW5pbmcgb2YgdGhlIGRlbGF5IHBlcmlvZC4KICAqCiAgKiBXYXJuaW5nOiB0aGlzIGZ1bmN0aW9uIF93aWxsXyBmb29sIGludGVycnVwdCBsYXRlbmN5IHRyYWNpbmcgdG9vbHMuCiAgKi8KIAotc3RhdGljIHZvaWQgX194aXByYW0geGlwX3VkZWxheShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKLQkJCQl1bnNpZ25lZCBsb25nIGFkciwgaW50IHVzZWMpCitzdGF0aWMgaW50IF9feGlwcmFtIHhpcF93YWl0X2Zvcl9vcGVyYXRpb24oCisJCXN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLAorCQl1bnNpZ25lZCBsb25nIGFkciwgaW50ICpjaGlwX29wX3RpbWUgKQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwogCXN0cnVjdCBjZmlfcHJpX2ludGVsZXh0ICpjZmlwID0gY2ZpLT5jbWRzZXRfcHJpdjsKIAltYXBfd29yZCBzdGF0dXMsIE9LID0gQ01EKDB4ODApOwotCXVuc2lnbmVkIGxvbmcgc3VzcGVuZGVkLCBzdGFydCA9IHhpcF9jdXJydGltZSgpOworCXVuc2lnbmVkIGxvbmcgdXNlYywgc3VzcGVuZGVkLCBzdGFydCwgZG9uZTsKIAlmbHN0YXRlX3Qgb2xkc3RhdGUsIG5ld3N0YXRlOwogCisgICAgICAgCXN0YXJ0ID0geGlwX2N1cnJ0aW1lKCk7CisJdXNlYyA9ICpjaGlwX29wX3RpbWUgKiA4OworCWlmICh1c2VjID09IDApCisJCXVzZWMgPSA1MDAwMDA7CisJZG9uZSA9IDA7CisKIAlkbyB7CiAJCWNwdV9yZWxheCgpOwogCQlpZiAoeGlwX2lycXBlbmRpbmcoKSAmJiBjZmlwICYmCkBAIC05MzIsOSArOTM3LDkgQEAKIAkJCSAqIHdlIHJlc3VtZSB0aGUgd2hvbGUgdGhpbmcgYXQgb25jZSkuICBZZXMsIGl0CiAJCQkgKiBjYW4gaGFwcGVuIQogCQkJICovCisJCQl1c2VjIC09IGRvbmU7CiAJCQltYXBfd3JpdGUobWFwLCBDTUQoMHhiMCksIGFkcik7CiAJCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7Ci0JCQl1c2VjIC09IHhpcF9lbGFwc2VkX3NpbmNlKHN0YXJ0KTsKIAkJCXN1c3BlbmRlZCA9IHhpcF9jdXJydGltZSgpOwogCQkJZG8gewogCQkJCWlmICh4aXBfZWxhcHNlZF9zaW5jZShzdXNwZW5kZWQpID4gMTAwMDAwKSB7CkBAIC05NDQsNyArOTQ5LDcgQEAKIAkJCQkJICogVGhpcyBpcyBhIGNyaXRpY2FsIGVycm9yIGJ1dCB0aGVyZQogCQkJCQkgKiBpcyBub3QgbXVjaCB3ZSBjYW4gZG8gaGVyZS4KIAkJCQkJICovCi0JCQkJCXJldHVybjsKKwkJCQkJcmV0dXJuIC1FSU87CiAJCQkJfQogCQkJCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgYWRyKTsKIAkJCX0gd2hpbGUgKCFtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgT0ssIE9LKSk7CkBAIC0xMDA0LDY1ICsxMDA5LDEwNyBAQAogCQkJeGlwX2NwdV9pZGxlKCk7CiAJCX0KIAkJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBhZHIpOworCQlkb25lID0geGlwX2VsYXBzZWRfc2luY2Uoc3RhcnQpOwogCX0gd2hpbGUgKCFtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgT0ssIE9LKQotCQkgJiYgeGlwX2VsYXBzZWRfc2luY2Uoc3RhcnQpIDwgdXNlYyk7Ci19CisJCSAmJiBkb25lIDwgdXNlYyk7CiAKLSNkZWZpbmUgVURFTEFZKG1hcCwgY2hpcCwgYWRyLCB1c2VjKSAgeGlwX3VkZWxheShtYXAsIGNoaXAsIGFkciwgdXNlYykKKwlyZXR1cm4gKGRvbmUgPj0gdXNlYykgPyAtRVRJTUUgOiAwOworfQogCiAvKgogICogVGhlIElOVkFMSURBVEVfQ0FDSEVEX1JBTkdFKCkgbWFjcm8gaXMgbm9ybWFsbHkgdXNlZCBpbiBwYXJhbGxlbCB3aGlsZQogICogdGhlIGZsYXNoIGlzIGFjdGl2ZWx5IHByb2dyYW1taW5nIG9yIGVyYXNpbmcgc2luY2Ugd2UgaGF2ZSB0byBwb2xsIGZvcgogICogdGhlIG9wZXJhdGlvbiB0byBjb21wbGV0ZSBhbnl3YXkuICBXZSBjYW4ndCBkbyB0aGF0IGluIGEgZ2VuZXJpYyB3YXkgd2l0aAogICogYSBYSVAgc2V0dXAgc28gZG8gaXQgYmVmb3JlIHRoZSBhY3R1YWwgZmxhc2ggb3BlcmF0aW9uIGluIHRoaXMgY2FzZQotICogYW5kIHN0dWIgaXQgb3V0IGZyb20gSU5WQUxJREFURV9DQUNIRV9VREVMQVkuCisgKiBhbmQgc3R1YiBpdCBvdXQgZnJvbSBJTlZBTF9DQUNIRV9BTkRfV0FJVC4KICAqLwogI2RlZmluZSBYSVBfSU5WQUxfQ0FDSEVEX1JBTkdFKG1hcCwgZnJvbSwgc2l6ZSkgIFwKIAlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGZyb20sIHNpemUpCiAKLSNkZWZpbmUgSU5WQUxJREFURV9DQUNIRV9VREVMQVkobWFwLCBjaGlwLCBjbWRfYWRyLCBhZHIsIGxlbiwgdXNlYykgIFwKLQlVREVMQVkobWFwLCBjaGlwLCBjbWRfYWRyLCB1c2VjKQotCi0vKgotICogRXh0cmEgbm90ZXM6Ci0gKgotICogQWN0aXZhdGluZyB0aGlzIFhJUCBzdXBwb3J0IGNoYW5nZXMgdGhlIHdheSB0aGUgY29kZSB3b3JrcyBhIGJpdC4gIEZvcgotICogZXhhbXBsZSB0aGUgY29kZSB0byBzdXNwZW5kIHRoZSBjdXJyZW50IHByb2Nlc3Mgd2hlbiBjb25jdXJyZW50IGFjY2VzcwotICogaGFwcGVucyBpcyBuZXZlciBleGVjdXRlZCBiZWNhdXNlIHhpcF91ZGVsYXkoKSB3aWxsIGFsd2F5cyByZXR1cm4gd2l0aCB0aGUKLSAqIHNhbWUgY2hpcCBzdGF0ZSBhcyBpdCB3YXMgZW50ZXJlZCB3aXRoLiAgVGhpcyBpcyB3aHkgdGhlcmUgaXMgbm8gY2FyZSBmb3IKLSAqIHRoZSBwcmVzZW5jZSBvZiBhZGRfd2FpdF9xdWV1ZSgpIG9yIHNjaGVkdWxlKCkgY2FsbHMgZnJvbSB3aXRoaW4gYSBjb3VwbGUKLSAqIHhpcF9kaXNhYmxlKCknZCAgYXJlYXMgb2YgY29kZSwgbGlrZSBpbiBkb19lcmFzZV9vbmVibG9jayBmb3IgZXhhbXBsZS4KLSAqIFRoZSBxdWV1ZWluZyBhbmQgc2NoZWR1bGluZyBhcmUgYWx3YXlzIGhhcHBlbmluZyB3aXRoaW4geGlwX3VkZWxheSgpLgotICoKLSAqIFNpbWlsYXJseSwgZ2V0X2NoaXAoKSBhbmQgcHV0X2NoaXAoKSBqdXN0IGhhcHBlbiB0byBhbHdheXMgYmUgZXhlY3V0ZWQKLSAqIHdpdGggY2hpcC0+c3RhdGUgc2V0IHRvIEZMX1JFQURZIChvciBGTF9YSVBfV0hJTEVfKikgd2hlcmUgZmxhc2ggc3RhdGUKLSAqIGlzIGluIGFycmF5IG1vZGUsIHRoZXJlZm9yZSBuZXZlciBleGVjdXRpbmcgbWFueSBjYXNlcyB0aGVyZWluIGFuZCBub3QKLSAqIGNhdXNpbmcgYW55IHByb2JsZW0gd2l0aCBYSVAuCi0gKi8KKyNkZWZpbmUgSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBjbWRfYWRyLCBpbnZhbF9hZHIsIGludmFsX2xlbiwgcF91c2VjKSBcCisJeGlwX3dhaXRfZm9yX29wZXJhdGlvbihtYXAsIGNoaXAsIGNtZF9hZHIsIHBfdXNlYykKIAogI2Vsc2UKIAogI2RlZmluZSB4aXBfZGlzYWJsZShtYXAsIGNoaXAsIGFkcikKICNkZWZpbmUgeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcikKICNkZWZpbmUgWElQX0lOVkFMX0NBQ0hFRF9SQU5HRSh4Li4uKQorI2RlZmluZSBJTlZBTF9DQUNIRV9BTkRfV0FJVCBpbnZhbF9jYWNoZV9hbmRfd2FpdF9mb3Jfb3BlcmF0aW9uCiAKLSNkZWZpbmUgVURFTEFZKG1hcCwgY2hpcCwgYWRyLCB1c2VjKSAgXAotZG8geyAgXAotCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsgIFwKLQljZmlfdWRlbGF5KHVzZWMpOyAgXAotCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7ICBcCi19IHdoaWxlICgwKQorc3RhdGljIGludCBpbnZhbF9jYWNoZV9hbmRfd2FpdF9mb3Jfb3BlcmF0aW9uKAorCQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKKwkJdW5zaWduZWQgbG9uZyBjbWRfYWRyLCB1bnNpZ25lZCBsb25nIGludmFsX2FkciwgaW50IGludmFsX2xlbiwKKwkJaW50ICpjaGlwX29wX3RpbWUgKQoreworCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OworCW1hcF93b3JkIHN0YXR1cywgc3RhdHVzX09LID0gQ01EKDB4ODApOworCWludCB6LCBjaGlwX3N0YXRlID0gY2hpcC0+c3RhdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lbzsKIAotI2RlZmluZSBJTlZBTElEQVRFX0NBQ0hFX1VERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsIGFkciwgbGVuLCB1c2VjKSAgXAotZG8geyAgXAotCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsgIFwKLQlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGFkciwgbGVuKTsgIFwKLQljZmlfdWRlbGF5KHVzZWMpOyAgXAotCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7ICBcCi19IHdoaWxlICgwKQorCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKKwlpZiAoaW52YWxfbGVuKQorCQlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGludmFsX2FkciwgaW52YWxfbGVuKTsKKwlpZiAoKmNoaXBfb3BfdGltZSkKKwkJY2ZpX3VkZWxheSgqY2hpcF9vcF90aW1lKTsKKwlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOworCisJdGltZW8gPSAqY2hpcF9vcF90aW1lICogOCAqIEhaIC8gMTAwMDAwMDsKKwlpZiAodGltZW8gPCBIWi8yKQorCQl0aW1lbyA9IEhaLzI7CisJdGltZW8gKz0gamlmZmllczsKKworCXogPSAwOworCWZvciAoOzspIHsKKwkJaWYgKGNoaXAtPnN0YXRlICE9IGNoaXBfc3RhdGUpIHsKKwkJCS8qIFNvbWVvbmUncyBzdXNwZW5kZWQgdGhlIG9wZXJhdGlvbjogc2xlZXAgKi8KKwkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKKwkJCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKKwkJCXNjaGVkdWxlKCk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKKwkJCXRpbWVvID0gamlmZmllcyArIChIWiAvIDIpOyAvKiBGSVhNRSAqLworCQkJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKKwkJaWYgKG1hcF93b3JkX2FuZGVxdWFsKG1hcCwgc3RhdHVzLCBzdGF0dXNfT0ssIHN0YXR1c19PSykpCisJCQlicmVhazsKKworCQkvKiBPSyBTdGlsbCB3YWl0aW5nICovCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvKSkgeworCQkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKKwkJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCisJCS8qIExhdGVuY3kgaXNzdWVzLiBEcm9wIHRoZSBsb2NrLCB3YWl0IGEgd2hpbGUgYW5kIHJldHJ5ICovCisJCXorKzsKKwkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOworCQljZmlfdWRlbGF5KDEpOworCQlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOworCX0KKworCWlmICgheikgeworCQlpZiAoIS0tKCpjaGlwX29wX3RpbWUpKQorCQkJKmNoaXBfb3BfdGltZSA9IDE7CisJfSBlbHNlIGlmICh6ID4gMSkKKwkJKysoKmNoaXBfb3BfdGltZSk7CisKKwkvKiBEb25lIGFuZCBoYXBweS4gKi8KKyAJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CisJcmV0dXJuIDA7Cit9CiAKICNlbmRpZgogCisjZGVmaW5lIFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGFkciwgdWRlbGF5KSBcCisJKHsgaW50IF9fdWRlbGF5ID0gKHVkZWxheSk7IFwKKwkgICBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwgMCwgMCwgJl9fdWRlbGF5KTsgfSkKKworCiBzdGF0aWMgaW50IGRvX3BvaW50X29uZWNoaXAgKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLCBsb2ZmX3QgYWRyLCBzaXplX3QgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgY21kX2FkZHI7CkBAIC0xMjUyLDE0ICsxMjk5LDExIEBACiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkciwgbWFwX3dvcmQgZGF0dW0sIGludCBtb2RlKQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwotCW1hcF93b3JkIHN0YXR1cywgc3RhdHVzX09LLCB3cml0ZV9jbWQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lbzsKLQlpbnQgeiwgcmV0PTA7CisJbWFwX3dvcmQgc3RhdHVzLCB3cml0ZV9jbWQ7CisJaW50IHJldD0wOwogCiAJYWRyICs9IGNoaXAtPnN0YXJ0OwogCi0JLyogTGV0J3MgZGV0ZXJtaW5lIHRob3NlIGFjY29yZGluZyB0byB0aGUgaW50ZXJsZWF2ZSBvbmx5IG9uY2UgKi8KLQlzdGF0dXNfT0sgPSBDTUQoMHg4MCk7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBGTF9XUklUSU5HOgogCQl3cml0ZV9jbWQgPSAoY2ZpLT5jZmlxLT5QX0lEICE9IDB4MDIwMCkgPyBDTUQoMHg0MCkgOiBDTUQoMHg0MSk7CkBAIC0xMjg1LDU3ICsxMzI5LDE3IEBACiAJbWFwX3dyaXRlKG1hcCwgZGF0dW0sIGFkcik7CiAJY2hpcC0+c3RhdGUgPSBtb2RlOwogCi0JSU5WQUxJREFURV9DQUNIRV9VREVMQVkobWFwLCBjaGlwLCBhZHIsCi0JCQkJYWRyLCBtYXBfYmFua3dpZHRoKG1hcCksCi0JCQkJY2hpcC0+d29yZF93cml0ZV90aW1lKTsKLQotCXRpbWVvID0gamlmZmllcyArIChIWi8yKTsKLQl6ID0gMDsKLQlmb3IgKDs7KSB7Ci0JCWlmIChjaGlwLT5zdGF0ZSAhPSBtb2RlKSB7Ci0JCQkvKiBTb21lb25lJ3Mgc3VzcGVuZGVkIHRoZSB3cml0ZS4gU2xlZXAgKi8KLQkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQkJCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKLQkJCXNjaGVkdWxlKCk7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQkJCXRpbWVvID0gamlmZmllcyArIChIWiAvIDIpOyAvKiBGSVhNRSAqLwotCQkJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBhZHIpOwotCQlpZiAobWFwX3dvcmRfYW5kZXF1YWwobWFwLCBzdGF0dXMsIHN0YXR1c19PSywgc3RhdHVzX09LKSkKLQkJCWJyZWFrOwotCi0JCS8qIE9LIFN0aWxsIHdhaXRpbmcgKi8KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW8pKSB7Ci0JCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7Ci0JCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKLQkJCXhpcF9lbmFibGUobWFwLCBjaGlwLCBhZHIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogd29yZCB3cml0ZSBlcnJvciAoc3RhdHVzIHRpbWVvdXQpXG4iLCBtYXAtPm5hbWUpOwotCQkJcmV0ID0gLUVJTzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyogTGF0ZW5jeSBpc3N1ZXMuIERyb3AgdGhlIGxvY2ssIHdhaXQgYSB3aGlsZSBhbmQgcmV0cnkgKi8KLQkJeisrOwotCQlVREVMQVkobWFwLCBjaGlwLCBhZHIsIDEpOworCXJldCA9IElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgYWRyLAorCQkJCSAgIGFkciwgbWFwX2Jhbmt3aWR0aChtYXApLAorCQkJCSAgICZjaGlwLT53b3JkX3dyaXRlX3RpbWUpOworCWlmIChyZXQpIHsKKwkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdvcmQgd3JpdGUgZXJyb3IgKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQotCWlmICgheikgewotCQljaGlwLT53b3JkX3dyaXRlX3RpbWUtLTsKLQkJaWYgKCFjaGlwLT53b3JkX3dyaXRlX3RpbWUpCi0JCQljaGlwLT53b3JkX3dyaXRlX3RpbWUgPSAxOwotCX0KLQlpZiAoeiA+IDEpCi0JCWNoaXAtPndvcmRfd3JpdGVfdGltZSsrOwotCi0JLyogRG9uZSBhbmQgaGFwcHkuICovCi0JY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CiAKIAkvKiBjaGVjayBmb3IgZXJyb3JzICovCisJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBhZHIpOwogCWlmIChtYXBfd29yZF9iaXRzc2V0KG1hcCwgc3RhdHVzLCBDTUQoMHgxYSkpKSB7CiAJCXVuc2lnbmVkIGxvbmcgY2hpcHN0YXR1cyA9IE1FUkdFU1RBVFVTKHN0YXR1cyk7CiAKQEAgLTE0NTIsOSArMTQ1Niw5IEBACiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnB2ZWNfc2VlaywgaW50IGxlbikKIHsKIAlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSA9IG1hcC0+ZmxkcnZfcHJpdjsKLQltYXBfd29yZCBzdGF0dXMsIHN0YXR1c19PSywgd3JpdGVfY21kLCBkYXR1bTsKLQl1bnNpZ25lZCBsb25nIGNtZF9hZHIsIHRpbWVvOwotCWludCB3YnVmc2l6ZSwgeiwgcmV0PTAsIHdvcmRfZ2FwLCB3b3JkczsKKwltYXBfd29yZCBzdGF0dXMsIHdyaXRlX2NtZCwgZGF0dW07CisJdW5zaWduZWQgbG9uZyBjbWRfYWRyOworCWludCByZXQsIHdidWZzaXplLCB3b3JkX2dhcCwgd29yZHM7CiAJY29uc3Qgc3RydWN0IGt2ZWMgKnZlYzsKIAl1bnNpZ25lZCBsb25nIHZlY19zZWVrOwogCkBAIC0xNDYzLDcgKzE0NjcsNiBAQAogCWNtZF9hZHIgPSBhZHIgJiB+KHdidWZzaXplLTEpOwogCiAJLyogTGV0J3MgZGV0ZXJtaW5lIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSBpbnRlcmxlYXZlIG9ubHkgb25jZSAqLwotCXN0YXR1c19PSyA9IENNRCgweDgwKTsKIAl3cml0ZV9jbWQgPSAoY2ZpLT5jZmlxLT5QX0lEICE9IDB4MDIwMCkgPyBDTUQoMHhlOCkgOiBDTUQoMHhlOSk7CiAKIAlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwpAQCAtMTQ3NywxMiArMTQ4MCwxNCBAQAogCUVOQUJMRV9WUFAobWFwKTsKIAl4aXBfZGlzYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOwogCi0JLyogpzQuOCBvZiB0aGUgMjhGeHh4SjNBIGRhdGFzaGVldCBzYXlzICJBbnkgdGltZSBTUi40IGFuZC9vciBTUi41IGlzIHNldAorCS8qIMKnNC44IG9mIHRoZSAyOEZ4eHhKM0EgZGF0YXNoZWV0IHNheXMgIkFueSB0aW1lIFNSLjQgYW5kL29yIFNSLjUgaXMgc2V0CiAJICAgWy4uLl0sIHRoZSBkZXZpY2Ugd2lsbCBub3QgYWNjZXB0IGFueSBtb3JlIFdyaXRlIHRvIEJ1ZmZlciBjb21tYW5kcyIuCiAJICAgU28gd2UgbXVzdCBjaGVjayBoZXJlIGFuZCByZXNldCB0aG9zZSBiaXRzIGlmIHRoZXkncmUgc2V0LiBPdGhlcndpc2UKIAkgICB3ZSdyZSBqdXN0IHBpc3NpbmcgaW4gdGhlIHdpbmQgKi8KLQlpZiAoY2hpcC0+c3RhdGUgIT0gRkxfU1RBVFVTKQorCWlmIChjaGlwLT5zdGF0ZSAhPSBGTF9TVEFUVVMpIHsKIAkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKKwkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CisJfQogCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgY21kX2Fkcik7CiAJaWYgKG1hcF93b3JkX2JpdHNzZXQobWFwLCBzdGF0dXMsIENNRCgweDMwKSkpIHsKIAkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOwpAQCAtMTQ5MywzMiArMTQ5OCwyMCBAQAogCX0KIAogCWNoaXAtPnN0YXRlID0gRkxfV1JJVElOR19UT19CVUZGRVI7Ci0KLQl6ID0gMDsKLQlmb3IgKDs7KSB7Ci0JCW1hcF93cml0ZShtYXAsIHdyaXRlX2NtZCwgY21kX2Fkcik7Ci0KKwltYXBfd3JpdGUobWFwLCB3cml0ZV9jbWQsIGNtZF9hZHIpOworCXJldCA9IFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGNtZF9hZHIsIDApOworCWlmIChyZXQpIHsKKwkJLyogQXJnaC4gTm90IHJlYWR5IGZvciB3cml0ZSB0byBidWZmZXIgKi8KKwkJbWFwX3dvcmQgWHN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgY21kX2Fkcik7CisJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgY21kX2Fkcik7CisJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwogCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGNtZF9hZHIpOwotCQlpZiAobWFwX3dvcmRfYW5kZXF1YWwobWFwLCBzdGF0dXMsIHN0YXR1c19PSywgc3RhdHVzX09LKSkKLQkJCWJyZWFrOwotCi0JCVVERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsIDEpOwotCi0JCWlmICgrK3ogPiAyMCkgewotCQkJLyogQXJnaC4gTm90IHJlYWR5IGZvciB3cml0ZSB0byBidWZmZXIgKi8KLQkJCW1hcF93b3JkIFhzdGF0dXM7Ci0JCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOwotCQkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7Ci0JCQlYc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKLQkJCS8qIE9kZC4gQ2xlYXIgc3RhdHVzIGJpdHMgKi8KLQkJCW1hcF93cml0ZShtYXAsIENNRCgweDUwKSwgY21kX2Fkcik7Ci0JCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOwotCQkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2hpcCBub3QgcmVhZHkgZm9yIGJ1ZmZlciB3cml0ZS4gc3RhdHVzID0gJWx4LCBYc3RhdHVzID0gJWx4XG4iLAotCQkJICAgICAgIG1hcC0+bmFtZSwgc3RhdHVzLnhbMF0sIFhzdGF0dXMueFswXSk7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NTApLCBjbWRfYWRyKTsKKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKKwkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDaGlwIG5vdCByZWFkeSBmb3IgYnVmZmVyIHdyaXRlLiBYc3RhdHVzID0gJWx4LCBzdGF0dXMgPSAlbHhcbiIsCisJCQkJbWFwLT5uYW1lLCBYc3RhdHVzLnhbMF0sIHN0YXR1cy54WzBdKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogRmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIHdvcmRzIHRvIHdyaXRlICovCkBAIC0xNTczLDU2ICsxNTY2LDE5IEBACiAJbWFwX3dyaXRlKG1hcCwgQ01EKDB4ZDApLCBjbWRfYWRyKTsKIAljaGlwLT5zdGF0ZSA9IEZMX1dSSVRJTkc7CiAKLQlJTlZBTElEQVRFX0NBQ0hFX1VERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsCi0JCQkJYWRyLCBsZW4sCi0JCQkJY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWUpOwotCi0JdGltZW8gPSBqaWZmaWVzICsgKEhaLzIpOwotCXogPSAwOwotCWZvciAoOzspIHsKLQkJaWYgKGNoaXAtPnN0YXRlICE9IEZMX1dSSVRJTkcpIHsKLQkJCS8qIFNvbWVvbmUncyBzdXNwZW5kZWQgdGhlIHdyaXRlLiBTbGVlcCAqLwotCQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQkJCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKLQkJCXNjaGVkdWxlKCk7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQkJCXRpbWVvID0gamlmZmllcyArIChIWiAvIDIpOyAvKiBGSVhNRSAqLwotCQkJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKLQkJaWYgKG1hcF93b3JkX2FuZGVxdWFsKG1hcCwgc3RhdHVzLCBzdGF0dXNfT0ssIHN0YXR1c19PSykpCi0JCQlicmVhazsKLQotCQkvKiBPSyBTdGlsbCB3YWl0aW5nICovCi0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvKSkgewotCQkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKLQkJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwotCQkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYnVmZmVyIHdyaXRlIGVycm9yIChzdGF0dXMgdGltZW91dClcbiIsIG1hcC0+bmFtZSk7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiBMYXRlbmN5IGlzc3Vlcy4gRHJvcCB0aGUgbG9jaywgd2FpdCBhIHdoaWxlIGFuZCByZXRyeSAqLwotCQl6Kys7Ci0JCVVERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsIDEpOworCXJldCA9IElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgY21kX2FkciwKKwkJCQkgICBhZHIsIGxlbiwKKwkJCQkgICAmY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWUpOworCWlmIChyZXQpIHsKKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKKwkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CisJCXhpcF9lbmFibGUobWFwLCBjaGlwLCBjbWRfYWRyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYnVmZmVyIHdyaXRlIGVycm9yIChzdGF0dXMgdGltZW91dClcbiIsIG1hcC0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KLQlpZiAoIXopIHsKLQkJY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWUtLTsKLQkJaWYgKCFjaGlwLT5idWZmZXJfd3JpdGVfdGltZSkKLQkJCWNoaXAtPmJ1ZmZlcl93cml0ZV90aW1lID0gMTsKLQl9Ci0JaWYgKHogPiAxKQotCQljaGlwLT5idWZmZXJfd3JpdGVfdGltZSsrOwotCi0JLyogRG9uZSBhbmQgaGFwcHkuICovCi0gCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwogCiAJLyogY2hlY2sgZm9yIGVycm9ycyAqLworCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgY21kX2Fkcik7CiAJaWYgKG1hcF93b3JkX2JpdHNzZXQobWFwLCBzdGF0dXMsIENNRCgweDFhKSkpIHsKIAkJdW5zaWduZWQgbG9uZyBjaGlwc3RhdHVzID0gTUVSR0VTVEFUVVMoc3RhdHVzKTsKIApAQCAtMTY5Myw2ICsxNjQ5LDExIEBACiAJCQlpZiAoY2hpcG51bSA9PSBjZmktPm51bWNoaXBzKQogCQkJCXJldHVybiAwOwogCQl9CisKKwkJLyogQmUgbmljZSBhbmQgcmVzY2hlZHVsZSB3aXRoIHRoZSBjaGlwIGluIGEgdXNhYmxlIHN0YXRlIGZvciBvdGhlcgorCQkgICBwcm9jZXNzZXMuICovCisJCWNvbmRfcmVzY2hlZCgpOworCiAJfSB3aGlsZSAobGVuKTsKIAogCXJldHVybiAwOwpAQCAtMTcxMywxNyArMTY3NCwxMiBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRyLCBpbnQgbGVuLCB2b2lkICp0aHVuaykKIHsKIAlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSA9IG1hcC0+ZmxkcnZfcHJpdjsKLQltYXBfd29yZCBzdGF0dXMsIHN0YXR1c19PSzsKLQl1bnNpZ25lZCBsb25nIHRpbWVvOworCW1hcF93b3JkIHN0YXR1czsKIAlpbnQgcmV0cmllcyA9IDM7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAogCWFkciArPSBjaGlwLT5zdGFydDsKIAotCS8qIExldCdzIGRldGVybWluZSB0aGlzIGFjY29yZGluZyB0byB0aGUgaW50ZXJsZWF2ZSBvbmx5IG9uY2UgKi8KLQlzdGF0dXNfT0sgPSBDTUQoMHg4MCk7Ci0KICByZXRyeToKIAlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwogCXJldCA9IGdldF9jaGlwKG1hcCwgY2hpcCwgYWRyLCBGTF9FUkFTSU5HKTsKQEAgLTE3NDUsNDggKzE3MDEsMTUgQEAKIAljaGlwLT5zdGF0ZSA9IEZMX0VSQVNJTkc7CiAJY2hpcC0+ZXJhc2Vfc3VzcGVuZGVkID0gMDsKIAotCUlOVkFMSURBVEVfQ0FDSEVfVURFTEFZKG1hcCwgY2hpcCwgYWRyLAotCQkJCWFkciwgbGVuLAotCQkJCWNoaXAtPmVyYXNlX3RpbWUqMTAwMC8yKTsKLQotCS8qIEZJWE1FLiBVc2UgYSB0aW1lciB0byBjaGVjayB0aGlzLCBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5LiAqLwotCS8qIE9uY2UgdGhlIHN0YXRlIG1hY2hpbmUncyBrbm93biB0byBiZSB3b3JraW5nIEknbGwgZG8gdGhhdCAqLwotCi0JdGltZW8gPSBqaWZmaWVzICsgKEhaKjIwKTsKLQlmb3IgKDs7KSB7Ci0JCWlmIChjaGlwLT5zdGF0ZSAhPSBGTF9FUkFTSU5HKSB7Ci0JCQkvKiBTb21lb25lJ3Mgc3VzcGVuZGVkIHRoZSBlcmFzZS4gU2xlZXAgKi8KLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwotCQkJc2NoZWR1bGUoKTsKLQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCQkJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChjaGlwLT5lcmFzZV9zdXNwZW5kZWQpIHsKLQkJCS8qIFRoaXMgZXJhc2Ugd2FzIHN1c3BlbmRlZCBhbmQgcmVzdW1lZC4KLQkJCSAgIEFkanVzdCB0aGUgdGltZW91dCAqLwotCQkJdGltZW8gPSBqaWZmaWVzICsgKEhaKjIwKTsgLyogRklYTUUgKi8KLQkJCWNoaXAtPmVyYXNlX3N1c3BlbmRlZCA9IDA7Ci0JCX0KLQotCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGFkcik7Ci0JCWlmIChtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgc3RhdHVzX09LLCBzdGF0dXNfT0spKQotCQkJYnJlYWs7Ci0KLQkJLyogT0sgU3RpbGwgd2FpdGluZyAqLwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lbykpIHsKLQkJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgYWRyKTsKLQkJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwotCQkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBibG9jayBlcmFzZSBlcnJvcjogKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIExhdGVuY3kgaXNzdWVzLiBEcm9wIHRoZSBsb2NrLCB3YWl0IGEgd2hpbGUgYW5kIHJldHJ5ICovCi0JCVVERUxBWShtYXAsIGNoaXAsIGFkciwgMTAwMDAwMC9IWik7CisJcmV0ID0gSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsCisJCQkJICAgYWRyLCBsZW4sCisJCQkJICAgJmNoaXAtPmVyYXNlX3RpbWUpOworCWlmIChyZXQpIHsKKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBhZHIpOworCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKKwkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJsb2NrIGVyYXNlIGVycm9yOiAoc3RhdHVzIHRpbWVvdXQpXG4iLCBtYXAtPm5hbWUpOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBXZSd2ZSBicm9rZW4gdGhpcyBiZWZvcmUuIEl0IGRvZXNuJ3QgaHVydCB0byBiZSBzYWZlICovCkBAIC0xODE1LDcgKzE3MzgsNiBAQAogCQkJcmV0ID0gLUVJTzsKIAkJfSBlbHNlIGlmIChjaGlwc3RhdHVzICYgMHgyMCAmJiByZXRyaWVzLS0pIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJibG9jayBlcmFzZSBmYWlsZWQgYXQgMHglMDhseDogc3RhdHVzIDB4JWx4LiBSZXRyeWluZy4uLlxuIiwgYWRyLCBjaGlwc3RhdHVzKTsKLQkJCXRpbWVvID0gamlmZmllcyArIEhaOwogCQkJcHV0X2NoaXAobWFwLCBjaGlwLCBhZHIpOwogCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwogCQkJZ290byByZXRyeTsKQEAgLTE5MjEsMTUgKzE4NDMsMTEgQEAKIHsKIAlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSA9IG1hcC0+ZmxkcnZfcHJpdjsKIAlzdHJ1Y3QgY2ZpX3ByaV9pbnRlbGV4dCAqZXh0cCA9IGNmaS0+Y21kc2V0X3ByaXY7Ci0JbWFwX3dvcmQgc3RhdHVzLCBzdGF0dXNfT0s7Ci0JdW5zaWduZWQgbG9uZyB0aW1lbyA9IGppZmZpZXMgKyBIWjsKKwlpbnQgdWRlbGF5OwogCWludCByZXQ7CiAKIAlhZHIgKz0gY2hpcC0+c3RhcnQ7CiAKLQkvKiBMZXQncyBkZXRlcm1pbmUgdGhpcyBhY2NvcmRpbmcgdG8gdGhlIGludGVybGVhdmUgb25seSBvbmNlICovCi0Jc3RhdHVzX09LID0gQ01EKDB4ODApOwotCiAJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKIAlyZXQgPSBnZXRfY2hpcChtYXAsIGNoaXAsIGFkciwgRkxfTE9DS0lORyk7CiAJaWYgKHJldCkgewpAQCAtMTk1NCw0MSArMTg3MiwyMSBAQAogCSAqIElmIEluc3RhbnQgSW5kaXZpZHVhbCBCbG9jayBMb2NraW5nIHN1cHBvcnRlZCB0aGVuIG5vIG5lZWQKIAkgKiB0byBkZWxheS4KIAkgKi8KKwl1ZGVsYXkgPSAoIWV4dHAgfHwgIShleHRwLT5GZWF0dXJlU3VwcG9ydCAmICgxIDw8IDUpKSkgPyAxMDAwMDAwL0haIDogMDsKIAotCWlmICghZXh0cCB8fCAhKGV4dHAtPkZlYXR1cmVTdXBwb3J0ICYgKDEgPDwgNSkpKQotCQlVREVMQVkobWFwLCBjaGlwLCBhZHIsIDEwMDAwMDAvSFopOwotCi0JLyogRklYTUUuIFVzZSBhIHRpbWVyIHRvIGNoZWNrIHRoaXMsIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkuICovCi0JLyogT25jZSB0aGUgc3RhdGUgbWFjaGluZSdzIGtub3duIHRvIGJlIHdvcmtpbmcgSSdsbCBkbyB0aGF0ICovCi0KLQl0aW1lbyA9IGppZmZpZXMgKyAoSFoqMjApOwotCWZvciAoOzspIHsKLQotCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGFkcik7Ci0JCWlmIChtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgc3RhdHVzX09LLCBzdGF0dXNfT0spKQotCQkJYnJlYWs7Ci0KLQkJLyogT0sgU3RpbGwgd2FpdGluZyAqLwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lbykpIHsKLQkJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgYWRyKTsKLQkJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwotCQkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBibG9jayB1bmxvY2sgZXJyb3I6IChzdGF0dXMgdGltZW91dClcbiIsIG1hcC0+bmFtZSk7Ci0JCQlwdXRfY2hpcChtYXAsIGNoaXAsIGFkcik7Ci0JCQlzcGluX3VubG9jayhjaGlwLT5tdXRleCk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCS8qIExhdGVuY3kgaXNzdWVzLiBEcm9wIHRoZSBsb2NrLCB3YWl0IGEgd2hpbGUgYW5kIHJldHJ5ICovCi0JCVVERUxBWShtYXAsIGNoaXAsIGFkciwgMSk7CisJcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXkpOworCWlmIChyZXQpIHsKKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBhZHIpOworCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKKwkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJsb2NrIHVubG9jayBlcnJvcjogKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQogCi0JLyogRG9uZSBhbmQgaGFwcHkuICovCi0JY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CiAJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7Ci0JcHV0X2NoaXAobWFwLCBjaGlwLCBhZHIpOworb3V0OglwdXRfY2hpcChtYXAsIGNoaXAsIGFkcik7CiAJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgY2ZpX2ludGVsZXh0X2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4pCkBAIC0yNDQ1LDI4ICsyMzQzLDggQEAKIAlrZnJlZShtdGQtPmVyYXNlcmVnaW9ucyk7CiB9CiAKLXN0YXRpYyBjaGFyIGltX25hbWVfMDAwMVtdID0gImNmaV9jbWRzZXRfMDAwMSI7Ci1zdGF0aWMgY2hhciBpbV9uYW1lXzAwMDNbXSA9ICJjZmlfY21kc2V0XzAwMDMiOwotc3RhdGljIGNoYXIgaW1fbmFtZV8wMjAwW10gPSAiY2ZpX2NtZHNldF8wMjAwIjsKLQotc3RhdGljIGludCBfX2luaXQgY2ZpX2ludGVsZXh0X2luaXQodm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoaW1fbmFtZV8wMDAxLCBUSElTX01PRFVMRSwgJmNmaV9jbWRzZXRfMDAwMSk7Ci0JaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKGltX25hbWVfMDAwMywgVEhJU19NT0RVTEUsICZjZmlfY21kc2V0XzAwMDEpOwotCWludGVyX21vZHVsZV9yZWdpc3RlcihpbV9uYW1lXzAyMDAsIFRISVNfTU9EVUxFLCAmY2ZpX2NtZHNldF8wMDAxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNmaV9pbnRlbGV4dF9leGl0KHZvaWQpCi17Ci0JaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoaW1fbmFtZV8wMDAxKTsKLQlpbnRlcl9tb2R1bGVfdW5yZWdpc3RlcihpbV9uYW1lXzAwMDMpOwotCWludGVyX21vZHVsZV91bnJlZ2lzdGVyKGltX25hbWVfMDIwMCk7Ci19Ci0KLW1vZHVsZV9pbml0KGNmaV9pbnRlbGV4dF9pbml0KTsKLW1vZHVsZV9leGl0KGNmaV9pbnRlbGV4dF9leGl0KTsKLQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiBldCBhbC4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTVREIGNoaXAgZHJpdmVyIGZvciBJbnRlbC9TaGFycCBmbGFzaCBjaGlwcyIpOworTU9EVUxFX0FMSUFTKCJjZmlfY21kc2V0XzAwMDMiKTsKK01PRFVMRV9BTElBUygiY2ZpX2NtZHNldF8wMjAwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCmluZGV4IGFlZDEwYmQuLjFlMDFhZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCkBAIC0yMzYsNiArMjM2LDcgQEAKIAltdGQtPnJlc3VtZSAgPSBjZmlfYW1kc3RkX3Jlc3VtZTsKIAltdGQtPmZsYWdzICAgPSBNVERfQ0FQX05PUkZMQVNIOwogCW10ZC0+bmFtZSAgICA9IG1hcC0+bmFtZTsKKwltdGQtPndyaXRlc2l6ZSA9IDE7CiAKIAlpZiAoY2ZpLT5jZmlfbW9kZT09Q0ZJX01PREVfQ0ZJKXsKIAkJdW5zaWduZWQgY2hhciBib290bG9jOwpAQCAtMzI2LDcgKzMyNyw3IEBACiAKIAlyZXR1cm4gY2ZpX2FtZHN0ZF9zZXR1cChtdGQpOwogfQotCitFWFBPUlRfU1lNQk9MX0dQTChjZmlfY21kc2V0XzAwMDIpOwogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpjZmlfYW1kc3RkX3NldHVwKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewpAQCAtMTc1OCwyNSArMTc1OSw2IEBACiAJa2ZyZWUobXRkLT5lcmFzZXJlZ2lvbnMpOwogfQogCi1zdGF0aWMgY2hhciBpbV9uYW1lW109ImNmaV9jbWRzZXRfMDAwMiI7Ci0KLQotc3RhdGljIGludCBfX2luaXQgY2ZpX2FtZHN0ZF9pbml0KHZvaWQpCi17Ci0JaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKGltX25hbWUsIFRISVNfTU9EVUxFLCAmY2ZpX2NtZHNldF8wMDAyKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2ZpX2FtZHN0ZF9leGl0KHZvaWQpCi17Ci0JaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoaW1fbmFtZSk7Ci19Ci0KLQotbW9kdWxlX2luaXQoY2ZpX2FtZHN0ZF9pbml0KTsKLW1vZHVsZV9leGl0KGNmaV9hbWRzdGRfZXhpdCk7Ci0KIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkNyb3NzbmV0IENvLiA8aW5mb0Bjcm9zc25ldC5jby5qcD4gZXQgYWwuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1URCBjaGlwIGRyaXZlciBmb3IgQU1EL0Z1aml0c3UgZmxhc2ggY2hpcHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMKaW5kZXggMDgwN2MxYy4uZmFlNzBhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMKQEAgLTE2Miw2ICsxNjIsNyBAQAogCiAJcmV0dXJuIGNmaV9zdGFhX3NldHVwKG1hcCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfY21kc2V0XzAwMjApOwogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpjZmlfc3RhYV9zZXR1cChzdHJ1Y3QgbWFwX2luZm8gKm1hcCkKIHsKQEAgLTIzNyw5ICsyMzgsOCBAQAogCW10ZC0+dW5sb2NrID0gY2ZpX3N0YWFfdW5sb2NrOwogCW10ZC0+c3VzcGVuZCA9IGNmaV9zdGFhX3N1c3BlbmQ7CiAJbXRkLT5yZXN1bWUgPSBjZmlfc3RhYV9yZXN1bWU7Ci0JbXRkLT5mbGFncyA9IE1URF9DQVBfTk9SRkxBU0g7Ci0JbXRkLT5mbGFncyB8PSBNVERfRUNDOyAvKiBGSVhNRTogTm90IGFsbCBTVE1pY3JvIGZsYXNoZXMgaGF2ZSB0aGlzICovCi0JbXRkLT5lY2NzaXplID0gODsgLyogRklYTUU6IFNob3VsZCBiZSAwIGZvciBTVE1pY3JvIGZsYXNoZXMgdy9vdXQgRUNDICovCisJbXRkLT5mbGFncyA9IE1URF9DQVBfTk9SRkxBU0ggJiB+TVREX0JJVF9XUklURUFCTEU7CisJbXRkLT53cml0ZXNpemUgPSA4OyAvKiBGSVhNRTogU2hvdWxkIGJlIDAgZm9yIFNUTWljcm8gZmxhc2hlcyB3L291dCBFQ0MgKi8KIAltYXAtPmZsZHJ2ID0gJmNmaV9zdGFhX2NoaXBkcnY7CiAJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKIAltdGQtPm5hbWUgPSBtYXAtPm5hbWU7CkBAIC0xNDEwLDIwICsxNDEwLDQgQEAKIAlrZnJlZShjZmkpOwogfQogCi1zdGF0aWMgY2hhciBpbV9uYW1lW109ImNmaV9jbWRzZXRfMDAyMCI7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNmaV9zdGFhX2luaXQodm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoaW1fbmFtZSwgVEhJU19NT0RVTEUsICZjZmlfY21kc2V0XzAwMjApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2ZpX3N0YWFfZXhpdCh2b2lkKQotewotCWludGVyX21vZHVsZV91bnJlZ2lzdGVyKGltX25hbWUpOwotfQotCi1tb2R1bGVfaW5pdChjZmlfc3RhYV9pbml0KTsKLW1vZHVsZV9leGl0KGNmaV9zdGFhX2V4aXQpOwotCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCmluZGV4IGU2MzZhYTguLjRiZjlmOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCkBAIC0zNDksMTIgKzM0OSwxMiBAQAogCWVsc2UKIAkJcHJpbnRrKCJObyBWcHAgbGluZVxuIik7CiAKLQlwcmludGsoIlR5cGljYWwgYnl0ZS93b3JkIHdyaXRlIHRpbWVvdXQ6ICVkILVzXG4iLCAxPDxjZmlwLT5Xb3JkV3JpdGVUaW1lb3V0VHlwKTsKLQlwcmludGsoIk1heGltdW0gYnl0ZS93b3JkIHdyaXRlIHRpbWVvdXQ6ICVkILVzXG4iLCAoMTw8Y2ZpcC0+V29yZFdyaXRlVGltZW91dE1heCkgKiAoMTw8Y2ZpcC0+V29yZFdyaXRlVGltZW91dFR5cCkpOworCXByaW50aygiVHlwaWNhbCBieXRlL3dvcmQgd3JpdGUgdGltZW91dDogJWQgwrVzXG4iLCAxPDxjZmlwLT5Xb3JkV3JpdGVUaW1lb3V0VHlwKTsKKwlwcmludGsoIk1heGltdW0gYnl0ZS93b3JkIHdyaXRlIHRpbWVvdXQ6ICVkIMK1c1xuIiwgKDE8PGNmaXAtPldvcmRXcml0ZVRpbWVvdXRNYXgpICogKDE8PGNmaXAtPldvcmRXcml0ZVRpbWVvdXRUeXApKTsKIAogCWlmIChjZmlwLT5CdWZXcml0ZVRpbWVvdXRUeXAgfHwgY2ZpcC0+QnVmV3JpdGVUaW1lb3V0TWF4KSB7Ci0JCXByaW50aygiVHlwaWNhbCBmdWxsIGJ1ZmZlciB3cml0ZSB0aW1lb3V0OiAlZCC1c1xuIiwgMTw8Y2ZpcC0+QnVmV3JpdGVUaW1lb3V0VHlwKTsKLQkJcHJpbnRrKCJNYXhpbXVtIGZ1bGwgYnVmZmVyIHdyaXRlIHRpbWVvdXQ6ICVkILVzXG4iLCAoMTw8Y2ZpcC0+QnVmV3JpdGVUaW1lb3V0TWF4KSAqICgxPDxjZmlwLT5CdWZXcml0ZVRpbWVvdXRUeXApKTsKKwkJcHJpbnRrKCJUeXBpY2FsIGZ1bGwgYnVmZmVyIHdyaXRlIHRpbWVvdXQ6ICVkIMK1c1xuIiwgMTw8Y2ZpcC0+QnVmV3JpdGVUaW1lb3V0VHlwKTsKKwkJcHJpbnRrKCJNYXhpbXVtIGZ1bGwgYnVmZmVyIHdyaXRlIHRpbWVvdXQ6ICVkIMK1c1xuIiwgKDE8PGNmaXAtPkJ1ZldyaXRlVGltZW91dE1heCkgKiAoMTw8Y2ZpcC0+QnVmV3JpdGVUaW1lb3V0VHlwKSk7CiAJfQogCWVsc2UKIAkJcHJpbnRrKCJGdWxsIGJ1ZmZlciB3cml0ZSBub3Qgc3VwcG9ydGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMKaW5kZXggNDFiZDU5ZC4uY2RiMGY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMKQEAgLTM3LDggKzM3LDE1IEBACiAJaWYgKCFtdGQpCiAJCW10ZCA9IGNoZWNrX2NtZF9zZXQobWFwLCAwKTsgLyogVGhlbiB0aGUgc2Vjb25kYXJ5ICovCiAKLQlpZiAobXRkKQorCWlmIChtdGQpIHsKKwkJaWYgKG10ZC0+c2l6ZSA+IG1hcC0+c2l6ZSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVkdWNpbmcgdmlzaWJpbGl0eSBvZiAlbGRLaUIgY2hpcCB0byAlbGRLaUJcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpbXRkLT5zaXplID4+IDEwLCAKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyltYXAtPnNpemUgPj4gMTApOworCQkJbXRkLT5zaXplID0gbWFwLT5zaXplOworCQl9CiAJCXJldHVybiBtdGQ7CisJfQogCiAJcHJpbnRrKEtFUk5fV0FSTklORyJnZW5fcHJvYmU6IE5vIHN1cHBvcnRlZCBWZW5kb3IgQ29tbWFuZCBTZXQgZm91bmRcbiIpOwogCkBAIC0xMDAsNyArMTA3LDEyIEBACiAJICogQWxpZ24gYml0bWFwIHN0b3JhZ2Ugc2l6ZSB0byBmdWxsIGJ5dGUuCiAJICovCiAJbWF4X2NoaXBzID0gbWFwLT5zaXplID4+IGNmaS5jaGlwc2hpZnQ7Ci0JbWFwc2l6ZSA9IChtYXhfY2hpcHMgLyA4KSArICgobWF4X2NoaXBzICUgOCkgPyAxIDogMCk7CisJaWYgKCFtYXhfY2hpcHMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk9SIGNoaXAgdG9vIGxhcmdlIHRvIGZpdCBpbiBtYXBwaW5nLiBBdHRlbXB0aW5nIHRvIGNvcGUuLi5cbiIpOworCQltYXhfY2hpcHMgPSAxOworCX0KKworCW1hcHNpemUgPSAobWF4X2NoaXBzICsgQklUU19QRVJfTE9ORy0xKSAvIEJJVFNfUEVSX0xPTkc7CiAJY2hpcF9tYXAgPSBrbWFsbG9jKG1hcHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghY2hpcF9tYXApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGttYWxsb2MgZmFpbGVkIGZvciBDRkkgY2hpcCBtYXBcbiIsIG1hcC0+bmFtZSk7CkBAIC0xOTQsMjUgKzIwNiwyOCBAQAogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwogCV9fdTE2IHR5cGUgPSBwcmltYXJ5P2NmaS0+Y2ZpcS0+UF9JRDpjZmktPmNmaXEtPkFfSUQ7Ci0jaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChIQVZFX0lOVEVSX01PRFVMRSkKLQljaGFyIHByb2JlbmFtZVszMl07CisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwljaGFyIHByb2JlbmFtZVsxNitzaXplb2YoTU9EVUxFX1NZTUJPTF9QUkVGSVgpXTsKIAljZmlfY21kc2V0X2ZuX3QgKnByb2JlX2Z1bmN0aW9uOwogCi0Jc3ByaW50Zihwcm9iZW5hbWUsICJjZmlfY21kc2V0XyU0LjRYIiwgdHlwZSk7CisJc3ByaW50Zihwcm9iZW5hbWUsIE1PRFVMRV9TWU1CT0xfUFJFRklYICJjZmlfY21kc2V0XyU0LjRYIiwgdHlwZSk7CiAKLQlwcm9iZV9mdW5jdGlvbiA9IGludGVyX21vZHVsZV9nZXRfcmVxdWVzdChwcm9iZW5hbWUsIHByb2JlbmFtZSk7CisJcHJvYmVfZnVuY3Rpb24gPSBfX3N5bWJvbF9nZXQocHJvYmVuYW1lKTsKKwlpZiAoIXByb2JlX2Z1bmN0aW9uKSB7CisJCXJlcXVlc3RfbW9kdWxlKHByb2JlbmFtZSArIHNpemVvZihNT0RVTEVfU1lNQk9MX1BSRUZJWCkgLSAxKTsKKwkJcHJvYmVfZnVuY3Rpb24gPSBfX3N5bWJvbF9nZXQocHJvYmVuYW1lKTsKKwl9CiAKIAlpZiAocHJvYmVfZnVuY3Rpb24pIHsKIAkJc3RydWN0IG10ZF9pbmZvICptdGQ7CiAKIAkJbXRkID0gKCpwcm9iZV9mdW5jdGlvbikobWFwLCBwcmltYXJ5KTsKIAkJLyogSWYgaXQgd2FzIGhhcHB5LCBpdCdsbCBoYXZlIGluY3JlYXNlZCBpdHMgb3duIHVzZSBjb3VudCAqLwotCQlpbnRlcl9tb2R1bGVfcHV0KHByb2JlbmFtZSk7CisJCXN5bWJvbF9wdXRfYWRkcihwcm9iZV9mdW5jdGlvbik7CiAJCXJldHVybiBtdGQ7CiAJfQogI2VuZGlmCi0JcHJpbnRrKEtFUk5fTk9USUNFICJTdXBwb3J0IGZvciBjb21tYW5kIHNldCAlMDRYIG5vdCBwcmVzZW50XG4iLAotCSAgICAgICB0eXBlKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlN1cHBvcnQgZm9yIGNvbW1hbmQgc2V0ICUwNFggbm90IHByZXNlbnRcbiIsIHR5cGUpOwogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yMjYsMTIgKzI0MSw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJc3dpdGNoKHR5cGUpewotCQkvKiBVcmdoLiBJZmRlZnMuIFRoZSB2ZXJzaW9uIHdpdGggd2VhayBzeW1ib2xzIHdhcwotCQkgKiBfbXVjaF8gbmljZXIuIFNoYW1lIGl0IGRpZG4ndCBzZWVtIHRvIHdvcmsgb24KLQkJICogYW55dGhpbmcgYnV0IHg4NiwgcmVhbGx5LgotCQkgKiBCdXQgd2UgY2FuJ3QgcmVseSBpbiBpbnRlcl9tb2R1bGVfZ2V0KCkgYmVjYXVzZQotCQkgKiB0aGF0J2QgbWVhbiB3ZSBkZXBlbmQgb24gbGluayBvcmRlci4KLQkJICovCisJCS8qIFdlIG5lZWQgdGhlc2UgZm9yIHRoZSAhQ09ORklHX01PRFVMRVMgY2FzZSwKKwkJICAgYmVjYXVzZSBzeW1ib2xfZ2V0KCkgZG9lc24ndCB3b3JrIHRoZXJlICovCiAjaWZkZWYgQ09ORklHX01URF9DRklfSU5URUxFWFQKIAljYXNlIDB4MDAwMToKIAljYXNlIDB4MDAwMzoKQEAgLTI0Niw5ICsyNTcsOSBAQAogICAgICAgICBjYXNlIDB4MDAyMDoKIAkJcmV0dXJuIGNmaV9jbWRzZXRfMDAyMChtYXAsIHByaW1hcnkpOwogI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuIGNmaV9jbWRzZXRfdW5rbm93bihtYXAsIHByaW1hcnkpOwogCX0KLQotCXJldHVybiBjZmlfY21kc2V0X3Vua25vd24obWFwLCBwcmltYXJ5KTsKIH0KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JhbS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JhbS5jCmluZGV4IGJkMmU4NzYuLjc2MzkyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yYW0uYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcmFtLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAltdGQtPnJlYWQgPSBtYXByYW1fcmVhZDsKIAltdGQtPndyaXRlID0gbWFwcmFtX3dyaXRlOwogCW10ZC0+c3luYyA9IG1hcHJhbV9ub3A7Ci0JbXRkLT5mbGFncyA9IE1URF9DQVBfUkFNIHwgTVREX1ZPTEFUSUxFOworCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX1JBTTsKIAogCW10ZC0+ZXJhc2VzaXplID0gUEFHRV9TSVpFOwogIAl3aGlsZShtdGQtPnNpemUgJiAobXRkLT5lcmFzZXNpemUgLSAxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yb20uYyBiL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yb20uYwppbmRleCA2MjRjMTJjLi5iYzZlZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcm9tLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JvbS5jCkBAIC00Niw5ICs0Niw3IEBACiAJbXRkLT53cml0ZSA9IG1hcHJvbV93cml0ZTsKIAltdGQtPnN5bmMgPSBtYXByb21fbm9wOwogCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX1JPTTsKLQltdGQtPmVyYXNlc2l6ZSA9IDEzMTA3MjsKLSAJd2hpbGUobXRkLT5zaXplICYgKG10ZC0+ZXJhc2VzaXplIC0gMSkpCi0JCW10ZC0+ZXJhc2VzaXplID4+PSAxOworCW10ZC0+ZXJhc2VzaXplID0gbWFwLT5zaXplOwogCiAJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKIAlyZXR1cm4gbXRkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvc2hhcnAuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL3NoYXJwLmMKaW5kZXggM2NjMGIyMy4uOTY3YWJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvc2hhcnAuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9zaGFycC5jCkBAIC0xNDAsNiArMTQwLDcgQEAKIAltdGQtPnN1c3BlbmQgPSBzaGFycF9zdXNwZW5kOwogCW10ZC0+cmVzdW1lID0gc2hhcnBfcmVzdW1lOwogCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX05PUkZMQVNIOworCW10ZC0+d3JpdGVzaXplID0gMTsKIAltdGQtPm5hbWUgPSBtYXAtPm5hbWU7CiAKIAltZW1zZXQoc2hhcnAsIDAsIHNpemVvZigqc2hhcnApKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwppbmRleCA3ZmFjNDM4Li4xNmMwMmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCkBAIC00Nyw2ICs0NywxMSBAQAogCSAgYWNjZWxlcmF0b3IuICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgREVDc3RhdGlvbiA1MDAwLzJ4MCBvciBhCiAJICBERUNzeXN0ZW0gNTkwMCBlcXVpcHBlZCB3aXRoIHN1Y2ggYSBtb2R1bGUuCiAKKwkgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2ggY2FuIGJlCisJICBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3Ugd2FudCksCisJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vbW9kdWxlcy50eHQ+LiAgVGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgbXMwMi1udi5vLgorCiBjb25maWcgTVREX0RBVEFGTEFTSAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBBVDQ1eHh4IERhdGFGbGFzaCIKIAlkZXBlbmRzIG9uIE1URCAmJiBTUElfTUFTVEVSICYmIEVYUEVSSU1FTlRBTApAQCAtMjA5LDcgKzIxNCw2IEBACiBjb25maWcgTVREX0RPQ1BST0JFCiAJdHJpc3RhdGUKIAlzZWxlY3QgTVREX0RPQ0VDQwotCXNlbGVjdCBPQlNPTEVURV9JTlRFUk1PRFVMRQogCiBjb25maWcgTVREX0RPQ0VDQwogCXRyaXN0YXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQppbmRleCBiNjU3MzY3Li4wZjc4OGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKQEAgLTMsMTMgKzMsNiBAQAogIwogIyAkSWQ6IE1ha2VmaWxlLmNvbW1vbix2IDEuNyAyMDA0LzEyLzIyIDE3OjUxOjE1IGpvZXJuIEV4cCAkCiAKLSMgICAgICAgICAgICAgICAgICAgICAgICoqKiBCSUcgVUdMWSBOT1RFICoqKgotIwotIyBUaGUgcmVtb3ZhbCBvZiBnZXRfbW9kdWxlX3N5bWJvbCgpIGFuZCByZXBsYWNlbWVudCB3aXRoCi0jIGludGVyX21vZHVsZV9yZWdpc3RlcigpIGV0IGFsIGhhcyBpbnRyb2R1Y2VkIGEgbGluayBvcmRlciBkZXBlbmRlbmN5Ci0jIGhlcmUgd2hlcmUgcHJldmlvdXNseSB0aGVyZSB3YXMgbm9uZS4gIFdlIG5vdyBoYXZlIHRvIGVuc3VyZSB0aGF0Ci0jIGRvYzIwMFswMV0ubyBhcmUgbGlua2VkIGJlZm9yZSBkb2Nwcm9iZS5vCi0KIG9iai0kKENPTkZJR19NVERfRE9DMjAwMCkJKz0gZG9jMjAwMC5vCiBvYmotJChDT05GSUdfTVREX0RPQzIwMDEpCSs9IGRvYzIwMDEubwogb2JqLSQoQ09ORklHX01URF9ET0MyMDAxUExVUykJKz0gZG9jMjAwMXBsdXMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKaW5kZXggNDE2MGI4My4uMGQ5OGMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCkBAIC00LDcgKzQsNyBAQAogICogYmxvY2sybXRkLmMgLSBjcmVhdGUgYW4gbXRkIGZyb20gYSBibG9jayBkZXZpY2UKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMglTaW1vbiBFdmFucyA8c3BzZUBzZWNyZXQub3JnLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUJSvZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNglKw7ZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+CiAgKgogICogTGljZW5jZTogR1BMCiAgKi8KQEAgLTMzMSw3ICszMzEsNiBAQAogCWRldi0+bXRkLndyaXRldiA9IGRlZmF1bHRfbXRkX3dyaXRldjsKIAlkZXYtPm10ZC5zeW5jID0gYmxvY2sybXRkX3N5bmM7CiAJZGV2LT5tdGQucmVhZCA9IGJsb2NrMm10ZF9yZWFkOwotCWRldi0+bXRkLnJlYWR2ID0gZGVmYXVsdF9tdGRfcmVhZHY7CiAJZGV2LT5tdGQucHJpdiA9IGRldjsKIAlkZXYtPm10ZC5vd25lciA9IFRISVNfTU9EVUxFOwogCkBAIC0zNTEsNiArMzUwLDEyIEBACiB9CiAKIAorLyogVGhpcyBmdW5jdGlvbiB3b3JrcyBzaW1pbGFyIHRvIHJlZ3VsZXIgc3RydG91bC4gIEluIGFkZGl0aW9uLCBpdAorICogYWxsb3dzIHNvbWUgc3VmZml4ZXMgZm9yIGEgbW9yZSBodW1hbi1yZWFkYWJsZSBudW1iZXIgZm9ybWF0OgorICoga2ksIEtpLCBraUIsIEtpQgktIG11bHRpcGx5IHJlc3VsdCB3aXRoIDEwMjQKKyAqIE1pLCBNaUIJCS0gbXVsdGlwbHkgcmVzdWx0IHdpdGggMTAyNF4yCisgKiBHaSwgR2lCCQktIG11bHRpcGx5IHJlc3VsdCB3aXRoIDEwMjReMworICovCiBzdGF0aWMgaW50IHVzdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLCBjaGFyICoqZW5kcCwgdW5zaWduZWQgaW50IGJhc2UpCiB7CiAJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBzaW1wbGVfc3RydG91bChjcCwgZW5kcCwgYmFzZSk7CkBAIC0zNTksMTEgKzM2NCwxNiBAQAogCQlyZXN1bHQgKj0gMTAyNDsKIAljYXNlICdNJzoKIAkJcmVzdWx0ICo9IDEwMjQ7CisJY2FzZSAnSyc6CiAJY2FzZSAnayc6CiAJCXJlc3VsdCAqPSAxMDI0OwogCS8qIEJ5IGR3bXcyIGVkaXRvcmlhbCBkZWNyZWUsICJraSIsICJNaSIgb3IgIkdpIiBhcmUgdG8gYmUgdXNlZC4gKi8KLQkJaWYgKCgqZW5kcClbMV0gPT0gJ2knKQotCQkJKCplbmRwKSArPSAyOworCQlpZiAoKCplbmRwKVsxXSA9PSAnaScpIHsKKwkJCWlmICgoKmVuZHApWzJdID09ICdCJykKKwkJCQkoKmVuZHApICs9IDM7CisJCQllbHNlCisJCQkJKCplbmRwKSArPSAyOworCQl9CiAJfQogCXJldHVybiByZXN1bHQ7CiB9CkBAIC00MTgsNyArNDI4LDggQEAKIAogc3RhdGljIGludCBibG9jazJtdGRfc2V0dXAoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKIHsKLQljaGFyIGJ1Zls4MCsxMl0sICpzdHI9YnVmOyAvKiA4MCBmb3IgZGV2aWNlLCAxMiBmb3IgZXJhc2Ugc2l6ZSAqLworCWNoYXIgYnVmWzgwKzEyXTsgLyogODAgZm9yIGRldmljZSwgMTIgZm9yIGVyYXNlIHNpemUgKi8KKwljaGFyICpzdHIgPSBidWY7CiAJY2hhciAqdG9rZW5bMl07CiAJY2hhciAqbmFtZTsKIAlzaXplX3QgZXJhc2Vfc2l6ZSA9IFBBR0VfU0laRTsKQEAgLTQzMCw3ICs0NDEsNyBAQAogCXN0cmNweShzdHIsIHZhbCk7CiAJa2lsbF9maW5hbF9uZXdsaW5lKHN0cik7CiAKLQlmb3IgKGk9MDsgaTwyOyBpKyspCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJdG9rZW5baV0gPSBzdHJzZXAoJnN0ciwgIiwiKTsKIAogCWlmIChzdHIpCkBAIC00NDksOCArNDYwLDEwIEBACiAKIAlpZiAodG9rZW5bMV0pIHsKIAkJcmV0ID0gcGFyc2VfbnVtKCZlcmFzZV9zaXplLCB0b2tlblsxXSk7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQpIHsKKwkJCWtmcmVlKG5hbWUpOwogCQkJcGFyc2VfZXJyKCJpbGxlZ2FsIGVyYXNlIHNpemUiKTsKKwkJfQogCX0KIAogCWFkZF9kZXZpY2UobmFtZSwgZXJhc2Vfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDAuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jCmluZGV4IDIzZTdhNWMuLmM1NGU0MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jCkBAIC01OSwxMyArNTksMTAgQEAKIAkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7CiBzdGF0aWMgaW50IGRvY193cml0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKIAkJCSBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYsIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBkb2Nfd3JpdGV2X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JCQkgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICpyZXRsZW4sCi0JCQkgIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwotc3RhdGljIGludCBkb2Nfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQkJIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CitzdGF0aWMgaW50IGRvY19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCXN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKK3N0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CiBzdGF0aWMgaW50IGRvY193cml0ZV9vb2Jfbm9sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAogCQkJIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CiBzdGF0aWMgaW50IGRvY19lcmFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cik7CkBAIC01MTcsMTYgKzUxNCw5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgaW1fbmFtZVtdID0gIkRvQzJrX2luaXQiOwotCi0vKiBUaGlzIHJvdXRpbmUgaXMgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgbXRkIGNvZGUgdmlhCi0gKiBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIuICBJdCBtdXN0IG9ubHkgYmUgYWNjZXNzZWQgdGhyb3VnaAotICogaW50ZXJfbW9kdWxlX2dldCB3aGljaCB3aWxsIGJ1bXAgdGhlIHVzZSBjb3VudCBvZiB0aGlzIG1vZHVsZS4gIFRoZQotICogYWRkcmVzc2VzIHBhc3NlZCBiYWNrIGluIG10ZCBhcmUgdmFsaWQgYXMgbG9uZyBhcyB0aGUgdXNlIGNvdW50IG9mCi0gKiB0aGlzIG1vZHVsZSBpcyBub24temVybywgaS5lLiBiZXR3ZWVuIGludGVyX21vZHVsZV9nZXQgYW5kCi0gKiBpbnRlcl9tb2R1bGVfcHV0LiAgS2VpdGggT3dlbnMgPGthb3NAb2NzLmNvbS5hdT4gMjkgT2N0IDIwMDAuCi0gKi8KLXN0YXRpYyB2b2lkIERvQzJrX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQpCisvKiBUaGlzIHJvdXRpbmUgaXMgZm91bmQgZnJvbSB0aGUgZG9jcHJvYmUgY29kZSBieSBzeW1ib2xfZ2V0KCksCisgKiB3aGljaCB3aWxsIGJ1bXAgdGhlIHVzZSBjb3VudCBvZiB0aGlzIG1vZHVsZS4gKi8KK3ZvaWQgRG9DMmtfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqb2xkID0gTlVMTDsKQEAgLTU4Niw3ICs1NzYsNyBAQAogCW10ZC0+ZWNjdHlwZSA9IE1URF9FQ0NfUlNfRGlza09uQ2hpcDsKIAltdGQtPnNpemUgPSAwOwogCW10ZC0+ZXJhc2VzaXplID0gMDsKLQltdGQtPm9vYmJsb2NrID0gNTEyOworCW10ZC0+d3JpdGVzaXplID0gNTEyOwogCW10ZC0+b29ic2l6ZSA9IDE2OwogCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAltdGQtPmVyYXNlID0gZG9jX2VyYXNlOwpAQCAtNTk0LDkgKzU4NCw2IEBACiAJbXRkLT51bnBvaW50ID0gTlVMTDsKIAltdGQtPnJlYWQgPSBkb2NfcmVhZDsKIAltdGQtPndyaXRlID0gZG9jX3dyaXRlOwotCW10ZC0+cmVhZF9lY2MgPSBkb2NfcmVhZF9lY2M7Ci0JbXRkLT53cml0ZV9lY2MgPSBkb2Nfd3JpdGVfZWNjOwotCW10ZC0+d3JpdGV2X2VjYyA9IGRvY193cml0ZXZfZWNjOwogCW10ZC0+cmVhZF9vb2IgPSBkb2NfcmVhZF9vb2I7CiAJbXRkLT53cml0ZV9vb2IgPSBkb2Nfd3JpdGVfb29iOwogCW10ZC0+c3luYyA9IE5VTEw7CkBAIC02MjMsNiArNjEwLDcgQEAKIAkJcmV0dXJuOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKERvQzJrX2luaXQpOwogCiBzdGF0aWMgaW50IGRvY19yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKIAkJICAgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKQpAQCAtOTcxLDcyICs5NTksMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkb2Nfd3JpdGV2X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JCQkgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICpyZXRsZW4sCi0JCQkgIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCi17Ci0Jc3RhdGljIGNoYXIgc3RhdGljX2J1Zls1MTJdOwotCXN0YXRpYyBERUZJTkVfTVVURVgod3JpdGV2X2J1Zl9tdXRleCk7Ci0KLQlzaXplX3QgdG90cmV0bGVuID0gMDsKLQlzaXplX3QgdGhpc3ZlY29mcyA9IDA7Ci0JaW50IHJldD0gMDsKLQotCW11dGV4X2xvY2soJndyaXRldl9idWZfbXV0ZXgpOwotCi0Jd2hpbGUoY291bnQpIHsKLQkJc2l6ZV90IHRoaXNsZW4sIHRoaXNyZXRsZW47Ci0JCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQotCQlidWYgPSB2ZWNzLT5pb3ZfYmFzZSArIHRoaXN2ZWNvZnM7Ci0JCXRoaXNsZW4gPSB2ZWNzLT5pb3ZfbGVuIC0gdGhpc3ZlY29mczsKLQotCi0JCWlmICh0aGlzbGVuID49IDUxMikgewotCQkJdGhpc2xlbiA9IHRoaXNsZW4gJiB+KDUxMi0xKTsKLQkJCXRoaXN2ZWNvZnMgKz0gdGhpc2xlbjsKLQkJfSBlbHNlIHsKLQkJCS8qIE5vdCBlbm91Z2ggdG8gZmlsbCBhIHBhZ2UuIENvcHkgaW50byBidWYgKi8KLQkJCW1lbWNweShzdGF0aWNfYnVmLCBidWYsIHRoaXNsZW4pOwotCQkJYnVmID0gJnN0YXRpY19idWZbdGhpc2xlbl07Ci0KLQkJCXdoaWxlKGNvdW50ICYmIHRoaXNsZW4gPCA1MTIpIHsKLQkJCQl2ZWNzKys7Ci0JCQkJY291bnQtLTsKLQkJCQl0aGlzdmVjb2ZzID0gbWluKCg1MTItdGhpc2xlbiksIHZlY3MtPmlvdl9sZW4pOwotCQkJCW1lbWNweShidWYsIHZlY3MtPmlvdl9iYXNlLCB0aGlzdmVjb2ZzKTsKLQkJCQl0aGlzbGVuICs9IHRoaXN2ZWNvZnM7Ci0JCQkJYnVmICs9IHRoaXN2ZWNvZnM7Ci0JCQl9Ci0JCQlidWYgPSBzdGF0aWNfYnVmOwotCQl9Ci0JCWlmIChjb3VudCAmJiB0aGlzdmVjb2ZzID09IHZlY3MtPmlvdl9sZW4pIHsKLQkJCXRoaXN2ZWNvZnMgPSAwOwotCQkJdmVjcysrOwotCQkJY291bnQtLTsKLQkJfQotCQlyZXQgPSBkb2Nfd3JpdGVfZWNjKG10ZCwgdG8sIHRoaXNsZW4sICZ0aGlzcmV0bGVuLCBidWYsIGVjY2J1Ziwgb29ic2VsKTsKLQotCQl0b3RyZXRsZW4gKz0gdGhpc3JldGxlbjsKLQotCQlpZiAocmV0IHx8IHRoaXNyZXRsZW4gIT0gdGhpc2xlbikKLQkJCWJyZWFrOwotCi0JCXRvICs9IHRoaXNsZW47Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZ3cml0ZXZfYnVmX211dGV4KTsKLQkqcmV0bGVuID0gdG90cmV0bGVuOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZikKK3N0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLAorCQkJc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7CiAJc3RydWN0IERpc2tPbkNoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IGxlbjI1NiA9IDAsIHJldDsKIAlzdHJ1Y3QgTmFuZCAqbXljaGlwOworCXVpbnQ4X3QgKmJ1ZiA9IG9wcy0+b29iYnVmOworCXNpemVfdCBsZW4gPSBvcHMtPmxlbjsKKworCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7CisKKwlvZnMgKz0gb3BzLT5vb2JvZmZzOwogCiAJbXV0ZXhfbG9jaygmdGhpcy0+bG9jayk7CiAKQEAgLTEwNzcsNyArMTAxMSw3IEBACiAKIAlEb0NfUmVhZEJ1Zih0aGlzLCAmYnVmW2xlbjI1Nl0sIGxlbiAtIGxlbjI1Nik7CiAKLQkqcmV0bGVuID0gbGVuOworCW9wcy0+cmV0bGVuID0gbGVuOwogCS8qIFJlYWRpbmcgdGhlIGZ1bGwgT09CIGRhdGEgZHJvcHMgdXMgb2ZmIG9mIHRoZSBlbmQgb2YgdGhlIHBhZ2UsCiAgICAgICAgICAqIGNhdXNpbmcgdGhlIGZsYXNoIGRldmljZSB0byBnbyBpbnRvIGJ1c3kgbW9kZSwgc28gd2UgbmVlZAogICAgICAgICAgKiB0byB3YWl0IHVudGlsIHJlYWR5IDExLjQuMSBhbmQgVG9zaGliYSBUQzU4MjU2RlQgZG9jcyAqLwpAQCAtMTE5MiwxNyArMTEyNiwyMCBAQAogCiB9CiAKLXN0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKLSAJCQkgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYpCitzdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7Ci0gCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OwotIAlpbnQgcmV0OworCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCByZXQ7CiAKLSAJbXV0ZXhfbG9jaygmdGhpcy0+bG9jayk7Ci0gCXJldCA9IGRvY193cml0ZV9vb2Jfbm9sb2NrKG10ZCwgb2ZzLCBsZW4sIHJldGxlbiwgYnVmKTsKKwlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOwogCi0gCW11dGV4X3VubG9jaygmdGhpcy0+bG9jayk7Ci0gCXJldHVybiByZXQ7CisJbXV0ZXhfbG9jaygmdGhpcy0+bG9jayk7CisJcmV0ID0gZG9jX3dyaXRlX29vYl9ub2xvY2sobXRkLCBvZnMgKyBvcHMtPm9vYm9mZnMsIG9wcy0+bGVuLAorCQkJCSAgICZvcHMtPnJldGxlbiwgb3BzLT5vb2JidWYpOworCisJbXV0ZXhfdW5sb2NrKCZ0aGlzLT5sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRvY19lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQpAQCAtMTI3NywxMiArMTIxNCw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfZG9jMjAwMCh2b2lkKQotewotICAgICAgIGludGVyX21vZHVsZV9yZWdpc3RlcihpbV9uYW1lLCBUSElTX01PRFVMRSwgJkRvQzJrX2luaXQpOwotICAgICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9kb2MyMDAwKHZvaWQpCiB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQ7CkBAIC0xMjk4LDExICsxMjI5LDkgQEAKIAkJa2ZyZWUodGhpcy0+Y2hpcHMpOwogCQlrZnJlZShtdGQpOwogCX0KLQlpbnRlcl9tb2R1bGVfdW5yZWdpc3RlcihpbV9uYW1lKTsKIH0KIAogbW9kdWxlX2V4aXQoY2xlYW51cF9kb2MyMDAwKTsKLW1vZHVsZV9pbml0KGluaXRfZG9jMjAwMCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZXQgYWwuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDEuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMS5jCmluZGV4IDY4MWE5YzcuLjBjZjAyMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMS5jCkBAIC00MywxMCArNDMsMTAgQEAKIHN0YXRpYyBpbnQgZG9jX3dyaXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAogCQkJIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZiwgdV9jaGFyICplY2NidWYsCiAJCQkgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKLXN0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKLXN0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKLQkJCSBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOworc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CitzdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOwogc3RhdGljIGludCBkb2NfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpkb2NtaWxsaXN0ID0gTlVMTDsKQEAgLTMyNCwxNiArMzI0LDkgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBpbV9uYW1lW10gPSAiRG9DTWlsX2luaXQiOwotCi0vKiBUaGlzIHJvdXRpbmUgaXMgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgbXRkIGNvZGUgdmlhCi0gKiBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIuICBJdCBtdXN0IG9ubHkgYmUgYWNjZXNzZWQgdGhyb3VnaAotICogaW50ZXJfbW9kdWxlX2dldCB3aGljaCB3aWxsIGJ1bXAgdGhlIHVzZSBjb3VudCBvZiB0aGlzIG1vZHVsZS4gIFRoZQotICogYWRkcmVzc2VzIHBhc3NlZCBiYWNrIGluIG10ZCBhcmUgdmFsaWQgYXMgbG9uZyBhcyB0aGUgdXNlIGNvdW50IG9mCi0gKiB0aGlzIG1vZHVsZSBpcyBub24temVybywgaS5lLiBiZXR3ZWVuIGludGVyX21vZHVsZV9nZXQgYW5kCi0gKiBpbnRlcl9tb2R1bGVfcHV0LiAgS2VpdGggT3dlbnMgPGthb3NAb2NzLmNvbS5hdT4gMjkgT2N0IDIwMDAuCi0gKi8KLXN0YXRpYyB2b2lkIERvQ01pbF9pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorLyogVGhpcyByb3V0aW5lIGlzIGZvdW5kIGZyb20gdGhlIGRvY3Byb2JlIGNvZGUgYnkgc3ltYm9sX2dldCgpLAorICogd2hpY2ggd2lsbCBidW1wIHRoZSB1c2UgY291bnQgb2YgdGhpcyBtb2R1bGUuICovCit2b2lkIERvQ01pbF9pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewogCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBEaXNrT25DaGlwICpvbGQgPSBOVUxMOwpAQCAtMzY4LDcgKzM2MSw3IEBACiAJLyogRklYTUU6IGVyYXNlIHNpemUgaXMgbm90IGFsd2F5cyA4S2lCICovCiAJbXRkLT5lcmFzZXNpemUgPSAweDIwMDA7CiAKLQltdGQtPm9vYmJsb2NrID0gNTEyOworCW10ZC0+d3JpdGVzaXplID0gNTEyOwogCW10ZC0+b29ic2l6ZSA9IDE2OwogCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAltdGQtPmVyYXNlID0gZG9jX2VyYXNlOwpAQCAtMzc2LDggKzM2OSw2IEBACiAJbXRkLT51bnBvaW50ID0gTlVMTDsKIAltdGQtPnJlYWQgPSBkb2NfcmVhZDsKIAltdGQtPndyaXRlID0gZG9jX3dyaXRlOwotCW10ZC0+cmVhZF9lY2MgPSBkb2NfcmVhZF9lY2M7Ci0JbXRkLT53cml0ZV9lY2MgPSBkb2Nfd3JpdGVfZWNjOwogCW10ZC0+cmVhZF9vb2IgPSBkb2NfcmVhZF9vb2I7CiAJbXRkLT53cml0ZV9vb2IgPSBkb2Nfd3JpdGVfb29iOwogCW10ZC0+c3luYyA9IE5VTEw7CkBAIC00MDEsNiArMzkyLDcgQEAKIAkJcmV0dXJuOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKERvQ01pbF9pbml0KTsKIAogc3RhdGljIGludCBkb2NfcmVhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAogCQkgICAgIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKQEAgLTY3MCw4ICs2NjIsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQorc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKICNpZm5kZWYgVVNFX01FTUNQWQogCWludCBpOwpAQCAtNjgwLDYgKzY3MiwxMiBAQAogCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXZvaWQgX19pb21lbSAqZG9jcHRyID0gdGhpcy0+dmlydGFkcjsKIAlzdHJ1Y3QgTmFuZCAqbXljaGlwID0gJnRoaXMtPmNoaXBzW29mcyA+PiB0aGlzLT5jaGlwc2hpZnRdOworCXVpbnQ4X3QgKmJ1ZiA9IG9wcy0+b29iYnVmOworCXNpemVfdCBsZW4gPSBvcHMtPmxlbjsKKworCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7CisKKwlvZnMgKz0gb3BzLT5vb2JvZmZzOwogCiAJLyogRmluZCB0aGUgY2hpcCB3aGljaCBpcyB0byBiZSB1c2VkIGFuZCBzZWxlY3QgaXQgKi8KIAlpZiAodGhpcy0+Y3VyZmxvb3IgIT0gbXljaGlwLT5mbG9vcikgewpAQCAtNzE2LDEzICs3MTQsMTMgQEAKICNlbmRpZgogCWJ1ZltsZW4gLSAxXSA9IFJlYWRET0MoZG9jcHRyLCBMYXN0RGF0YVJlYWQpOwogCi0JKnJldGxlbiA9IGxlbjsKKwlvcHMtPnJldGxlbiA9IGxlbjsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCQkgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQorc3RhdGljIGludCBkb2Nfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLAorCQkJIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewogI2lmbmRlZiBVU0VfTUVNQ1BZCiAJaW50IGk7CkBAIC03MzIsNiArNzMwLDEyIEBACiAJc3RydWN0IERpc2tPbkNoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSB0aGlzLT52aXJ0YWRyOwogCXN0cnVjdCBOYW5kICpteWNoaXAgPSAmdGhpcy0+Y2hpcHNbb2ZzID4+IHRoaXMtPmNoaXBzaGlmdF07CisJdWludDhfdCAqYnVmID0gb3BzLT5vb2JidWY7CisJc2l6ZV90IGxlbiA9IG9wcy0+bGVuOworCisJQlVHX09OKG9wcy0+bW9kZSAhPSBNVERfT09CX1BMQUNFKTsKKworCW9mcyArPSBvcHMtPm9vYm9mZnM7CiAKIAkvKiBGaW5kIHRoZSBjaGlwIHdoaWNoIGlzIHRvIGJlIHVzZWQgYW5kIHNlbGVjdCBpdCAqLwogCWlmICh0aGlzLT5jdXJmbG9vciAhPSBteWNoaXAtPmZsb29yKSB7CkBAIC03ODMsMTIgKzc4NywxMiBAQAogCWlmIChSZWFkRE9DKGRvY3B0ciwgTWlsX0NEU05fSU8pICYgMSkgewogCQlwcmludGsoIkVycm9yIHByb2dyYW1taW5nIG9vYiBkYXRhXG4iKTsKIAkJLyogRklYTUU6IGltcGxlbWVudCBCYWQgQmxvY2sgUmVwbGFjZW1lbnQgKGluIG5mdGwuYyA/PykgKi8KLQkJKnJldGxlbiA9IDA7CisJCW9wcy0+cmV0bGVuID0gMDsKIAkJcmV0ID0gLUVJTzsKIAl9CiAJZHVtbXkgPSBSZWFkRE9DKGRvY3B0ciwgTGFzdERhdGFSZWFkKTsKIAotCSpyZXRsZW4gPSBsZW47CisJb3BzLT5yZXRsZW4gPSBsZW47CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODU2LDEyICs4NjAsNiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2RvYzIwMDEodm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoaW1fbmFtZSwgVEhJU19NT0RVTEUsICZEb0NNaWxfaW5pdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2RvYzIwMDEodm9pZCkKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKQEAgLTg3NywxMSArODc1LDkgQEAKIAkJa2ZyZWUodGhpcy0+Y2hpcHMpOwogCQlrZnJlZShtdGQpOwogCX0KLQlpbnRlcl9tb2R1bGVfdW5yZWdpc3RlcihpbV9uYW1lKTsKIH0KIAogbW9kdWxlX2V4aXQoY2xlYW51cF9kb2MyMDAxKTsKLW1vZHVsZV9pbml0KGluaXRfZG9jMjAwMSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZXQgYWwuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDFwbHVzLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDFwbHVzLmMKaW5kZXggNWY1N2YyOS4uNjZjYjFlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxcGx1cy5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMXBsdXMuYwpAQCAtNDcsMTAgKzQ3LDEwIEBACiBzdGF0aWMgaW50IGRvY193cml0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKIAkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1ZiwKIAkJc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKLXN0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwotc3RhdGljIGludCBkb2Nfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOworc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CitzdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOwogc3RhdGljIGludCBkb2NfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpkb2NtaWxwbHVzbGlzdCA9IE5VTEw7CkBAIC00NDcsMTYgKzQ0Nyw5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgaW1fbmFtZVtdID0gIkRvQ01pbFBsdXNfaW5pdCI7Ci0KLS8qIFRoaXMgcm91dGluZSBpcyBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBtdGQgY29kZSB2aWEKLSAqIGludGVyX21vZHVsZV9yZWdpc3Rlci4gIEl0IG11c3Qgb25seSBiZSBhY2Nlc3NlZCB0aHJvdWdoCi0gKiBpbnRlcl9tb2R1bGVfZ2V0IHdoaWNoIHdpbGwgYnVtcCB0aGUgdXNlIGNvdW50IG9mIHRoaXMgbW9kdWxlLiAgVGhlCi0gKiBhZGRyZXNzZXMgcGFzc2VkIGJhY2sgaW4gbXRkIGFyZSB2YWxpZCBhcyBsb25nIGFzIHRoZSB1c2UgY291bnQgb2YKLSAqIHRoaXMgbW9kdWxlIGlzIG5vbi16ZXJvLCBpLmUuIGJldHdlZW4gaW50ZXJfbW9kdWxlX2dldCBhbmQKLSAqIGludGVyX21vZHVsZV9wdXQuICBLZWl0aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiAyOSBPY3QgMjAwMC4KLSAqLwotc3RhdGljIHZvaWQgRG9DTWlsUGx1c19pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorLyogVGhpcyByb3V0aW5lIGlzIGZvdW5kIGZyb20gdGhlIGRvY3Byb2JlIGNvZGUgYnkgc3ltYm9sX2dldCgpLAorICogd2hpY2ggd2lsbCBidW1wIHRoZSB1c2UgY291bnQgb2YgdGhpcyBtb2R1bGUuICovCit2b2lkIERvQ01pbFBsdXNfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqb2xkID0gTlVMTDsKQEAgLTQ5MCw3ICs0ODMsNyBAQAogCW10ZC0+c2l6ZSA9IDA7CiAKIAltdGQtPmVyYXNlc2l6ZSA9IDA7Ci0JbXRkLT5vb2JibG9jayA9IDUxMjsKKwltdGQtPndyaXRlc2l6ZSA9IDUxMjsKIAltdGQtPm9vYnNpemUgPSAxNjsKIAltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJbXRkLT5lcmFzZSA9IGRvY19lcmFzZTsKQEAgLTQ5OCw4ICs0OTEsNiBAQAogCW10ZC0+dW5wb2ludCA9IE5VTEw7CiAJbXRkLT5yZWFkID0gZG9jX3JlYWQ7CiAJbXRkLT53cml0ZSA9IGRvY193cml0ZTsKLQltdGQtPnJlYWRfZWNjID0gZG9jX3JlYWRfZWNjOwotCW10ZC0+d3JpdGVfZWNjID0gZG9jX3dyaXRlX2VjYzsKIAltdGQtPnJlYWRfb29iID0gZG9jX3JlYWRfb29iOwogCW10ZC0+d3JpdGVfb29iID0gZG9jX3dyaXRlX29vYjsKIAltdGQtPnN5bmMgPSBOVUxMOwpAQCAtNTI0LDYgKzUxNSw3IEBACiAJCXJldHVybjsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChEb0NNaWxQbHVzX2luaXQpOwogCiAjaWYgMAogc3RhdGljIGludCBkb2NfZHVtcGJsayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20pCkBAIC04NzYsMTQgKzg2OCwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQorc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKIAlsb2ZmX3QgZm9mcywgYmFzZTsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAl2b2lkIF9faW9tZW0gKiBkb2NwdHIgPSB0aGlzLT52aXJ0YWRyOwogCXN0cnVjdCBOYW5kICpteWNoaXAgPSAmdGhpcy0+Y2hpcHNbb2ZzID4+IHRoaXMtPmNoaXBzaGlmdF07CiAJc2l6ZV90IGksIHNpemUsIGdvdCwgd2FudDsKKwl1aW50OF90ICpidWYgPSBvcHMtPm9vYmJ1ZjsKKwlzaXplX3QgbGVuID0gb3BzLT5sZW47CisKKwlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOworCisJb2ZzICs9IG9wcy0+b29ib2ZmczsKIAogCURvQ19DaGVja0FTSUMoZG9jcHRyKTsKIApAQCAtOTQ5LDEyICs5NDcsMTIgQEAKIAkvKiBEaXNhYmxlIGZsYXNoIGludGVybmFsbHkgKi8KIAlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX0ZsYXNoU2VsZWN0KTsKIAotCSpyZXRsZW4gPSBsZW47CisJb3BzLT5yZXRsZW4gPSBsZW47CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKLQkJCSBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCitzdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7CiAJdm9sYXRpbGUgY2hhciBkdW1teTsKIAlsb2ZmX3QgZm9mcywgYmFzZTsKQEAgLTk2Myw2ICs5NjEsMTIgQEAKIAlzdHJ1Y3QgTmFuZCAqbXljaGlwID0gJnRoaXMtPmNoaXBzW29mcyA+PiB0aGlzLT5jaGlwc2hpZnRdOwogCXNpemVfdCBpLCBzaXplLCBnb3QsIHdhbnQ7CiAJaW50IHJldCA9IDA7CisJdWludDhfdCAqYnVmID0gb3BzLT5vb2JidWY7CisJc2l6ZV90IGxlbiA9IG9wcy0+bGVuOworCisJQlVHX09OKG9wcy0+bW9kZSAhPSBNVERfT09CX1BMQUNFKTsKKworCW9mcyArPSBvcHMtPm9vYm9mZnM7CiAKIAlEb0NfQ2hlY2tBU0lDKGRvY3B0cik7CiAKQEAgLTEwMzgsNyArMTA0Miw3IEBACiAJCQlwcmludGsoIk1URDogRXJyb3IgMHgleCBwcm9ncmFtbWluZyBvb2IgYXQgMHgleFxuIiwKIAkJCQlkdW1teSwgKGludClvZnMpOwogCQkJLyogRklYTUU6IGltcGxlbWVudCBCYWQgQmxvY2sgUmVwbGFjZW1lbnQgKi8KLQkJCSpyZXRsZW4gPSAwOworCQkJb3BzLT5yZXRsZW4gPSAwOwogCQkJcmV0ID0gLUVJTzsKIAkJfQogCQlkdW1teSA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwpAQCAtMTA1MSw3ICsxMDU1LDcgQEAKIAkvKiBEaXNhYmxlIGZsYXNoIGludGVybmFsbHkgKi8KIAlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX0ZsYXNoU2VsZWN0KTsKIAotCSpyZXRsZW4gPSBsZW47CisJb3BzLT5yZXRsZW4gPSBsZW47CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTEyMiwxMiArMTEyNiw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfZG9jMjAwMXBsdXModm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoaW1fbmFtZSwgVEhJU19NT0RVTEUsICZEb0NNaWxQbHVzX2luaXQpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9kb2MyMDAxcGx1cyh2b2lkKQogewogCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwpAQCAtMTE0MywxMSArMTE0MSw5IEBACiAJCWtmcmVlKHRoaXMtPmNoaXBzKTsKIAkJa2ZyZWUobXRkKTsKIAl9Ci0JaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoaW1fbmFtZSk7CiB9CiAKIG1vZHVsZV9leGl0KGNsZWFudXBfZG9jMjAwMXBsdXMpOwotbW9kdWxlX2luaXQoaW5pdF9kb2MyMDAxcGx1cyk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+IGV0IGFsLiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2Nwcm9iZS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2Nwcm9iZS5jCmluZGV4IDEzMTc4YjkuLjU5M2JiMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY3Byb2JlLmMKQEAgLTIzMSw2ICsyMzEsMTAgQEAKIAogc3RhdGljIGludCBkb2Nmb3VuZDsKIAorZXh0ZXJuIHZvaWQgRG9DMmtfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKik7CitleHRlcm4gdm9pZCBEb0NNaWxfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKik7CitleHRlcm4gdm9pZCBEb0NNaWxQbHVzX2luaXQoc3RydWN0IG10ZF9pbmZvICopOworCiBzdGF0aWMgdm9pZCBfX2luaXQgRG9DX1Byb2JlKHVuc2lnbmVkIGxvbmcgcGh5c2FkcikKIHsKIAl2b2lkIF9faW9tZW0gKmRvY3B0cjsKQEAgLTIzOSw4ICsyNDMsNiBAQAogCWludCBDaGlwSUQ7CiAJY2hhciBuYW1lYnVmWzE1XTsKIAljaGFyICpuYW1lID0gbmFtZWJ1ZjsKLQljaGFyICppbV9mdW5jbmFtZSA9IE5VTEw7Ci0JY2hhciAqaW1fbW9kbmFtZSA9IE5VTEw7CiAJdm9pZCAoKmluaXRyb3V0aW5lKShzdHJ1Y3QgbXRkX2luZm8gKikgPSBOVUxMOwogCiAJZG9jcHRyID0gaW9yZW1hcChwaHlzYWRyLCBET0NfSU9SRU1BUF9MRU4pOwpAQCAtMjc4LDQxICsyODAsMzMgQEAKIAkJc3dpdGNoKENoaXBJRCkgewogCQljYXNlIERPQ19DaGlwSURfRG9jMmtUU09QOgogCQkJbmFtZT0iMjAwMCBUU09QIjsKLQkJCWltX2Z1bmNuYW1lID0gIkRvQzJrX2luaXQiOwotCQkJaW1fbW9kbmFtZSA9ICJkb2MyMDAwIjsKKwkJCWluaXRyb3V0aW5lID0gc3ltYm9sX3JlcXVlc3QoRG9DMmtfaW5pdCk7CiAJCQlicmVhazsKIAogCQljYXNlIERPQ19DaGlwSURfRG9jMms6CiAJCQluYW1lPSIyMDAwIjsKLQkJCWltX2Z1bmNuYW1lID0gIkRvQzJrX2luaXQiOwotCQkJaW1fbW9kbmFtZSA9ICJkb2MyMDAwIjsKKwkJCWluaXRyb3V0aW5lID0gc3ltYm9sX3JlcXVlc3QoRG9DMmtfaW5pdCk7CiAJCQlicmVhazsKIAogCQljYXNlIERPQ19DaGlwSURfRG9jTWlsOgogCQkJbmFtZT0iTWlsbGVubml1bSI7CiAjaWZkZWYgRE9DX1NJTkdMRV9EUklWRVIKLQkJCWltX2Z1bmNuYW1lID0gIkRvQzJrX2luaXQiOwotCQkJaW1fbW9kbmFtZSA9ICJkb2MyMDAwIjsKKwkJCWluaXRyb3V0aW5lID0gc3ltYm9sX3JlcXVlc3QoRG9DMmtfaW5pdCk7CiAjZWxzZQotCQkJaW1fZnVuY25hbWUgPSAiRG9DTWlsX2luaXQiOwotCQkJaW1fbW9kbmFtZSA9ICJkb2MyMDAxIjsKKwkJCWluaXRyb3V0aW5lID0gc3ltYm9sX3JlcXVlc3QoRG9DTWlsX2luaXQpOwogI2VuZGlmIC8qIERPQ19TSU5HTEVfRFJJVkVSICovCiAJCQlicmVhazsKIAogCQljYXNlIERPQ19DaGlwSURfRG9jTWlsUGx1czE2OgogCQljYXNlIERPQ19DaGlwSURfRG9jTWlsUGx1czMyOgogCQkJbmFtZT0iTWlsbGVubml1bVBsdXMiOwotCQkJaW1fZnVuY25hbWUgPSAiRG9DTWlsUGx1c19pbml0IjsKLQkJCWltX21vZG5hbWUgPSAiZG9jMjAwMXBsdXMiOworCQkJaW5pdHJvdXRpbmUgPSBzeW1ib2xfcmVxdWVzdChEb0NNaWxQbHVzX2luaXQpOwogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoaW1fZnVuY25hbWUpCi0JCQlpbml0cm91dGluZSA9IGludGVyX21vZHVsZV9nZXRfcmVxdWVzdChpbV9mdW5jbmFtZSwgaW1fbW9kbmFtZSk7Ci0KIAkJaWYgKGluaXRyb3V0aW5lKSB7CiAJCQkoKmluaXRyb3V0aW5lKShtdGQpOwotCQkJaW50ZXJfbW9kdWxlX3B1dChpbV9mdW5jbmFtZSk7CisJCQlzeW1ib2xfcHV0X2FkZHIoaW5pdHJvdXRpbmUpOwogCQkJcmV0dXJuOwogCQl9CiAJCXByaW50ayhLRVJOX05PVElDRSAiQ2Fubm90IGZpbmQgZHJpdmVyIGZvciBEaXNrT25DaGlwICVzIGF0IDB4JWxYXG4iLCBuYW1lLCBwaHlzYWRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbGFydC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKaW5kZXggMjliMGRkYS4uNGVhNTBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKQEAgLTYzNSw2ICs2MzUsNyBAQAogICAgcHJpbnRrICgiJXM6IFRoaXMgbG9va3MgbGlrZSBhIExBUlQgYm9hcmQgdG8gbWUuXG4iLG1vZHVsZV9uYW1lKTsKICAgIG10ZC5uYW1lID0gbW9kdWxlX25hbWU7CiAgICBtdGQudHlwZSA9IE1URF9OT1JGTEFTSDsKKyAgIG10ZC53cml0ZXNpemUgPSAxOwogICAgbXRkLmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSDsKICAgIG10ZC5zaXplID0gRkxBU0hfQkxPQ0tTSVpFX1BBUkFNICogRkxBU0hfTlVNQkxPQ0tTXzE2bV9QQVJBTSArIEZMQVNIX0JMT0NLU0laRV9NQUlOICogRkxBU0hfTlVNQkxPQ0tTXzE2bV9NQUlOOwogICAgbXRkLmVyYXNlc2l6ZSA9IEZMQVNIX0JMT0NLU0laRV9NQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKaW5kZXggMDRlNjVkNS4uYTg0NjYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCkBAIC00NjUsNiArNDY1LDcgQEAKIAkJZmxhc2gtPm10ZC5uYW1lID0gc3BpLT5kZXYuYnVzX2lkOwogCiAJZmxhc2gtPm10ZC50eXBlID0gTVREX05PUkZMQVNIOworCWZsYXNoLT5tdGQud3JpdGVzaXplID0gMTsKIAlmbGFzaC0+bXRkLmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSDsKIAlmbGFzaC0+bXRkLnNpemUgPSBpbmZvLT5zZWN0b3Jfc2l6ZSAqIGluZm8tPm5fc2VjdG9yczsKIAlmbGFzaC0+bXRkLmVyYXNlc2l6ZSA9IGluZm8tPnNlY3Rvcl9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tczAyLW52LmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL21zMDItbnYuYwppbmRleCA0ODVmNjYzLi40YWI3NjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL21zMDItbnYuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL21zMDItbnYuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJbXAtPnVhZGRyID0gcGh5c190b192aXJ0KGZpeGFkZHIpOwogCiAJbXRkLT50eXBlID0gTVREX1JBTTsKLQltdGQtPmZsYWdzID0gTVREX0NBUF9SQU0gfCBNVERfWElQOworCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX1JBTTsKIAltdGQtPnNpemUgPSBmaXhzaXplOwogCW10ZC0+bmFtZSA9IChjaGFyICopbXMwMm52X25hbWU7CiAJbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRyYW0uYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkcmFtLmMKaW5kZXggMTQ0MzExNy4uYjQ0MzhlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRyYW0uYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZHJhbS5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAltdGQtPnR5cGUgPSBNVERfUkFNOwogCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX1JBTTsKIAltdGQtPnNpemUgPSBzaXplOworCW10ZC0+d3JpdGVzaXplID0gMTsKIAltdGQtPmVyYXNlc2l6ZSA9IE1URFJBTV9FUkFTRV9TSVpFOwogCW10ZC0+cHJpdiA9IG1hcHBlZF9hZGRyZXNzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BocmFtLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3BocmFtLmMKaW5kZXggZTg2ODVlZS4uZTA5ZTQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9waHJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcGhyYW0uYwpAQCAtMSw4ICsxLDggQEAKIC8qKgogICogJElkOiBwaHJhbS5jLHYgMS4xNiAyMDA1LzExLzA3IDExOjE0OjI1IGdsZWl4bmVyIEV4cCAkCiAgKgotICogQ29weXJpZ2h0IChjKSA/Pz8/CQlKb2NoZW4gU2No5HVibGUgPHBzaW9uaWNAcHNpb25pYy5kZT4KLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA0CUr2cm4gRW5nZWwgPGpvZXJuQHdoLmZoLXdlZGVsLmRlPgorICogQ29weXJpZ2h0IChjKSA/Pz8/CQlKb2NoZW4gU2Now6R1YmxlIDxwc2lvbmljQHBzaW9uaWMuZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNAlKw7ZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+CiAgKgogICogVXNhZ2U6CiAgKgpAQCAtMTQyLDcgKzE0Miw3IEBACiAKIAluZXctPm10ZC5uYW1lID0gbmFtZTsKIAluZXctPm10ZC5zaXplID0gbGVuOwotCW5ldy0+bXRkLmZsYWdzID0gTVREX0NBUF9SQU0gfCBNVERfRVJBU0VBQkxFIHwgTVREX1ZPTEFUSUxFOworCW5ldy0+bXRkLmZsYWdzID0gTVREX0NBUF9SQU07CiAgICAgICAgIG5ldy0+bXRkLmVyYXNlID0gcGhyYW1fZXJhc2U7CiAJbmV3LT5tdGQucG9pbnQgPSBwaHJhbV9wb2ludDsKIAluZXctPm10ZC51bnBvaW50ID0gcGhyYW1fdW5wb2ludDsKQEAgLTI2NiwxMiArMjY2LDE2IEBACiAJCXJldHVybiAwOwogCiAJcmV0ID0gcGFyc2VfbnVtMzIoJnN0YXJ0LCB0b2tlblsxXSk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCWtmcmVlKG5hbWUpOwogCQlwYXJzZV9lcnIoImlsbGVnYWwgc3RhcnQgYWRkcmVzc1xuIik7CisJfQogCiAJcmV0ID0gcGFyc2VfbnVtMzIoJmxlbiwgdG9rZW5bMl0pOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlrZnJlZShuYW1lKTsKIAkJcGFyc2VfZXJyKCJpbGxlZ2FsIGRldmljZSBsZW5ndGhcbiIpOworCX0KIAogCXJlZ2lzdGVyX2RldmljZShuYW1lLCBzdGFydCwgbGVuKTsKIApAQCAtMjk2LDUgKzMwMCw1IEBACiBtb2R1bGVfZXhpdChjbGVhbnVwX3BocmFtKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSvZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+Iik7CitNT0RVTEVfQVVUSE9SKCJKw7ZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1URCBkcml2ZXIgZm9yIHBoeXNpY2FsIFJBTSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jCmluZGV4IDZmYWVlNmMuLmIzZjY2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvc2xyYW0uYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3NscmFtLmMKQEAgLTIwMCw4ICsyMDAsNyBAQAogCiAJKCpjdXJtdGQpLT5tdGRpbmZvLT5uYW1lID0gbmFtZTsKIAkoKmN1cm10ZCktPm10ZGluZm8tPnNpemUgPSBsZW5ndGg7Ci0JKCpjdXJtdGQpLT5tdGRpbmZvLT5mbGFncyA9IE1URF9DTEVBUl9CSVRTIHwgTVREX1NFVF9CSVRTIHwKLQkJCQkJTVREX1dSSVRFQl9XUklURUFCTEUgfCBNVERfVk9MQVRJTEUgfCBNVERfQ0FQX1JBTTsKKwkoKmN1cm10ZCktPm10ZGluZm8tPmZsYWdzID0gTVREX0NBUF9SQU07CiAgICAgICAgICgqY3VybXRkKS0+bXRkaW5mby0+ZXJhc2UgPSBzbHJhbV9lcmFzZTsKIAkoKmN1cm10ZCktPm10ZGluZm8tPnBvaW50ID0gc2xyYW1fcG9pbnQ7CiAJKCpjdXJtdGQpLT5tdGRpbmZvLT51bnBvaW50ID0gc2xyYW1fdW5wb2ludDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jIGIvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKaW5kZXggYTNiOTI0Ny4uMWUyMWEyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKKysrIGIvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25mdGwuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvaW5mdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC03OSwxNCArODAsMTIgQEAKIAlpbmZ0bC0+bWJkLmRldm51bSA9IC0xOwogCWluZnRsLT5tYmQuYmxrc2l6ZSA9IDUxMjsKIAlpbmZ0bC0+bWJkLnRyID0gdHI7Ci0JbWVtY3B5KCZpbmZ0bC0+b29iaW5mbywgJm10ZC0+b29iaW5mbywgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKTsKLQlpbmZ0bC0+b29iaW5mby51c2VlY2MgPSBNVERfTkFOREVDQ19QTEFDRU9OTFk7CiAKLSAgICAgICAgaWYgKElORlRMX21vdW50KGluZnRsKSA8IDApIHsKKwlpZiAoSU5GVExfbW91bnQoaW5mdGwpIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJJTkZUTDogY291bGQgbm90IG1vdW50IGRldmljZVxuIik7CiAJCWtmcmVlKGluZnRsKTsKIAkJcmV0dXJuOwotICAgICAgICB9CisJfQogCiAJLyogT0ssIGl0J3MgYSBuZXcgb25lLiBTZXQgdXAgYWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMuICovCiAKQEAgLTE1Miw2ICsxNTEsNjkgQEAKICAqLwogCiAvKgorICogUmVhZCBvb2IgZGF0YSBmcm9tIGZsYXNoCisgKi8KK2ludCBpbmZ0bF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCSAgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgcmVzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCW9wcy5vb2JvZmZzID0gb2ZmcyAmIChtdGQtPndyaXRlc2l6ZSAtIDEpOworCW9wcy5vb2JsZW4gPSBsZW47CisJb3BzLm9vYmJ1ZiA9IGJ1ZjsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubGVuID0gbGVuOworCisJcmVzID0gbXRkLT5yZWFkX29vYihtdGQsIG9mZnMgJiB+KG10ZC0+d3JpdGVzaXplIC0gMSksICZvcHMpOworCSpyZXRsZW4gPSBvcHMucmV0bGVuOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBXcml0ZSBvb2IgZGF0YSB0byBmbGFzaAorICovCitpbnQgaW5mdGxfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKKwkJICAgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgcmVzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCW9wcy5vb2JvZmZzID0gb2ZmcyAmIChtdGQtPndyaXRlc2l6ZSAtIDEpOworCW9wcy5vb2JsZW4gPSBsZW47CisJb3BzLm9vYmJ1ZiA9IGJ1ZjsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubGVuID0gbGVuOworCisJcmVzID0gbXRkLT53cml0ZV9vb2IobXRkLCBvZmZzICYgfihtdGQtPndyaXRlc2l6ZSAtIDEpLCAmb3BzKTsKKwkqcmV0bGVuID0gb3BzLnJldGxlbjsKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogV3JpdGUgZGF0YSBhbmQgb29iIHRvIGZsYXNoCisgKi8KK3N0YXRpYyBpbnQgaW5mdGxfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkgICAgICAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqb29iKQoreworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisJaW50IHJlczsKKworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKwlvcHMub29ib2ZmcyA9IG9mZnM7CisJb3BzLm9vYmxlbiA9IG10ZC0+b29ic2l6ZTsKKwlvcHMub29iYnVmID0gb29iOworCW9wcy5kYXRidWYgPSBidWY7CisJb3BzLmxlbiA9IGxlbjsKKworCXJlcyA9IG10ZC0+d3JpdGVfb29iKG10ZCwgb2ZmcyAmIH4obXRkLT53cml0ZXNpemUgLSAxKSwgJm9wcyk7CisJKnJldGxlbiA9IG9wcy5yZXRsZW47CisJcmV0dXJuIHJlczsKK30KKworLyoKICAqIElORlRMX2ZpbmRmcmVlYmxvY2s6IEZpbmQgYSBmcmVlIEVyYXNlIFVuaXQgb24gdGhlIElORlRMIHBhcnRpdGlvbi4KICAqCVRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIHRoZSBnaXZlIFZpcnR1YWwgVW5pdCBDaGFpbi4KICAqLwpAQCAtMTk4LDEwICsyNjAsMTEgQEAKIAl1MTYgQmxvY2tNYXBbTUFYX1NFQ1RPUlNfUEVSX1VOSVRdOwogCXVuc2lnbmVkIGNoYXIgQmxvY2tEZWxldGVkW01BWF9TRUNUT1JTX1BFUl9VTklUXTsKIAl1bnNpZ25lZCBpbnQgdGhpc0VVTiwgcHJldkVVTiwgc3RhdHVzOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaW5mdGwtPm1iZC5tdGQ7CiAJaW50IGJsb2NrLCBzaWxseTsKIAl1bnNpZ25lZCBpbnQgdGFyZ2V0RVVOOwogCXN0cnVjdCBpbmZ0bF9vb2Igb29iOwotICAgICAgICBzaXplX3QgcmV0bGVuOworCXNpemVfdCByZXRsZW47CiAKIAlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiSU5GVEw6IElORlRMX2ZvbGRjaGFpbihpbmZ0bD0lcCx0aGlzVlVDPSVkLCIKIAkJInBlbmRpbmc9JWQpXG4iLCBpbmZ0bCwgdGhpc1ZVQywgcGVuZGluZ2Jsb2NrKTsKQEAgLTIyMSwxOCArMjg0LDE4IEBACiAJICogU2NhbiB0byBmaW5kIHRoZSBFcmFzZSBVbml0IHdoaWNoIGhvbGRzIHRoZSBhY3R1YWwgZGF0YSBmb3IgZWFjaAogCSAqIDUxMi1ieXRlIGJsb2NrIHdpdGhpbiB0aGUgQ2hhaW4uCiAJICovCi0gICAgICAgIHNpbGx5ID0gTUFYX0xPT1BTOworCXNpbGx5ID0gTUFYX0xPT1BTOwogCXdoaWxlICh0aGlzRVVOIDwgaW5mdGwtPm5iX2Jsb2NrcykgewogCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCBpbmZ0bC0+RXJhc2VTaXplL1NFQ1RPUlNJWkU7IGJsb2NrICsrKSB7CiAJCQlpZiAoKEJsb2NrTWFwW2Jsb2NrXSAhPSAweGZmZmYpIHx8IEJsb2NrRGVsZXRlZFtibG9ja10pCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChNVERfUkVBRE9PQihpbmZ0bC0+bWJkLm10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKQotCQkJICAgICArIChibG9jayAqIFNFQ1RPUlNJWkUpLCAxNiAsICZyZXRsZW4sCi0JCQkgICAgIChjaGFyICopJm9vYikgPCAwKQorCQkJaWYgKGluZnRsX3JlYWRfb29iKG10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKQorCQkJCQkgICArIChibG9jayAqIFNFQ1RPUlNJWkUpLCAxNiwgJnJldGxlbiwKKwkJCQkJICAgKGNoYXIgKikmb29iKSA8IDApCiAJCQkJc3RhdHVzID0gU0VDVE9SX0lHTk9SRTsKIAkJCWVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIAlzdGF0dXMgPSBvb2IuYi5TdGF0dXMgfCBvb2IuYi5TdGF0dXMxOworCQkJCXN0YXR1cyA9IG9vYi5iLlN0YXR1cyB8IG9vYi5iLlN0YXR1czE7CiAKIAkJCXN3aXRjaChzdGF0dXMpIHsKIAkJCWNhc2UgU0VDVE9SX0ZSRUU6CkBAIC0yODIsMjkgKzM0NSwzMSBAQAogCQkJY29udGludWU7CiAJCX0KIAotICAgICAgICAgICAgICAgIC8qCisJCS8qCiAJCSAqIENvcHkgb25seSBpbiBub24gZnJlZSBibG9jayAoZnJlZSBibG9ja3MgY2FuIG9ubHkKICAgICAgICAgICAgICAgICAgKiBoYXBwZW4gaW4gY2FzZSBvZiBtZWRpYSBlcnJvcnMgb3IgZGVsZXRlZCBibG9ja3MpLgogCQkgKi8KLSAgICAgICAgICAgICAgICBpZiAoQmxvY2tNYXBbYmxvY2tdID09IEJMT0NLX05JTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCQlpZiAoQmxvY2tNYXBbYmxvY2tdID09IEJMT0NLX05JTCkKKwkJCWNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgcmV0ID0gTVREX1JFQUQoaW5mdGwtPm1iZC5tdGQsIChpbmZ0bC0+RXJhc2VTaXplICoKLQkJCUJsb2NrTWFwW2Jsb2NrXSkgKyAoYmxvY2sgKiBTRUNUT1JTSVpFKSwgU0VDVE9SU0laRSwKLQkJCSZyZXRsZW4sIG1vdmVidWYpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Ci0JCQlyZXQgPSBNVERfUkVBRChpbmZ0bC0+bWJkLm10ZCwgKGluZnRsLT5FcmFzZVNpemUgKgotCQkJCUJsb2NrTWFwW2Jsb2NrXSkgKyAoYmxvY2sgKiBTRUNUT1JTSVpFKSwKLQkJCQlTRUNUT1JTSVpFLCAmcmV0bGVuLCBtb3ZlYnVmKTsKKwkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgKGluZnRsLT5FcmFzZVNpemUgKiBCbG9ja01hcFtibG9ja10pICsKKwkJCQkoYmxvY2sgKiBTRUNUT1JTSVpFKSwgU0VDVE9SU0laRSwgJnJldGxlbiwKKwkJCQltb3ZlYnVmKTsKKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FVUNMRUFOKSB7CisJCQlyZXQgPSBtdGQtPnJlYWQobXRkLAorCQkJCQkoaW5mdGwtPkVyYXNlU2l6ZSAqIEJsb2NrTWFwW2Jsb2NrXSkgKworCQkJCQkoYmxvY2sgKiBTRUNUT1JTSVpFKSwgU0VDVE9SU0laRSwKKwkJCQkJJnJldGxlbiwgbW92ZWJ1Zik7CiAJCQlpZiAocmV0ICE9IC1FSU8pCi0gICAgICAgICAgICAgICAgICAgICAgICAJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwgIklORlRMOiBlcnJvciB3ZW50ICIKLQkJCQkJImF3YXkgb24gcmV0cnk/XG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtc2V0KCZvb2IsIDB4ZmYsIHNpemVvZihzdHJ1Y3QgaW5mdGxfb29iKSk7Ci0gICAgICAgICAgICAgICAgb29iLmIuU3RhdHVzID0gb29iLmIuU3RhdHVzMSA9IFNFQ1RPUl9VU0VEOwotICAgICAgICAgICAgICAgIE1URF9XUklURUVDQyhpbmZ0bC0+bWJkLm10ZCwgKGluZnRsLT5FcmFzZVNpemUgKiB0YXJnZXRFVU4pICsKLQkJCShibG9jayAqIFNFQ1RPUlNJWkUpLCBTRUNUT1JTSVpFLCAmcmV0bGVuLAotCQkJbW92ZWJ1ZiwgKGNoYXIgKikmb29iLCAmaW5mdGwtPm9vYmluZm8pOworCQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDEsICJJTkZUTDogZXJyb3Igd2VudCAiCisJCQkJICAgICAgImF3YXkgb24gcmV0cnk/XG4iKTsKKwkJfQorCQltZW1zZXQoJm9vYiwgMHhmZiwgc2l6ZW9mKHN0cnVjdCBpbmZ0bF9vb2IpKTsKKwkJb29iLmIuU3RhdHVzID0gb29iLmIuU3RhdHVzMSA9IFNFQ1RPUl9VU0VEOworCisJCWluZnRsX3dyaXRlKGluZnRsLT5tYmQubXRkLCAoaW5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKworCQkJICAgIChibG9jayAqIFNFQ1RPUlNJWkUpLCBTRUNUT1JTSVpFLCAmcmV0bGVuLAorCQkJICAgIG1vdmVidWYsIChjaGFyICopJm9vYik7CiAJfQogCiAJLyoKQEAgLTMyOSwxNyArMzk0LDE3IEBACiAJCWlmICh0aGlzRVVOID09IHRhcmdldEVVTikKIAkJCWJyZWFrOwogCi0gICAgICAgICAgICAgICAgaWYgKElORlRMX2Zvcm1hdGJsb2NrKGluZnRsLCB0aGlzRVVOKSA8IDApIHsKKwkJaWYgKElORlRMX2Zvcm1hdGJsb2NrKGluZnRsLCB0aGlzRVVOKSA8IDApIHsKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgZXJhc2UgOiBtYXJrIGJsb2NrIGFzIHJlc2VydmVkLgogCQkJICovCiAJCQlpbmZ0bC0+UFV0YWJsZVt0aGlzRVVOXSA9IEJMT0NLX1JFU0VSVkVEOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBDb3JyZWN0bHkgZXJhc2VkIDogbWFyayBpdCBhcyBmcmVlICovCiAJCQlpbmZ0bC0+UFV0YWJsZVt0aGlzRVVOXSA9IEJMT0NLX0ZSRUU7CiAJCQlpbmZ0bC0+UFV0YWJsZVtwcmV2RVVOXSA9IEJMT0NLX05JTDsKIAkJCWluZnRsLT5udW1mcmVlRVVOcysrOwotICAgICAgICAgICAgICAgIH0KKwkJfQogCX0KIAogCXJldHVybiB0YXJnZXRFVU47CkBAIC00MTUsNiArNDgwLDcgQEAKIAl1bnNpZ25lZCBpbnQgdGhpc1ZVQyA9IGJsb2NrIC8gKGluZnRsLT5FcmFzZVNpemUgLyBTRUNUT1JTSVpFKTsKIAl1bnNpZ25lZCBpbnQgdGhpc0VVTiwgd3JpdGVFVU4sIHByZXZfYmxvY2ssIHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGJsb2Nrb2ZzID0gKGJsb2NrICogU0VDVE9SU0laRSkgJiAoaW5mdGwtPkVyYXNlU2l6ZSAtMSk7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBpbmZ0bC0+bWJkLm10ZDsKIAlzdHJ1Y3QgaW5mdGxfb29iIG9vYjsKIAlzdHJ1Y3QgaW5mdGxfYmNpIGJjaTsKIAl1bnNpZ25lZCBjaGFyIGFuYWMsIG5hY3MsIHBhcml0eTsKQEAgLTQzNCwxMCArNTAwLDEwIEBACiAJCXNpbGx5ID0gTUFYX0xPT1BTOwogCiAJCXdoaWxlICh0aGlzRVVOIDw9IGluZnRsLT5sYXN0RVVOKSB7Ci0JCQlNVERfUkVBRE9PQihpbmZ0bC0+bWJkLm10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArCi0JCQkJYmxvY2tvZnMsIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSk7CisJCQlpbmZ0bF9yZWFkX29vYihtdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKworCQkJCSAgICAgICBibG9ja29mcywgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gYmNpLlN0YXR1cyB8IGJjaS5TdGF0dXMxOworCQkJc3RhdHVzID0gYmNpLlN0YXR1cyB8IGJjaS5TdGF0dXMxOwogCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIklORlRMOiBzdGF0dXMgb2YgYmxvY2sgJWQgaW4gIgogCQkJCSJFVU4gJWQgaXMgJXhcbiIsIGJsb2NrICwgd3JpdGVFVU4sIHN0YXR1cyk7CiAKQEAgLTUyMiw4ICs1ODgsOCBAQAogCQluYWNzID0gMDsKIAkJdGhpc0VVTiA9IGluZnRsLT5WVXRhYmxlW3RoaXNWVUNdOwogCQlpZiAodGhpc0VVTiAhPSBCTE9DS19OSUwpIHsKLQkJCU1URF9SRUFET09CKGluZnRsLT5tYmQubXRkLCB0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZQotCQkJCSsgOCwgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQkJaW5mdGxfcmVhZF9vb2IobXRkLCB0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZQorCQkJCSAgICAgICArIDgsIDgsICZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKIAkJCWFuYWMgPSBvb2IudS5hLkFOQUMgKyAxOwogCQkJbmFjcyA9IG9vYi51LmEuTkFDcyArIDE7CiAJCX0KQEAgLTU0NCw4ICs2MTAsOCBAQAogCQlvb2IudS5hLnBhcml0eVBlckZpZWxkID0gcGFyaXR5OwogCQlvb2IudS5hLmRpc2NhcmRlZCA9IDB4YWE7CiAKLQkJTVREX1dSSVRFT09CKGluZnRsLT5tYmQubXRkLCB3cml0ZUVVTiAqIGluZnRsLT5FcmFzZVNpemUgKyA4LCA4LAotCQkJJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQlpbmZ0bF93cml0ZV9vb2IobXRkLCB3cml0ZUVVTiAqIGluZnRsLT5FcmFzZVNpemUgKyA4LCA4LAorCQkJCSZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKIAogCQkvKiBBbHNvIGJhY2sgdXAgaGVhZGVyLi4uICovCiAJCW9vYi51LmIudmlydHVhbFVuaXRObyA9IGNwdV90b19sZTE2KHRoaXNWVUMpOwpAQCAtNTU1LDggKzYyMSw4IEBACiAJCW9vYi51LmIucGFyaXR5UGVyRmllbGQgPSBwYXJpdHk7CiAJCW9vYi51LmIuZGlzY2FyZGVkID0gMHhhYTsKIAotCQlNVERfV1JJVEVPT0IoaW5mdGwtPm1iZC5tdGQsIHdyaXRlRVVOICogaW5mdGwtPkVyYXNlU2l6ZSArCi0JCQlTRUNUT1JTSVpFICogNCArIDgsIDgsICZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKKwkJaW5mdGxfd3JpdGVfb29iKG10ZCwgd3JpdGVFVU4gKiBpbmZ0bC0+RXJhc2VTaXplICsKKwkJCQlTRUNUT1JTSVpFICogNCArIDgsIDgsICZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKIAogCQlpbmZ0bC0+UFV0YWJsZVt3cml0ZUVVTl0gPSBpbmZ0bC0+VlV0YWJsZVt0aGlzVlVDXTsKIAkJaW5mdGwtPlZVdGFibGVbdGhpc1ZVQ10gPSB3cml0ZUVVTjsKQEAgLTU3Niw2ICs2NDIsNyBAQAogICovCiBzdGF0aWMgdm9pZCBJTkZUTF90cnlkZWxldGVjaGFpbihzdHJ1Y3QgSU5GVExyZWNvcmQgKmluZnRsLCB1bnNpZ25lZCB0aGlzVlVDKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaW5mdGwtPm1iZC5tdGQ7CiAJdW5zaWduZWQgY2hhciBCbG9ja1VzZWRbTUFYX1NFQ1RPUlNfUEVSX1VOSVRdOwogCXVuc2lnbmVkIGNoYXIgQmxvY2tEZWxldGVkW01BWF9TRUNUT1JTX1BFUl9VTklUXTsKIAl1bnNpZ25lZCBpbnQgdGhpc0VVTiwgc3RhdHVzOwpAQCAtNjA2LDkgKzY3Myw5IEBACiAJCQlpZiAoQmxvY2tVc2VkW2Jsb2NrXSB8fCBCbG9ja0RlbGV0ZWRbYmxvY2tdKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoTVREX1JFQURPT0IoaW5mdGwtPm1iZC5tdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkKLQkJCSAgICArIChibG9jayAqIFNFQ1RPUlNJWkUpLCA4ICwgJnJldGxlbiwKLQkJCSAgICAoY2hhciAqKSZiY2kpIDwgMCkKKwkJCWlmIChpbmZ0bF9yZWFkX29vYihtdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkKKwkJCQkJICAgKyAoYmxvY2sgKiBTRUNUT1JTSVpFKSwgOCAsICZyZXRsZW4sCisJCQkJCSAgKGNoYXIgKikmYmNpKSA8IDApCiAJCQkJc3RhdHVzID0gU0VDVE9SX0lHTk9SRTsKIAkJCWVsc2UKIAkJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CkBAIC02NzAsMTIgKzczNywxMiBAQAogCQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiRGVsZXRpbmcgRVVOICVkIGZyb20gVlVDICVkXG4iLAogCQkgICAgICB0aGlzRVVOLCB0aGlzVlVDKTsKIAotICAgICAgICAgICAgICAgIGlmIChJTkZUTF9mb3JtYXRibG9jayhpbmZ0bCwgdGhpc0VVTikgPCAwKSB7CisJCWlmIChJTkZUTF9mb3JtYXRibG9jayhpbmZ0bCwgdGhpc0VVTikgPCAwKSB7CiAJCQkvKgogCQkJICogQ291bGQgbm90IGVyYXNlIDogbWFyayBibG9jayBhcyByZXNlcnZlZC4KIAkJCSAqLwogCQkJaW5mdGwtPlBVdGFibGVbdGhpc0VVTl0gPSBCTE9DS19SRVNFUlZFRDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworCQl9IGVsc2UgewogCQkJLyogQ29ycmVjdGx5IGVyYXNlZCA6IG1hcmsgaXQgYXMgZnJlZSAqLwogCQkJaW5mdGwtPlBVdGFibGVbdGhpc0VVTl0gPSBCTE9DS19GUkVFOwogCQkJaW5mdGwtPm51bWZyZWVFVU5zKys7CkBAIC02OTcsNiArNzY0LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdGhpc0VVTiA9IGluZnRsLT5WVXRhYmxlW2Jsb2NrIC8gKGluZnRsLT5FcmFzZVNpemUgLyBTRUNUT1JTSVpFKV07CiAJdW5zaWduZWQgbG9uZyBibG9ja29mcyA9IChibG9jayAqIFNFQ1RPUlNJWkUpICYgKGluZnRsLT5FcmFzZVNpemUgLSAxKTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGluZnRsLT5tYmQubXRkOwogCXVuc2lnbmVkIGludCBzdGF0dXM7CiAJaW50IHNpbGx5ID0gTUFYX0xPT1BTOwogCXNpemVfdCByZXRsZW47CkBAIC03MDYsOCArNzc0LDggQEAKIAkJImJsb2NrPSVkKVxuIiwgaW5mdGwsIGJsb2NrKTsKIAogCXdoaWxlICh0aGlzRVVOIDwgaW5mdGwtPm5iX2Jsb2NrcykgewotCQlpZiAoTVREX1JFQURPT0IoaW5mdGwtPm1iZC5tdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKwotCQkgICAgYmxvY2tvZnMsIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSkgPCAwKQorCQlpZiAoaW5mdGxfcmVhZF9vb2IobXRkLCAodGhpc0VVTiAqIGluZnRsLT5FcmFzZVNpemUpICsKKwkJCQkgICBibG9ja29mcywgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCiAJCQlzdGF0dXMgPSBTRUNUT1JfSUdOT1JFOwogCQllbHNlCiAJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CkBAIC03NDEsMTAgKzgwOSwxMCBAQAogCWlmICh0aGlzRVVOICE9IEJMT0NLX05JTCkgewogCQlsb2ZmX3QgcHRyID0gKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArIGJsb2Nrb2ZzOwogCi0JCWlmIChNVERfUkVBRE9PQihpbmZ0bC0+bWJkLm10ZCwgcHRyLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKKwkJaWYgKGluZnRsX3JlYWRfb29iKG10ZCwgcHRyLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKIAkJCXJldHVybiAtRUlPOwogCQliY2kuU3RhdHVzID0gYmNpLlN0YXR1czEgPSBTRUNUT1JfREVMRVRFRDsKLQkJaWYgKE1URF9XUklURU9PQihpbmZ0bC0+bWJkLm10ZCwgcHRyLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKKwkJaWYgKGluZnRsX3dyaXRlX29vYihtdGQsIHB0ciwgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKIAkJSU5GVExfdHJ5ZGVsZXRlY2hhaW4oaW5mdGwsIGJsb2NrIC8gKGluZnRsLT5FcmFzZVNpemUgLyBTRUNUT1JTSVpFKSk7CiAJfQpAQCAtNzg0LDkgKzg1MiwxMCBAQAogCiAJCW1lbXNldCgmb29iLCAweGZmLCBzaXplb2Yoc3RydWN0IGluZnRsX29vYikpOwogCQlvb2IuYi5TdGF0dXMgPSBvb2IuYi5TdGF0dXMxID0gU0VDVE9SX1VTRUQ7Ci0JCU1URF9XUklURUVDQyhpbmZ0bC0+bWJkLm10ZCwgKHdyaXRlRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKwotCQkJYmxvY2tvZnMsIFNFQ1RPUlNJWkUsICZyZXRsZW4sIChjaGFyICopYnVmZmVyLAotCQkJKGNoYXIgKikmb29iLCAmaW5mdGwtPm9vYmluZm8pOworCisJCWluZnRsX3dyaXRlKGluZnRsLT5tYmQubXRkLCAod3JpdGVFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArCisJCQkgICAgYmxvY2tvZnMsIFNFQ1RPUlNJWkUsICZyZXRsZW4sIChjaGFyICopYnVmZmVyLAorCQkJICAgIChjaGFyICopJm9vYik7CiAJCS8qCiAJCSAqIG5lZWQgdG8gd3JpdGUgU0VDVE9SX1VTRUQgZmxhZ3Mgc2luY2UgdGhleSBhcmUgbm90IHdyaXR0ZW4KIAkJICogaW4gbXRkX3dyaXRlZWNjCkBAIC04MDQsMTcgKzg3MywxOCBAQAogCXN0cnVjdCBJTkZUTHJlY29yZCAqaW5mdGwgPSAodm9pZCAqKW1iZDsKIAl1bnNpZ25lZCBpbnQgdGhpc0VVTiA9IGluZnRsLT5WVXRhYmxlW2Jsb2NrIC8gKGluZnRsLT5FcmFzZVNpemUgLyBTRUNUT1JTSVpFKV07CiAJdW5zaWduZWQgbG9uZyBibG9ja29mcyA9IChibG9jayAqIFNFQ1RPUlNJWkUpICYgKGluZnRsLT5FcmFzZVNpemUgLSAxKTsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0YXR1czsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGluZnRsLT5tYmQubXRkOworCXVuc2lnbmVkIGludCBzdGF0dXM7CiAJaW50IHNpbGx5ID0gTUFYX0xPT1BTOwotICAgICAgICBzdHJ1Y3QgaW5mdGxfYmNpIGJjaTsKKwlzdHJ1Y3QgaW5mdGxfYmNpIGJjaTsKIAlzaXplX3QgcmV0bGVuOwogCiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIklORlRMOiBpbmZ0bF9yZWFkYmxvY2soaW5mdGw9JXAsYmxvY2s9JWxkLCIKIAkJImJ1ZmZlcj0lcClcbiIsIGluZnRsLCBibG9jaywgYnVmZmVyKTsKIAogCXdoaWxlICh0aGlzRVVOIDwgaW5mdGwtPm5iX2Jsb2NrcykgewotCQlpZiAoTVREX1JFQURPT0IoaW5mdGwtPm1iZC5tdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKwotCQkgICAgIGJsb2Nrb2ZzLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKKwkJaWYgKGluZnRsX3JlYWRfb29iKG10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArCisJCQkJICBibG9ja29mcywgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCiAJCQlzdGF0dXMgPSBTRUNUT1JfSUdOT1JFOwogCQllbHNlCiAJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CkBAIC04NTAsMTAgKzkyMCwxMiBAQAogCQkvKiBUaGUgcmVxdWVzdGVkIGJsb2NrIGlzIG5vdCBvbiB0aGUgbWVkaWEsIHJldHVybiBhbGwgMHgwMCAqLwogCQltZW1zZXQoYnVmZmVyLCAwLCBTRUNUT1JTSVpFKTsKIAl9IGVsc2UgewotICAgICAgICAJc2l6ZV90IHJldGxlbjsKKwkJc2l6ZV90IHJldGxlbjsKIAkJbG9mZl90IHB0ciA9ICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKyBibG9ja29mczsKLQkJaWYgKE1URF9SRUFEKGluZnRsLT5tYmQubXRkLCBwdHIsIFNFQ1RPUlNJWkUsICZyZXRsZW4sCi0JCSAgICBidWZmZXIpKQorCQlpbnQgcmV0ID0gbXRkLT5yZWFkKG10ZCwgcHRyLCBTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWZmZXIpOworCisJCS8qIEhhbmRsZSBjb3JyZWN0ZWQgYml0IGZsaXBzIGdyYWNlZnVsbHkgKi8KKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FVUNMRUFOKQogCQkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvaW5mdGxtb3VudC5jIGIvZHJpdmVycy9tdGQvaW5mdGxtb3VudC5jCmluZGV4IDQzZmRjOTQuLjhmNjAwNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2luZnRsbW91bnQuYworKysgYi9kcml2ZXJzL210ZC9pbmZ0bG1vdW50LmMKQEAgLTQzLDYgKzQzLDExIEBACiAKIGNoYXIgaW5mdGxtb3VudHJldltdPSIkUmV2aXNpb246IDEuMTggJCI7CiAKK2V4dGVybiBpbnQgaW5mdGxfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkJICBzaXplX3QgKnJldGxlbiwgdWludDhfdCAqYnVmKTsKK2V4dGVybiBpbnQgaW5mdGxfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKKwkJCSAgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpOworCiAvKgogICogZmluZF9ib290X3JlY29yZDogRmluZCB0aGUgSU5GVEwgTWVkaWEgSGVhZGVyIGFuZCBpdHMgU3BhcmUgY29weSB3aGljaAogICoJY29udGFpbnMgdGhlIHZhcmlvdXMgZGV2aWNlIGluZm9ybWF0aW9uIG9mIHRoZSBJTkZUTCBwYXJ0aXRpb24gYW5kCkBAIC01Nyw2ICs2Miw3IEBACiAJdW5zaWduZWQgaW50IGksIGJsb2NrOwogCXU4IGJ1ZltTRUNUT1JTSVpFXTsKIAlzdHJ1Y3QgSU5GVExNZWRpYUhlYWRlciAqbWggPSAmaW5mdGwtPk1lZGlhSGRyOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaW5mdGwtPm1iZC5tdGQ7CiAJc3RydWN0IElORlRMUGFydGl0aW9uICppcDsKIAlzaXplX3QgcmV0bGVuOwogCkBAIC04MCw4ICs4Niw4IEBACiAJCSAqIENoZWNrIGZvciBCTkFORCBoZWFkZXIgZmlyc3QuIFRoZW4gd2hpbmdlIGlmIGl0J3MgZm91bmQKIAkJICogYnV0IGxhdGVyIGNoZWNrcyBmYWlsLgogCQkgKi8KLQkJcmV0ID0gTVREX1JFQUQoaW5mdGwtPm1iZC5tdGQsIGJsb2NrICogaW5mdGwtPkVyYXNlU2l6ZSwKLQkJICAgIFNFQ1RPUlNJWkUsICZyZXRsZW4sIGJ1Zik7CisJCXJldCA9IG10ZC0+cmVhZChtdGQsIGJsb2NrICogaW5mdGwtPkVyYXNlU2l6ZSwKKwkJCQlTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWYpOwogCQkvKiBXZSBpZ25vcmUgcmV0IGluIGNhc2UgdGhlIEVDQyBvZiB0aGUgTWVkaWFIZWFkZXIgaXMgaW52YWxpZAogCQkgICAod2hpY2ggaXMgYXBwYXJlbnRseSBhY2NlcHRhYmxlKSAqLwogCQlpZiAocmV0bGVuICE9IFNFQ1RPUlNJWkUpIHsKQEAgLTEwNiw4ICsxMTIsOSBAQAogCQl9CiAKIAkJLyogVG8gYmUgc2FmZXIgd2l0aCBCSU9TLCBhbHNvIHVzZSBlcmFzZSBtYXJrIGFzIGRpc2NyaW1pbmFudCAqLwotCQlpZiAoKHJldCA9IE1URF9SRUFET09CKGluZnRsLT5tYmQubXRkLCBibG9jayAqIGluZnRsLT5FcmFzZVNpemUgKwotCQkgICAgU0VDVE9SU0laRSArIDgsIDgsICZyZXRsZW4sIChjaGFyICopJmgxKSA8IDApKSB7CisJCWlmICgocmV0ID0gaW5mdGxfcmVhZF9vb2IobXRkLCBibG9jayAqIGluZnRsLT5FcmFzZVNpemUgKworCQkJCQkgIFNFQ1RPUlNJWkUgKyA4LCA4LCAmcmV0bGVuLAorCQkJCQkgIChjaGFyICopJmgxKSA8IDApKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJTkZUTDogQU5BTkQgaGVhZGVyIGZvdW5kIGF0ICIKIAkJCQkiMHgleCBpbiBtdGQlZCwgYnV0IE9PQiBkYXRhIHJlYWQgZmFpbGVkICIKIAkJCQkiKGVyciAlZClcbiIsIGJsb2NrICogaW5mdGwtPkVyYXNlU2l6ZSwKQEAgLTEyMyw4ICsxMzAsOCBAQAogCQltZW1jcHkobWgsIGJ1Ziwgc2l6ZW9mKHN0cnVjdCBJTkZUTE1lZGlhSGVhZGVyKSk7CiAKIAkJLyogUmVhZCB0aGUgc3BhcmUgbWVkaWEgaGVhZGVyIGF0IG9mZnNldCA0MDk2ICovCi0JCU1URF9SRUFEKGluZnRsLT5tYmQubXRkLCBibG9jayAqIGluZnRsLT5FcmFzZVNpemUgKyA0MDk2LAotCQkgICAgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmKTsKKwkJbXRkLT5yZWFkKG10ZCwgYmxvY2sgKiBpbmZ0bC0+RXJhc2VTaXplICsgNDA5NiwKKwkJCSAgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmKTsKIAkJaWYgKHJldGxlbiAhPSBTRUNUT1JTSVpFKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJTkZUTDogVW5hYmxlIHRvIHJlYWQgc3BhcmUgIgogCQkJICAgICAgICJNZWRpYSBIZWFkZXJcbiIpOwpAQCAtMjMzLDcgKzI0MCw3IEBACiAJCQkJICovCiAJCQkJaW5zdHItPmFkZHIgPSBpcC0+UmVzZXJ2ZWQwICogaW5mdGwtPkVyYXNlU2l6ZTsKIAkJCQlpbnN0ci0+bGVuID0gaW5mdGwtPkVyYXNlU2l6ZTsKLQkJCQlNVERfRVJBU0UoaW5mdGwtPm1iZC5tdGQsIGluc3RyKTsKKwkJCQltdGQtPmVyYXNlKG10ZCwgaW5zdHIpOwogCQkJfQogCQkJaWYgKChpcC0+bGFzdFVuaXQgLSBpcC0+Zmlyc3RVbml0ICsgMSkgPCBpcC0+dmlydHVhbFVuaXRzKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU5GVEw6IE1lZGlhIEhlYWRlciAiCkBAIC0zNTAsMjEgKzM1NywyMSBAQAogCWludCBsZW4sIGludCBjaGVja19vb2IpCiB7CiAJdTggYnVmW1NFQ1RPUlNJWkUgKyBpbmZ0bC0+bWJkLm10ZC0+b29ic2l6ZV07CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBpbmZ0bC0+bWJkLm10ZDsKIAlzaXplX3QgcmV0bGVuOwogCWludCBpOwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIklORlRMOiBjaGVja19mcmVlX3NlY3RvcnMoaW5mdGw9JXAsIgotCQkiYWRkcmVzcz0weCV4LGxlbj0lZCxjaGVja19vb2I9JWQpXG4iLCBpbmZ0bCwKLQkJYWRkcmVzcywgbGVuLCBjaGVja19vb2IpOwotCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBTRUNUT1JTSVpFKSB7Ci0JCWlmIChNVERfUkVBREVDQyhpbmZ0bC0+bWJkLm10ZCwgYWRkcmVzcywgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmLCAmYnVmW1NFQ1RPUlNJWkVdLCAmaW5mdGwtPm9vYmluZm8pIDwgMCkKKwkJaWYgKG10ZC0+cmVhZChtdGQsIGFkZHJlc3MsIFNFQ1RPUlNJWkUsICZyZXRsZW4sIGJ1ZikpCiAJCQlyZXR1cm4gLTE7CiAJCWlmIChtZW1jbXBiKGJ1ZiwgMHhmZiwgU0VDVE9SU0laRSkgIT0gMCkKIAkJCXJldHVybiAtMTsKIAogCQlpZiAoY2hlY2tfb29iKSB7Ci0JCQlpZiAobWVtY21wYihidWYgKyBTRUNUT1JTSVpFLCAweGZmLCBpbmZ0bC0+bWJkLm10ZC0+b29ic2l6ZSkgIT0gMCkKKwkJCWlmKGluZnRsX3JlYWRfb29iKG10ZCwgYWRkcmVzcywgbXRkLT5vb2JzaXplLAorCQkJCQkgICZyZXRsZW4sICZidWZbU0VDVE9SU0laRV0pIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAobWVtY21wYihidWYgKyBTRUNUT1JTSVpFLCAweGZmLCBtdGQtPm9vYnNpemUpICE9IDApCiAJCQkJcmV0dXJuIC0xOwogCQl9CiAJCWFkZHJlc3MgKz0gU0VDVE9SU0laRTsKQEAgLTM4Nyw2ICszOTQsNyBAQAogCXNpemVfdCByZXRsZW47CiAJc3RydWN0IGluZnRsX3VuaXR0YWlsIHVjaTsKIAlzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIgPSAmaW5mdGwtPmluc3RyOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaW5mdGwtPm1iZC5tdGQ7CiAJaW50IHBoeXNibG9jazsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJJTkZUTDogSU5GVExfZm9ybWF0YmxvY2soaW5mdGw9JXAsIgpAQCAtNDA0LDggKzQxMiw5IEBACiAJLyogRXJhc2Ugb25lIHBoeXNpY2FsIGVyYXNlYmxvY2sgYXQgYSB0aW1lLCBldmVuIHRob3VnaCB0aGUgTkFORCBhcGkKIAkgICBhbGxvd3MgdXMgdG8gZ3JvdXAgdGhlbS4gIFRoaXMgd2F5IHdlIGlmIHdlIGhhdmUgYSBmYWlsdXJlLCB3ZSBjYW4KIAkgICBtYXJrIG9ubHkgdGhlIGZhaWxlZCBibG9jayBpbiB0aGUgYmJ0LiAqLwotCWZvciAocGh5c2Jsb2NrID0gMDsgcGh5c2Jsb2NrIDwgaW5mdGwtPkVyYXNlU2l6ZTsgcGh5c2Jsb2NrICs9IGluc3RyLT5sZW4sIGluc3RyLT5hZGRyICs9IGluc3RyLT5sZW4pIHsKLQkJTVREX0VSQVNFKGluZnRsLT5tYmQubXRkLCBpbnN0cik7CisJZm9yIChwaHlzYmxvY2sgPSAwOyBwaHlzYmxvY2sgPCBpbmZ0bC0+RXJhc2VTaXplOworCSAgICAgcGh5c2Jsb2NrICs9IGluc3RyLT5sZW4sIGluc3RyLT5hZGRyICs9IGluc3RyLT5sZW4pIHsKKwkJbXRkLT5lcmFzZShpbmZ0bC0+bWJkLm10ZCwgaW5zdHIpOwogCiAJCWlmIChpbnN0ci0+c3RhdGUgPT0gTVREX0VSQVNFX0ZBSUxFRCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU5GVEw6IGVycm9yIHdoaWxlIGZvcm1hdHRpbmcgYmxvY2sgJWRcbiIsCkBAIC00MTQsMTAgKzQyMywxMCBAQAogCQl9CiAKIAkJLyoKLQkgCSogQ2hlY2sgdGhlICJmcmVlbmVzcyIgb2YgRXJhc2UgVW5pdCBiZWZvcmUgdXBkYXRpbmcgbWV0YWRhdGEuCi0JIAkqIEZpeE1lOiBpcyB0aGlzIGNoZWNrIHJlYWxseSBuZWNlc3Nhcnk/IFNpbmNlIHdlIGhhdmUgY2hlY2sgdGhlCi0JIAkqICAgICAgICByZXR1cm4gY29kZSBhZnRlciB0aGUgZXJhc2Ugb3BlcmF0aW9uLgotCSAJKi8KKwkJICogQ2hlY2sgdGhlICJmcmVlbmVzcyIgb2YgRXJhc2UgVW5pdCBiZWZvcmUgdXBkYXRpbmcgbWV0YWRhdGEuCisJCSAqIEZpeE1lOiBpcyB0aGlzIGNoZWNrIHJlYWxseSBuZWNlc3Nhcnk/IFNpbmNlIHdlIGhhdmUgY2hlY2sKKwkJICogdGhlIHJldHVybiBjb2RlIGFmdGVyIHRoZSBlcmFzZSBvcGVyYXRpb24uCisJCSAqLwogCQlpZiAoY2hlY2tfZnJlZV9zZWN0b3JzKGluZnRsLCBpbnN0ci0+YWRkciwgaW5zdHItPmxlbiwgMSkgIT0gMCkKIAkJCWdvdG8gZmFpbDsKIAl9CkBAIC00MjksOCArNDM4LDcgQEAKIAl1Y2kuUmVzZXJ2ZWRbMl0gPSAwOwogCXVjaS5SZXNlcnZlZFszXSA9IDA7CiAJaW5zdHItPmFkZHIgPSBibG9jayAqIGluZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICogMjsKLQlpZiAoTVREX1dSSVRFT09CKGluZnRsLT5tYmQubXRkLCBpbnN0ci0+YWRkciArCi0JICAgIDgsIDgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQorCWlmIChpbmZ0bF93cml0ZV9vb2IobXRkLCBpbnN0ci0+YWRkciArIDgsIDgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQogCQlnb3RvIGZhaWw7CiAJcmV0dXJuIDA7CiBmYWlsOgpAQCAtNTQ5LDYgKzU1Nyw3IEBACiAKIGludCBJTkZUTF9tb3VudChzdHJ1Y3QgSU5GVExyZWNvcmQgKnMpCiB7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBzLT5tYmQubXRkOwogCXVuc2lnbmVkIGludCBibG9jaywgZmlyc3RfYmxvY2ssIHByZXZfYmxvY2ssIGxhc3RfYmxvY2s7CiAJdW5zaWduZWQgaW50IGZpcnN0X2xvZ2ljYWxfYmxvY2ssIGxvZ2ljYWxfYmxvY2ssIGVyYXNlX21hcms7CiAJaW50IGNoYWluX2xlbmd0aCwgZG9fZm9ybWF0X2NoYWluOwpAQCAtNjA3LDEwICs2MTYsMTEgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKE1URF9SRUFET09CKHMtPm1iZC5tdGQsIGJsb2NrICogcy0+RXJhc2VTaXplICsgOCwKLQkJCSAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZoMCkgPCAwIHx8Ci0JCQkgICAgTVREX1JFQURPT0Iocy0+bWJkLm10ZCwgYmxvY2sgKiBzLT5FcmFzZVNpemUgKwotCQkJICAgIDIgKiBTRUNUT1JTSVpFICsgOCwgOCwgJnJldGxlbiwgKGNoYXIgKikmaDEpIDwgMCkgeworCQkJaWYgKGluZnRsX3JlYWRfb29iKG10ZCwgYmxvY2sgKiBzLT5FcmFzZVNpemUgKyA4LAorCQkJCQkgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZoMCkgPCAwIHx8CisJCQkgICAgaW5mdGxfcmVhZF9vb2IobXRkLCBibG9jayAqIHMtPkVyYXNlU2l6ZSArCisJCQkJCSAgIDIgKiBTRUNUT1JTSVpFICsgOCwgOCwgJnJldGxlbiwKKwkJCQkJICAgKGNoYXIgKikmaDEpIDwgMCkgewogCQkJCS8qIFNob3VsZCBuZXZlciBoYXBwZW4/ICovCiAJCQkJZG9fZm9ybWF0X2NoYWluKys7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggN2FiZDdmZS4uNmJkYWFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwpAQCAtMzcsNyArMzcsNyBAQAogY29uZmlnIE1URF9QSFlTTUFQX0xFTgogCWhleCAiUGh5c2ljYWwgbGVuZ3RoIG9mIGZsYXNoIG1hcHBpbmciCiAJZGVwZW5kcyBvbiBNVERfUEhZU01BUAotCWRlZmF1bHQgIjB4NDAwMDAwMCIKKwlkZWZhdWx0ICIwIgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgbWFwcGluZyBvZiB0aGUgZmxhc2ggY2hpcHMgb24KIAkgIHlvdXIgcGFydGljdWxhciBib2FyZC4gSWYgdGhlcmUgaXMgc3BhY2UsIG9yIGFsaWFzZXMsIGluIHRoZQpAQCAtNzgsNyArNzgsNyBAQAogCiBjb25maWcgTVREX1NDNTIwQ0RQCiAJdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIEFNRCBTQzUyMCBDRFAiCi0JZGVwZW5kcyBvbiBYODYgJiYgTVREX0NGSQorCWRlcGVuZHMgb24gWDg2ICYmIE1URF9DRkkgJiYgTVREX0NPTkNBVAogCWhlbHAKIAkgIFRoZSBTQzUyMCBDRFAgYm9hcmQgaGFzIHR3byBiYW5rcyBvZiBDRkktY29tcGxpYW50IGNoaXBzIGFuZCBvbmUKIAkgIER1YWwtaW4tbGluZSBKRURFQyBjaGlwLiBUaGlzICdtYXBwaW5nJyBkcml2ZXIgc3VwcG9ydHMgdGhhdApAQCAtMTA5LDcgKzEwOSw3IEBACiAJICBtdGQxIGFsbG93cyB5b3UgdG8gcmVwcm9ncmFtIHlvdXIgQklPUy4gQkUgVkVSWSBDQVJFRlVMLgogCiAJICBOb3RlIHRoYXQganVtcGVyIDMgKCJXcml0ZSBFbmFibGUgRHJpdmUgQSIpIG11c3QgYmUgc2V0Ci0JICBvdGhlcndpc2UgZGV0ZWN0aW9uIHdvbid0IHN1Y2NlZWVkLgorCSAgb3RoZXJ3aXNlIGRldGVjdGlvbiB3b24ndCBzdWNjZWVkLgogCiBjb25maWcgTVREX1NCQ19HWFgKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBtYXBwZWQgb24gQXJjb20gU0JDLUdYeCBib2FyZHMiCkBAIC0yMDAsOCArMjAwLDggQEAKIAkgIFN1cHBvcnQgZm9yIHRoZSBmbGFzaCBjaGlwIG9uIFRzdW5hbWkgVElHIGJ1cy4KIAogY29uZmlnIE1URF9MQVNBVAotCXRyaXN0YXRlICJGbGFzaCBjaGlwcyBvbiBMQVNBVCBib2FyZCIKLQlkZXBlbmRzIG9uIExBU0FUCisJdHJpc3RhdGUgIkxBU0FUIGZsYXNoIGRldmljZSIKKwlkZXBlbmRzIG9uIExBU0FUICYmIE1URF9DRkkKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgZmxhc2ggY2hpcHMgb24gdGhlIExhc2F0IDEwMCBhbmQgMjAwIGJvYXJkcy4KIApAQCAtNTYxLDcgKzU2MSw2IEBACiBjb25maWcgTVREX1BDTUNJQV9BTk9OWU1PVVMKIAlib29sICJVc2UgUENNQ0lBIE1URCBkcml2ZXJzIGZvciBhbm9ueW1vdXMgUENNQ0lBIGNhcmRzIgogCWRlcGVuZHMgb24gTVREX1BDTUNJQQotCWRlZmF1bHQgTgogCWhlbHAKIAkgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIFBDTUNJQSBjYXJkcyB3aGljaCBkbyBub3QgcmVwb3J0CiAJICBhbnl0aGluZyBhYm91dCB0aGVtc2VsdmVzIGFyZSBhc3N1bWVkIHRvIGJlIE1URCBjYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvY2ZpX2ZsYWdhZG0uYyBiL2RyaXZlcnMvbXRkL21hcHMvY2ZpX2ZsYWdhZG0uYwppbmRleCBmZDBmMGQzLi45MmI1ZDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2NmaV9mbGFnYWRtLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9jZmlfZmxhZ2FkbS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgqSAyMDAxIEZsYWdhIGhmLiBNZWRpY2FsIERldmljZXMsIEvhcmkgRGF27fBzc29uIDxrZEBmbGFnYS5pcz4KKyAqICBDb3B5cmlnaHQgwqkgMjAwMSBGbGFnYSBoZi4gTWVkaWNhbCBEZXZpY2VzLCBLw6FyaSBEYXbDrcOwc3NvbiA8a2RAZmxhZ2EuaXM+CiAgKgogICogICRJZDogY2ZpX2ZsYWdhZG0uYyx2IDEuMTUgMjAwNS8xMS8wNyAxMToxNDoyNiBnbGVpeG5lciBFeHAgJAogICoKQEAgLTEzNSw1ICsxMzUsNSBAQAogCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkvhcmkgRGF27fBzc29uIDxrZEBmbGFnYS5pcz4iKTsKK01PRFVMRV9BVVRIT1IoIkvDoXJpIERhdsOtw7Bzc29uIDxrZEBmbGFnYS5pcz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBkcml2ZXIgZm9yIEZsYWdhIGRpZ2l0YWwgbW9kdWxlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2Rib3gyLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2Rib3gyLWZsYXNoLmMKaW5kZXggNjUyODEzYy4uODVjMmE5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9kYm94Mi1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZGJveDItZmxhc2guYwpAQCAtMTIyLDUgKzEyMiw1IEBACiAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiS+FyaSBEYXbt8HNzb24gPGtkQGZsYWdhLmlzPiwgQmFzdGlhbiBCbGFuayA8d2FsZGlAdHV4Ym94Lm9yZz4sIEFsZXhhbmRlciBXaWxkIDx3aWxkQHRlLWVsZWt0cm9uaWsuY29tPiIpOworTU9EVUxFX0FVVEhPUigiS8OhcmkgRGF2w63DsHNzb24gPGtkQGZsYWdhLmlzPiwgQmFzdGlhbiBCbGFuayA8d2FsZGlAdHV4Ym94Lm9yZz4sIEFsZXhhbmRlciBXaWxkIDx3aWxkQHRlLWVsZWt0cm9uaWsuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGRyaXZlciBmb3IgRC1Cb3ggMiBib2FyZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9tdHgtMV9mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9tdHgtMV9mbGFzaC5jCmluZGV4IGQxZTY2ZTEuLjVjMjVkNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvbXR4LTFfZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL210eC0xX2ZsYXNoLmMKQEAgLTQsNyArNCw3IEBACiAgKiAkSWQ6IG10eC0xX2ZsYXNoLmMsdiAxLjIgMjAwNS8xMS8wNyAxMToxNDoyNyBnbGVpeG5lciBFeHAgJAogICoKICAqIChDKSAyMDA1IEJydW5vIFJhbmRvbGYgPGJydW5vLnJhbmRvbGZANGctc3lzdGVtcy5iaXo+Ci0gKiAoQykgMjAwNSBK9nJuIEVuZ2VsIDxqb2VybkB3b2huaGVpbS5maC13ZWRlbC5kZT4KKyAqIChDKSAyMDA1IErDtnJuIEVuZ2VsIDxqb2VybkB3b2huaGVpbS5maC13ZWRlbC5kZT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYyBiL2RyaXZlcnMvbXRkL21hcHMvbmV0dGVsLmMKaW5kZXggNTRhMzEwMi4uMDk5NGI1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xODgsNyArMTkwLDcgQEAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJYWRkX3dhaXRfcXVldWUoJndhaXRfcSwgJndhaXQpOwogCi0JCXJldCA9IE1URF9FUkFTRShtdGQsICZuZXR0ZWxfZXJhc2UpOworCQlyZXQgPSBtdGQtPmVyYXNlKG10ZCwgJm5ldHRlbF9lcmFzZSk7CiAJCWlmIChyZXQpIHsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwppbmRleCBkMjdmNDEyLi5jODYxMTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKQEAgLTcxMyw2ICs3MTMsNyBAQAogCiAJaWYoZGV2LT5tdGRfaW5mbykgewogCQlkZWxfbXRkX2RldmljZShkZXYtPm10ZF9pbmZvKTsKKwkJbWFwX2Rlc3Ryb3koZGV2LT5tdGRfaW5mbyk7CiAJCWluZm8oIm10ZCVkOiBSZW1vdmVkIiwgZGV2LT5tdGRfaW5mby0+aW5kZXgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwppbmRleCBmNDllYmMzLi40MzNjM2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwpAQCAtMTQsMTEzICsxNCwyMzAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpteW10ZDsKLQotc3RydWN0IG1hcF9pbmZvIHBoeXNtYXBfbWFwID0gewotCS5uYW1lID0gInBoeXNfbWFwcGVkX2ZsYXNoIiwKLQkucGh5cyA9IENPTkZJR19NVERfUEhZU01BUF9TVEFSVCwKLQkuc2l6ZSA9IENPTkZJR19NVERfUEhZU01BUF9MRU4sCi0JLmJhbmt3aWR0aCA9IENPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEgsCitzdHJ1Y3QgcGh5c21hcF9mbGFzaF9pbmZvIHsKKwlzdHJ1Y3QgbXRkX2luZm8JCSptdGQ7CisJc3RydWN0IG1hcF9pbmZvCQltYXA7CisJc3RydWN0IHJlc291cmNlCQkqcmVzOworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCWludAkJCW5yX3BhcnRzOworCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0czsKKyNlbmRpZgogfTsKIAotI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICptdGRfcGFydHM7Ci1zdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgIG10ZF9wYXJ0c19uYjsKIAotc3RhdGljIGludCBudW1fcGh5c21hcF9wYXJ0aXRpb25zOwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwaHlzbWFwX3BhcnRpdGlvbnM7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdIF9faW5pdGRhdGEgPSB7ImNtZGxpbmVwYXJ0IiwgIlJlZEJvb3QiLCBOVUxMfTsKLQotdm9pZCBwaHlzbWFwX3NldF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywgaW50IG51bV9wYXJ0cykKK3N0YXRpYyBpbnQgcGh5c21hcF9mbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXBoeXNtYXBfcGFydGl0aW9ucz1wYXJ0czsKLQludW1fcGh5c21hcF9wYXJ0aXRpb25zPW51bV9wYXJ0czsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTVREX1BBUlRJVElPTlMgKi8KKwlzdHJ1Y3QgcGh5c21hcF9mbGFzaF9pbmZvICppbmZvOworCXN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgKnBoeXNtYXBfZGF0YTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdF9waHlzbWFwKHZvaWQpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKnJvbV9wcm9iZV90eXBlc1tdID0geyAiY2ZpX3Byb2JlIiwgImplZGVjX3Byb2JlIiwgIm1hcF9yb20iLCBOVUxMIH07Ci0JY29uc3QgY2hhciAqKnR5cGU7CisJaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAotICAgICAgIAlwcmludGsoS0VSTl9OT1RJQ0UgInBoeXNtYXAgZmxhc2ggZGV2aWNlOiAlbHggYXQgJWx4XG4iLCBwaHlzbWFwX21hcC5zaXplLCBwaHlzbWFwX21hcC5waHlzKTsKLQlwaHlzbWFwX21hcC52aXJ0ID0gaW9yZW1hcChwaHlzbWFwX21hcC5waHlzLCBwaHlzbWFwX21hcC5zaXplKTsKKwlwaHlzbWFwX2RhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JaWYgKCFwaHlzbWFwX21hcC52aXJ0KSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIGlvcmVtYXBcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQoJnBoeXNtYXBfbWFwKTsKLQotCW15bXRkID0gTlVMTDsKLQl0eXBlID0gcm9tX3Byb2JlX3R5cGVzOwotCWZvcig7ICFteW10ZCAmJiAqdHlwZTsgdHlwZSsrKSB7Ci0JCW15bXRkID0gZG9fbWFwX3Byb2JlKCp0eXBlLCAmcGh5c21hcF9tYXApOwotCX0KLQlpZiAobXltdGQpIHsKLQkJbXltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KKwlpZiAoaW5mby0+bXRkICE9IE5VTEwpIHsKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKLQkJbXRkX3BhcnRzX25iID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMobXltdGQsIHBhcnRfcHJvYmVzLAotCQkJCQkJICAgICZtdGRfcGFydHMsIDApOwotCi0JCWlmIChtdGRfcGFydHNfbmIgPiAwKQotCQl7Ci0JCQlhZGRfbXRkX3BhcnRpdGlvbnMgKG15bXRkLCBtdGRfcGFydHMsIG10ZF9wYXJ0c19uYik7Ci0JCQlyZXR1cm4gMDsKKwkJaWYgKGluZm8tPm5yX3BhcnRzKSB7CisJCQlkZWxfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkKTsKKwkJCWtmcmVlKGluZm8tPnBhcnRzKTsKKwkJfSBlbHNlIGlmIChwaHlzbWFwX2RhdGEtPm5yX3BhcnRzKSB7CisJCQlkZWxfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkKTsKKwkJfSBlbHNlIHsKKwkJCWRlbF9tdGRfZGV2aWNlKGluZm8tPm10ZCk7CiAJCX0KLQotCQlpZiAobnVtX3BoeXNtYXBfcGFydGl0aW9ucyAhPSAwKQotCQl7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCSAgICAgICAiVXNpbmcgcGh5c21hcCBwYXJ0aXRpb24gZGVmaW5pdGlvblxuIik7Ci0JCQlhZGRfbXRkX3BhcnRpdGlvbnMgKG15bXRkLCBwaHlzbWFwX3BhcnRpdGlvbnMsIG51bV9waHlzbWFwX3BhcnRpdGlvbnMpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQorI2Vsc2UKKwkJZGVsX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKICNlbmRpZgotCQlhZGRfbXRkX2RldmljZShteW10ZCk7CisJCW1hcF9kZXN0cm95KGluZm8tPm10ZCk7CisJfQogCisJaWYgKGluZm8tPm1hcC52aXJ0ICE9IE5VTEwpCisJCWlvdW5tYXAoKHZvaWQgKilpbmZvLT5tYXAudmlydCk7CisKKwlpZiAoaW5mby0+cmVzICE9IE5VTEwpIHsKKwkJcmVsZWFzZV9yZXNvdXJjZShpbmZvLT5yZXMpOworCQlrZnJlZShpbmZvLT5yZXMpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcm9tX3Byb2JlX3R5cGVzW10gPSB7ICJjZmlfcHJvYmUiLCAiamVkZWNfcHJvYmUiLCAibWFwX3JvbSIsIE5VTEwgfTsKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2JlX3R5cGVzW10gPSB7ICJjbWRsaW5lcGFydCIsICJSZWRCb290IiwgTlVMTCB9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgcGh5c21hcF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSAqcGh5c21hcF9kYXRhOworCXN0cnVjdCBwaHlzbWFwX2ZsYXNoX2luZm8gKmluZm87CisJY29uc3QgY2hhciAqKnByb2JlX3R5cGU7CisJaW50IGVycjsKKworCXBoeXNtYXBfZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBoeXNtYXBfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworICAgICAgIAlwcmludGsoS0VSTl9OT1RJQ0UgInBoeXNtYXAgcGxhdGZvcm0gZmxhc2ggZGV2aWNlOiAlLjhsbHggYXQgJS44bGx4XG4iLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWRldi0+cmVzb3VyY2UtPmVuZCAtIGRldi0+cmVzb3VyY2UtPnN0YXJ0ICsgMSwKKwkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPnJlc291cmNlLT5zdGFydCk7CisKKwlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBoeXNtYXBfZmxhc2hfaW5mbyksIEdGUF9LRVJORUwpOworCWlmIChpbmZvID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCisJaW5mby0+cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKGRldi0+cmVzb3VyY2UtPnN0YXJ0LAorCQkJZGV2LT5yZXNvdXJjZS0+ZW5kIC0gZGV2LT5yZXNvdXJjZS0+c3RhcnQgKyAxLAorCQkJZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoaW5mby0+cmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJDb3VsZCBub3QgcmVzZXJ2ZSBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWluZm8tPm1hcC5uYW1lID0gZGV2LT5kZXYuYnVzX2lkOworCWluZm8tPm1hcC5waHlzID0gZGV2LT5yZXNvdXJjZS0+c3RhcnQ7CisJaW5mby0+bWFwLnNpemUgPSBkZXYtPnJlc291cmNlLT5lbmQgLSBkZXYtPnJlc291cmNlLT5zdGFydCArIDE7CisJaW5mby0+bWFwLmJhbmt3aWR0aCA9IHBoeXNtYXBfZGF0YS0+d2lkdGg7CisJaW5mby0+bWFwLnNldF92cHAgPSBwaHlzbWFwX2RhdGEtPnNldF92cHA7CisKKwlpbmZvLT5tYXAudmlydCA9IGlvcmVtYXAoaW5mby0+bWFwLnBoeXMsIGluZm8tPm1hcC5zaXplKTsKKwlpZiAoaW5mby0+bWFwLnZpcnQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoIHJlZ2lvblxuIik7CisJCWVyciA9IEVJTzsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXNpbXBsZV9tYXBfaW5pdCgmaW5mby0+bWFwKTsKKworCXByb2JlX3R5cGUgPSByb21fcHJvYmVfdHlwZXM7CisJZm9yICg7IGluZm8tPm10ZCA9PSBOVUxMICYmICpwcm9iZV90eXBlICE9IE5VTEw7IHByb2JlX3R5cGUrKykKKwkJaW5mby0+bXRkID0gZG9fbWFwX3Byb2JlKCpwcm9iZV90eXBlLCAmaW5mby0+bWFwKTsKKwlpZiAoaW5mby0+bXRkID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJtYXBfcHJvYmUgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCWluZm8tPm10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCWVyciA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKGluZm8tPm10ZCwgcGFydF9wcm9iZV90eXBlcywgJmluZm8tPnBhcnRzLCAwKTsKKwlpZiAoZXJyID4gMCkgeworCQlhZGRfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBpbmZvLT5wYXJ0cywgZXJyKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaW91bm1hcChwaHlzbWFwX21hcC52aXJ0KTsKLQlyZXR1cm4gLUVOWElPOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9waHlzbWFwKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi0JaWYgKG10ZF9wYXJ0c19uYikgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMobXltdGQpOwotCQlrZnJlZShtdGRfcGFydHMpOwotCX0gZWxzZSBpZiAobnVtX3BoeXNtYXBfcGFydGl0aW9ucykgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMobXltdGQpOwotCX0gZWxzZSB7Ci0JCWRlbF9tdGRfZGV2aWNlKG15bXRkKTsKKwlpZiAocGh5c21hcF9kYXRhLT5ucl9wYXJ0cykgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVzaW5nIHBoeXNtYXAgcGFydGl0aW9uIGluZm9ybWF0aW9uXG4iKTsKKwkJYWRkX210ZF9wYXJ0aXRpb25zKGluZm8tPm10ZCwgcGh5c21hcF9kYXRhLT5wYXJ0cywKKwkJCQkJCXBoeXNtYXBfZGF0YS0+bnJfcGFydHMpOworCQlyZXR1cm4gMDsKIAl9Ci0jZWxzZQotCWRlbF9tdGRfZGV2aWNlKG15bXRkKTsKICNlbmRpZgotCW1hcF9kZXN0cm95KG15bXRkKTsKIAotCWlvdW5tYXAocGh5c21hcF9tYXAudmlydCk7Ci0JcGh5c21hcF9tYXAudmlydCA9IE5VTEw7CisJYWRkX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlwaHlzbWFwX2ZsYXNoX3JlbW92ZShkZXYpOworCXJldHVybiBlcnI7CiB9CiAKLW1vZHVsZV9pbml0KGluaXRfcGh5c21hcCk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX3BoeXNtYXApOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGh5c21hcF9mbGFzaF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHBoeXNtYXBfZmxhc2hfcHJvYmUsCisJLnJlbW92ZQkJPSBwaHlzbWFwX2ZsYXNoX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicGh5c21hcC1mbGFzaCIsCisJfSwKK307CiAKIAorI2lmZGVmIENPTkZJR19NVERfUEhZU01BUF9MRU4KKyNpZiBDT05GSUdfTVREX1BIWVNNQVBfTEVOICE9IDAKKyN3YXJuaW5nIHVzaW5nIFBIWVNNQVAgY29tcGF0IGNvZGUKKyNkZWZpbmUgUEhZU01BUF9DT01QQVQKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBQSFlTTUFQX0NPTVBBVAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGh5c21hcF9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSBDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRILAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwaHlzbWFwX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSBDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQsCisJLmVuZAkJPSBDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQgKyBDT05GSUdfTVREX1BIWVNNQVBfTEVOLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBoeXNtYXBfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwaHlzbWFwX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnBoeXNtYXBfZmxhc2hfcmVzb3VyY2UsCit9OworCit2b2lkIHBoeXNtYXBfY29uZmlndXJlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQlpbnQgYmFua3dpZHRoLCB2b2lkICgqc2V0X3ZwcCkoc3RydWN0IG1hcF9pbmZvICosIGludCkpCit7CisJcGh5c21hcF9mbGFzaF9yZXNvdXJjZS5zdGFydCA9IGFkZHI7CisJcGh5c21hcF9mbGFzaF9yZXNvdXJjZS5lbmQgPSBhZGRyICsgc2l6ZSAtIDE7CisJcGh5c21hcF9mbGFzaF9kYXRhLndpZHRoID0gYmFua3dpZHRoOworCXBoeXNtYXBfZmxhc2hfZGF0YS5zZXRfdnBwID0gc2V0X3ZwcDsKK30KKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwordm9pZCBwaHlzbWFwX3NldF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywgaW50IG51bV9wYXJ0cykKK3sKKwlwaHlzbWFwX2ZsYXNoX2RhdGEubnJfcGFydHMgPSBudW1fcGFydHM7CisJcGh5c21hcF9mbGFzaF9kYXRhLnBhcnRzID0gcGFydHM7Cit9CisjZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBwaHlzbWFwX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwaHlzbWFwX2ZsYXNoX2RyaXZlcik7CisjaWZkZWYgUEhZU01BUF9DT01QQVQKKwlpZiAoZXJyID09IDApCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGh5c21hcF9mbGFzaCk7CisjZW5kaWYKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwaHlzbWFwX2V4aXQodm9pZCkKK3sKKyNpZmRlZiBQSFlTTUFQX0NPTVBBVAorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZwaHlzbWFwX2ZsYXNoKTsKKyNlbmRpZgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwaHlzbWFwX2ZsYXNoX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBoeXNtYXBfaW5pdCk7Cittb2R1bGVfZXhpdChwaHlzbWFwX2V4aXQpOworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgY29uZmlndXJhYmxlIE1URCBtYXAgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRibG9jay5jIGIvZHJpdmVycy9tdGQvbXRkYmxvY2suYwppbmRleCAyY2VmMjgwLi5lNWM3ODQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRibG9jay5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCWFkZF93YWl0X3F1ZXVlKCZ3YWl0X3EsICZ3YWl0KTsKIAotCXJldCA9IE1URF9FUkFTRShtdGQsICZlcmFzZSk7CisJcmV0ID0gbXRkLT5lcmFzZShtdGQsICZlcmFzZSk7CiAJaWYgKHJldCkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7CkBAIC04OCw3ICs4OCw3IEBACiAJICogTmV4dCwgd3JpdGhlIGRhdGEgdG8gZmxhc2guCiAJICovCiAKLQlyZXQgPSBNVERfV1JJVEUgKG10ZCwgcG9zLCBsZW4sICZyZXRsZW4sIGJ1Zik7CisJcmV0ID0gbXRkLT53cml0ZShtdGQsIHBvcywgbGVuLCAmcmV0bGVuLCBidWYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJaWYgKHJldGxlbiAhPSBsZW4pCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJbXRkLT5uYW1lLCBwb3MsIGxlbik7CiAKIAlpZiAoIXNlY3Rfc2l6ZSkKLQkJcmV0dXJuIE1URF9XUklURSAobXRkLCBwb3MsIGxlbiwgJnJldGxlbiwgYnVmKTsKKwkJcmV0dXJuIG10ZC0+d3JpdGUobXRkLCBwb3MsIGxlbiwgJnJldGxlbiwgYnVmKTsKIAogCXdoaWxlIChsZW4gPiAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgc2VjdF9zdGFydCA9IChwb3Mvc2VjdF9zaXplKSpzZWN0X3NpemU7CkBAIC0xNzAsNyArMTcwLDggQEAKIAkJCSAgICBtdGRibGstPmNhY2hlX29mZnNldCAhPSBzZWN0X3N0YXJ0KSB7CiAJCQkJLyogZmlsbCB0aGUgY2FjaGUgd2l0aCB0aGUgY3VycmVudCBzZWN0b3IgKi8KIAkJCQltdGRibGstPmNhY2hlX3N0YXRlID0gU1RBVEVfRU1QVFk7Ci0JCQkJcmV0ID0gTVREX1JFQUQobXRkLCBzZWN0X3N0YXJ0LCBzZWN0X3NpemUsICZyZXRsZW4sIG10ZGJsay0+Y2FjaGVfZGF0YSk7CisJCQkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgc2VjdF9zdGFydCwgc2VjdF9zaXplLAorCQkJCQkJJnJldGxlbiwgbXRkYmxrLT5jYWNoZV9kYXRhKTsKIAkJCQlpZiAocmV0KQogCQkJCQlyZXR1cm4gcmV0OwogCQkJCWlmIChyZXRsZW4gIT0gc2VjdF9zaXplKQpAQCAtMjA3LDcgKzIwOCw3IEBACiAJCQltdGQtPm5hbWUsIHBvcywgbGVuKTsKIAogCWlmICghc2VjdF9zaXplKQotCQlyZXR1cm4gTVREX1JFQUQgKG10ZCwgcG9zLCBsZW4sICZyZXRsZW4sIGJ1Zik7CisJCXJldHVybiBtdGQtPnJlYWQobXRkLCBwb3MsIGxlbiwgJnJldGxlbiwgYnVmKTsKIAogCXdoaWxlIChsZW4gPiAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgc2VjdF9zdGFydCA9IChwb3Mvc2VjdF9zaXplKSpzZWN0X3NpemU7CkBAIC0yMjYsNyArMjI3LDcgQEAKIAkJICAgIG10ZGJsay0+Y2FjaGVfb2Zmc2V0ID09IHNlY3Rfc3RhcnQpIHsKIAkJCW1lbWNweSAoYnVmLCBtdGRibGstPmNhY2hlX2RhdGEgKyBvZmZzZXQsIHNpemUpOwogCQl9IGVsc2UgewotCQkJcmV0ID0gTVREX1JFQUQgKG10ZCwgcG9zLCBzaXplLCAmcmV0bGVuLCBidWYpOworCQkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgcG9zLCBzaXplLCAmcmV0bGVuLCBidWYpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCQkJaWYgKHJldGxlbiAhPSBzaXplKQpAQCAtMjg4LDggKzI4OSw3IEBACiAKIAltdXRleF9pbml0KCZtdGRibGstPmNhY2hlX211dGV4KTsKIAltdGRibGstPmNhY2hlX3N0YXRlID0gU1RBVEVfRU1QVFk7Ci0JaWYgKChtdGRibGstPm10ZC0+ZmxhZ3MgJiBNVERfQ0FQX1JBTSkgIT0gTVREX0NBUF9SQU0gJiYKLQkgICAgbXRkYmxrLT5tdGQtPmVyYXNlc2l6ZSkgeworCWlmICggIShtdGRibGstPm10ZC0+ZmxhZ3MgJiBNVERfTk9fRVJBU0UpICYmIG10ZGJsay0+bXRkLT5lcmFzZXNpemUpIHsKIAkJbXRkYmxrLT5jYWNoZV9zaXplID0gbXRkYmxrLT5tdGQtPmVyYXNlc2l6ZTsKIAkJbXRkYmxrLT5jYWNoZV9kYXRhID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRibG9ja19yby5jIGIvZHJpdmVycy9tdGQvbXRkYmxvY2tfcm8uYwppbmRleCAwYzgzMGJhLi4yOTU2M2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRibG9ja19yby5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrX3JvLmMKQEAgLTQ1LDkgKzQ1LDcgQEAKIAlkZXYtPmJsa3NpemUgPSA1MTI7CiAJZGV2LT5zaXplID0gbXRkLT5zaXplID4+IDk7CiAJZGV2LT50ciA9IHRyOwotCWlmICgobXRkLT5mbGFncyAmIChNVERfQ0xFQVJfQklUU3xNVERfU0VUX0JJVFN8TVREX1dSSVRFQUJMRSkpICE9Ci0JICAgIChNVERfQ0xFQVJfQklUU3xNVERfU0VUX0JJVFN8TVREX1dSSVRFQUJMRSkpCi0JCWRldi0+cmVhZG9ubHkgPSAxOworCWRldi0+cmVhZG9ubHkgPSAxOwogCiAJYWRkX210ZF9ibGt0cmFuc19kZXYoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYyBiL2RyaXZlcnMvbXRkL210ZGNoYXIuYwppbmRleCA2ZjA0NDU4Li5hYTE4ZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjaGFyLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCkBAIC00OSwyNCArNDksMTggQEAKIH07CiAKIC8qCi0gKiBXZSB1c2UgZmlsZS0+cHJpdmF0ZV9kYXRhIHRvIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgTVREZGV2aWNlLgotICogU2luY2UgYWxpZ2htZW50IGlzIGF0IGxlYXN0IDMyIGJpdHMsIHdlIGhhdmUgMiBiaXRzIGZyZWUgZm9yIE9UUAotICogbW9kZXMgYXMgd2VsbC4KKyAqIERhdGEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIHBvaW50ZXIgdG8gdGhlIG10ZCBkZXZpY2UgYXMgd2VsbAorICogYXMgbW9kZSBpbmZvcm1hdGlvbiBvZnIgdmFyaW91cyB1c2UgY2FzZXMuCiAgKi8KLQotI2RlZmluZSBUT19NVEQoZmlsZSkgKHN0cnVjdCBtdGRfaW5mbyAqKSgobG9uZykoKGZpbGUpLT5wcml2YXRlX2RhdGEpICYgfjNMKQotCi0jZGVmaW5lIE1URF9NT0RFX09UUF9GQUNUCTEKLSNkZWZpbmUgTVREX01PREVfT1RQX1VTRVIJMgotI2RlZmluZSBNVERfTU9ERShmaWxlKQkJKChsb25nKSgoZmlsZSktPnByaXZhdGVfZGF0YSkgJiAzKQotCi0jZGVmaW5lIFNFVF9NVERfTU9ERShmaWxlLCBtb2RlKSBcCi0JZG8geyBsb25nIF9fcCA9IChsb25nKSgoZmlsZSktPnByaXZhdGVfZGF0YSk7IFwKLQkgICAgIChmaWxlKS0+cHJpdmF0ZV9kYXRhID0gKHZvaWQgKikoKF9fcCAmIH4zTCkgfCBtb2RlKTsgfSB3aGlsZSAoMCkKK3N0cnVjdCBtdGRfZmlsZV9pbmZvIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwllbnVtIG10ZF9maWxlX21vZGVzIG1vZGU7Cit9OwogCiBzdGF0aWMgbG9mZl90IG10ZF9sc2VlayAoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKQogewotCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gVE9fTVREKGZpbGUpOworCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKIAogCXN3aXRjaCAob3JpZykgewogCWNhc2UgMDoKQEAgLTk3LDYgKzkxLDcgQEAKIAlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCWludCBkZXZudW0gPSBtaW5vciA+PiAxOwogCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmk7CiAKIAlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiTVREX29wZW5cbiIpOwogCkBAIC0xMTcsMTQgKzExMiwyMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBtdGQ7Ci0KIAkvKiBZb3UgY2FuJ3Qgb3BlbiBpdCBSVyBpZiBpdCdzIG5vdCBhIHdyaXRlYWJsZSBkZXZpY2UgKi8KIAlpZiAoKGZpbGUtPmZfbW9kZSAmIDIpICYmICEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKSB7CiAJCXB1dF9tdGRfZGV2aWNlKG10ZCk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAorCW1maSA9IGt6YWxsb2Moc2l6ZW9mKCptZmkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1maSkgeworCQlwdXRfbXRkX2RldmljZShtdGQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWZpLT5tdGQgPSBtdGQ7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gbWZpOworCiAJcmV0dXJuIDA7CiB9IC8qIG10ZF9vcGVuICovCiAKQEAgLTEzMiwxNiArMTMzLDE3IEBACiAKIHN0YXRpYyBpbnQgbXRkX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJNVERfY2xvc2VcbiIpOwogCi0JbXRkID0gVE9fTVREKGZpbGUpOwotCiAJaWYgKG10ZC0+c3luYykKIAkJbXRkLT5zeW5jKG10ZCk7CiAKIAlwdXRfbXRkX2RldmljZShtdGQpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa2ZyZWUobWZpKTsKIAogCXJldHVybiAwOwogfSAvKiBtdGRfY2xvc2UgKi8KQEAgLTE1Myw3ICsxNTUsOCBAQAogCiBzdGF0aWMgc3NpemVfdCBtdGRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IFRPX01URChmaWxlKTsKKwlzdHJ1Y3QgbXRkX2ZpbGVfaW5mbyAqbWZpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbWZpLT5tdGQ7CiAJc2l6ZV90IHJldGxlbj0wOwogCXNpemVfdCB0b3RhbF9yZXRsZW49MDsKIAlpbnQgcmV0PTA7CkBAIC0xNzAsMzYgKzE3Myw1OCBAQAogCiAJLyogRklYTUU6IFVzZSBraW92ZWMgaW4gMi41IHRvIGxvY2sgZG93biB0aGUgdXNlcidzIGJ1ZmZlcnMKIAkgICBhbmQgcGFzcyB0aGVtIGRpcmVjdGx5IHRvIHRoZSBNVEQgZnVuY3Rpb25zICovCisKKwlpZiAoY291bnQgPiBNQVhfS01BTExPQ19TSVpFKQorCQlrYnVmPWttYWxsb2MoTUFYX0tNQUxMT0NfU0laRSwgR0ZQX0tFUk5FTCk7CisJZWxzZQorCQlrYnVmPWttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCisJaWYgKCFrYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXdoaWxlIChjb3VudCkgeworCiAJCWlmIChjb3VudCA+IE1BWF9LTUFMTE9DX1NJWkUpCiAJCQlsZW4gPSBNQVhfS01BTExPQ19TSVpFOwogCQllbHNlCiAJCQlsZW4gPSBjb3VudDsKIAotCQlrYnVmPWttYWxsb2MobGVuLEdGUF9LRVJORUwpOwotCQlpZiAoIWtidWYpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlzd2l0Y2ggKE1URF9NT0RFKGZpbGUpKSB7Ci0JCWNhc2UgTVREX01PREVfT1RQX0ZBQ1Q6CisJCXN3aXRjaCAobWZpLT5tb2RlKSB7CisJCWNhc2UgTVREX01PREVfT1RQX0ZBQ1RPUlk6CiAJCQlyZXQgPSBtdGQtPnJlYWRfZmFjdF9wcm90X3JlZyhtdGQsICpwcG9zLCBsZW4sICZyZXRsZW4sIGtidWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVREX01PREVfT1RQX1VTRVI6CiAJCQlyZXQgPSBtdGQtPnJlYWRfdXNlcl9wcm90X3JlZyhtdGQsICpwcG9zLCBsZW4sICZyZXRsZW4sIGtidWYpOwogCQkJYnJlYWs7CisJCWNhc2UgTVREX01PREVfUkFXOgorCQl7CisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCisJCQlvcHMubW9kZSA9IE1URF9PT0JfUkFXOworCQkJb3BzLmRhdGJ1ZiA9IGtidWY7CisJCQlvcHMub29iYnVmID0gTlVMTDsKKwkJCW9wcy5sZW4gPSBsZW47CisKKwkJCXJldCA9IG10ZC0+cmVhZF9vb2IobXRkLCAqcHBvcywgJm9wcyk7CisJCQlyZXRsZW4gPSBvcHMucmV0bGVuOworCQkJYnJlYWs7CisJCX0KIAkJZGVmYXVsdDoKLQkJCXJldCA9IE1URF9SRUFEKG10ZCwgKnBwb3MsIGxlbiwgJnJldGxlbiwga2J1Zik7CisJCQlyZXQgPSBtdGQtPnJlYWQobXRkLCAqcHBvcywgbGVuLCAmcmV0bGVuLCBrYnVmKTsKIAkJfQogCQkvKiBOYW5kIHJldHVybnMgLUVCQURNU0cgb24gZWNjIGVycm9ycywgYnV0IGl0IHJldHVybnMKIAkJICogdGhlIGRhdGEuIEZvciBvdXIgdXNlcnNwYWNlIHRvb2xzIGl0IGlzIGltcG9ydGFudAogCQkgKiB0byBkdW1wIGFyZWFzIHdpdGggZWNjIGVycm9ycyAhCisJCSAqIEZvciBrZXJuZWwgaW50ZXJuYWwgdXNhZ2UgaXQgYWxzbyBtaWdodCByZXR1cm4gLUVVQ0xFQU4KKwkJICogdG8gc2lnbmFsIHRoZSBjYWxsZXIgdGhhdCBhIGJpdGZsaXAgaGFzIG9jY3VyZWQgYW5kIGhhcworCQkgKiBiZWVuIGNvcnJlY3RlZCBieSB0aGUgRUNDIGFsZ29yaXRobS4KIAkJICogVXNlcnNwYWNlIHNvZnR3YXJlIHdoaWNoIGFjY2Vzc2VzIE5BTkQgdGhpcyB3YXkKIAkJICogbXVzdCBiZSBhd2FyZSBvZiB0aGUgZmFjdCB0aGF0IGl0IGRlYWxzIHdpdGggTkFORAogCQkgKi8KLQkJaWYgKCFyZXQgfHwgKHJldCA9PSAtRUJBRE1TRykpIHsKKwkJaWYgKCFyZXQgfHwgKHJldCA9PSAtRVVDTEVBTikgfHwgKHJldCA9PSAtRUJBRE1TRykpIHsKIAkJCSpwcG9zICs9IHJldGxlbjsKIAkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBrYnVmLCByZXRsZW4pKSB7Ci0JCQkgICAgICAgIGtmcmVlKGtidWYpOworCQkJCWtmcmVlKGtidWYpOwogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQogCQkJZWxzZQpAQCAtMjE1LDE1ICsyNDAsMTYgQEAKIAkJCXJldHVybiByZXQ7CiAJCX0KIAotCQlrZnJlZShrYnVmKTsKIAl9CiAKKwlrZnJlZShrYnVmKTsKIAlyZXR1cm4gdG90YWxfcmV0bGVuOwogfSAvKiBtdGRfcmVhZCAqLwogCiBzdGF0aWMgc3NpemVfdCBtdGRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IG10ZF9pbmZvICptdGQgPSBUT19NVEQoZmlsZSk7CisJc3RydWN0IG10ZF9maWxlX2luZm8gKm1maSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG1maS0+bXRkOwogCWNoYXIgKmtidWY7CiAJc2l6ZV90IHJldGxlbjsKIAlzaXplX3QgdG90YWxfcmV0bGVuPTA7CkBAIC0yNDEsMjUgKzI2NywyOCBAQAogCWlmICghY291bnQpCiAJCXJldHVybiAwOwogCisJaWYgKGNvdW50ID4gTUFYX0tNQUxMT0NfU0laRSkKKwkJa2J1Zj1rbWFsbG9jKE1BWF9LTUFMTE9DX1NJWkUsIEdGUF9LRVJORUwpOworCWVsc2UKKwkJa2J1Zj1rbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKworCWlmICgha2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAl3aGlsZSAoY291bnQpIHsKKwogCQlpZiAoY291bnQgPiBNQVhfS01BTExPQ19TSVpFKQogCQkJbGVuID0gTUFYX0tNQUxMT0NfU0laRTsKIAkJZWxzZQogCQkJbGVuID0gY291bnQ7CiAKLQkJa2J1Zj1rbWFsbG9jKGxlbixHRlBfS0VSTkVMKTsKLQkJaWYgKCFrYnVmKSB7Ci0JCQlwcmludGsoImttYWxsb2MgaXMgbnVsbFxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCiAJCWlmIChjb3B5X2Zyb21fdXNlcihrYnVmLCBidWYsIGxlbikpIHsKIAkJCWtmcmVlKGtidWYpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAotCQlzd2l0Y2ggKE1URF9NT0RFKGZpbGUpKSB7Ci0JCWNhc2UgTVREX01PREVfT1RQX0ZBQ1Q6CisJCXN3aXRjaCAobWZpLT5tb2RlKSB7CisJCWNhc2UgTVREX01PREVfT1RQX0ZBQ1RPUlk6CiAJCQlyZXQgPSAtRVJPRlM7CiAJCQlicmVhazsKIAkJY2FzZSBNVERfTU9ERV9PVFBfVVNFUjoKQEAgLTI2OSw2ICsyOTgsMjEgQEAKIAkJCX0KIAkJCXJldCA9IG10ZC0+d3JpdGVfdXNlcl9wcm90X3JlZyhtdGQsICpwcG9zLCBsZW4sICZyZXRsZW4sIGtidWYpOwogCQkJYnJlYWs7CisKKwkJY2FzZSBNVERfTU9ERV9SQVc6CisJCXsKKwkJCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisKKwkJCW9wcy5tb2RlID0gTVREX09PQl9SQVc7CisJCQlvcHMuZGF0YnVmID0ga2J1ZjsKKwkJCW9wcy5vb2JidWYgPSBOVUxMOworCQkJb3BzLmxlbiA9IGxlbjsKKworCQkJcmV0ID0gbXRkLT53cml0ZV9vb2IobXRkLCAqcHBvcywgJm9wcyk7CisJCQlyZXRsZW4gPSBvcHMucmV0bGVuOworCQkJYnJlYWs7CisJCX0KKwogCQlkZWZhdWx0OgogCQkJcmV0ID0gKCoobXRkLT53cml0ZSkpKG10ZCwgKnBwb3MsIGxlbiwgJnJldGxlbiwga2J1Zik7CiAJCX0KQEAgLTI4MiwxMCArMzI2LDkgQEAKIAkJCWtmcmVlKGtidWYpOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCi0JCWtmcmVlKGtidWYpOwogCX0KIAorCWtmcmVlKGtidWYpOwogCXJldHVybiB0b3RhbF9yZXRsZW47CiB9IC8qIG10ZF93cml0ZSAqLwogCkBAIC0yOTksMTMgKzM0Miw0NSBAQAogCXdha2VfdXAoKHdhaXRfcXVldWVfaGVhZF90ICopaW5zdHItPnByaXYpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfTVREX09UUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX09ORU5BTkRfT1RQKQorc3RhdGljIGludCBvdHBfc2VsZWN0X2ZpbGVtb2RlKHN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmksIGludCBtb2RlKQoreworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbWZpLT5tdGQ7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1URF9PVFBfRkFDVE9SWToKKwkJaWYgKCFtdGQtPnJlYWRfZmFjdF9wcm90X3JlZykKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQllbHNlCisJCQltZmktPm1vZGUgPSBNVERfTU9ERV9PVFBfRkFDVE9SWTsKKwkJYnJlYWs7CisJY2FzZSBNVERfT1RQX1VTRVI6CisJCWlmICghbXRkLT5yZWFkX2ZhY3RfcHJvdF9yZWcpCisJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZWxzZQorCQkJbWZpLT5tb2RlID0gTVREX01PREVfT1RQX1VTRVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJY2FzZSBNVERfT1RQX09GRjoKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisjZWxzZQorIyBkZWZpbmUgb3RwX3NlbGVjdF9maWxlbW9kZShmLG0pCS1FT1BOT1RTVVBQCisjZW5kaWYKKwogc3RhdGljIGludCBtdGRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgdV9pbnQgY21kLCB1X2xvbmcgYXJnKQogewotCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gVE9fTVREKGZpbGUpOworCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcmV0ID0gMDsKIAl1X2xvbmcgc2l6ZTsKKwlzdHJ1Y3QgbXRkX2luZm9fdXNlciBpbmZvOwogCiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk1URF9pb2N0bFxuIik7CiAKQEAgLTM0MSw3ICs0MTYsMTUgQEAKIAl9CiAKIAljYXNlIE1FTUdFVElORk86Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgbXRkLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvX3VzZXIpKSkKKwkJaW5mby50eXBlCT0gbXRkLT50eXBlOworCQlpbmZvLmZsYWdzCT0gbXRkLT5mbGFnczsKKwkJaW5mby5zaXplCT0gbXRkLT5zaXplOworCQlpbmZvLmVyYXNlc2l6ZQk9IG10ZC0+ZXJhc2VzaXplOworCQlpbmZvLndyaXRlc2l6ZQk9IG10ZC0+d3JpdGVzaXplOworCQlpbmZvLm9vYnNpemUJPSBtdGQtPm9vYnNpemU7CisJCWluZm8uZWNjdHlwZQk9IG10ZC0+ZWNjdHlwZTsKKwkJaW5mby5lY2NzaXplCT0gbXRkLT5lY2NzaXplOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvX3VzZXIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKIApAQCAtNDAwLDggKzQ4Myw3IEBACiAJY2FzZSBNRU1XUklURU9PQjoKIAl7CiAJCXN0cnVjdCBtdGRfb29iX2J1ZiBidWY7Ci0JCXZvaWQgKmRhdGFidWY7Ci0JCXNzaXplX3QgcmV0bGVuOworCQlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOwogCiAJCWlmKCEoZmlsZS0+Zl9tb2RlICYgMikpCiAJCQlyZXR1cm4gLUVQRVJNOwpAQCAtNDA5LDcgKzQ5MSw3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCBhcmdwLCBzaXplb2Yoc3RydWN0IG10ZF9vb2JfYnVmKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAoYnVmLmxlbmd0aCA+IDB4NDA5NikKKwkJaWYgKGJ1Zi5sZW5ndGggPiA0MDk2KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKCFtdGQtPndyaXRlX29vYikKQEAgLTQyMSwyMSArNTAzLDMyIEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCWRhdGFidWYgPSBrbWFsbG9jKGJ1Zi5sZW5ndGgsIEdGUF9LRVJORUwpOwotCQlpZiAoIWRhdGFidWYpCisJCW9wcy5sZW4gPSBidWYubGVuZ3RoOworCQlvcHMub29ibGVuID0gYnVmLmxlbmd0aDsKKwkJb3BzLm9vYm9mZnMgPSBidWYuc3RhcnQgJiAobXRkLT5vb2JzaXplIC0gMSk7CisJCW9wcy5kYXRidWYgPSBOVUxMOworCQlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisKKwkJaWYgKG9wcy5vb2JvZmZzICYmIG9wcy5sZW4gPiAobXRkLT5vb2JzaXplIC0gb3BzLm9vYm9mZnMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJb3BzLm9vYmJ1ZiA9IGttYWxsb2MoYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCWlmICghb3BzLm9vYmJ1ZikKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhYnVmLCBidWYucHRyLCBidWYubGVuZ3RoKSkgewotCQkJa2ZyZWUoZGF0YWJ1Zik7CisJCWlmIChjb3B5X2Zyb21fdXNlcihvcHMub29iYnVmLCBidWYucHRyLCBidWYubGVuZ3RoKSkgeworCQkJa2ZyZWUob3BzLm9vYmJ1Zik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCi0JCXJldCA9IChtdGQtPndyaXRlX29vYikobXRkLCBidWYuc3RhcnQsIGJ1Zi5sZW5ndGgsICZyZXRsZW4sIGRhdGFidWYpOworCQlidWYuc3RhcnQgJj0gfihtdGQtPm9vYnNpemUgLSAxKTsKKwkJcmV0ID0gbXRkLT53cml0ZV9vb2IobXRkLCBidWYuc3RhcnQsICZvcHMpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCArIHNpemVvZih1aW50MzJfdCksICZyZXRsZW4sIHNpemVvZih1aW50MzJfdCkpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AgKyBzaXplb2YodWludDMyX3QpLCAmb3BzLnJldGxlbiwKKwkJCQkgc2l6ZW9mKHVpbnQzMl90KSkpCiAJCQlyZXQgPSAtRUZBVUxUOwogCi0JCWtmcmVlKGRhdGFidWYpOworCQlrZnJlZShvcHMub29iYnVmKTsKIAkJYnJlYWs7CiAKIAl9CkBAIC00NDMsMTMgKzUzNiwxMiBAQAogCWNhc2UgTUVNUkVBRE9PQjoKIAl7CiAJCXN0cnVjdCBtdGRfb29iX2J1ZiBidWY7Ci0JCXZvaWQgKmRhdGFidWY7Ci0JCXNzaXplX3QgcmV0bGVuOworCQlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCBhcmdwLCBzaXplb2Yoc3RydWN0IG10ZF9vb2JfYnVmKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAoYnVmLmxlbmd0aCA+IDB4NDA5NikKKwkJaWYgKGJ1Zi5sZW5ndGggPiA0MDk2KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKCFtdGQtPnJlYWRfb29iKQpAQCAtNDU3LDIyICs1NDksMzIgQEAKIAkJZWxzZQogCQkJcmV0ID0gYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmLnB0ciwKIAkJCQkJYnVmLmxlbmd0aCkgPyAwIDogLUVGQVVMVDsKLQogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQlkYXRhYnVmID0ga21hbGxvYyhidWYubGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFkYXRhYnVmKQorCQlvcHMubGVuID0gYnVmLmxlbmd0aDsKKwkJb3BzLm9vYmxlbiA9IGJ1Zi5sZW5ndGg7CisJCW9wcy5vb2JvZmZzID0gYnVmLnN0YXJ0ICYgKG10ZC0+b29ic2l6ZSAtIDEpOworCQlvcHMuZGF0YnVmID0gTlVMTDsKKwkJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCisJCWlmIChvcHMub29ib2ZmcyAmJiBvcHMubGVuID4gKG10ZC0+b29ic2l6ZSAtIG9wcy5vb2JvZmZzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW9wcy5vb2JidWYgPSBrbWFsbG9jKGJ1Zi5sZW5ndGgsIEdGUF9LRVJORUwpOworCQlpZiAoIW9wcy5vb2JidWYpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlyZXQgPSAobXRkLT5yZWFkX29vYikobXRkLCBidWYuc3RhcnQsIGJ1Zi5sZW5ndGgsICZyZXRsZW4sIGRhdGFidWYpOworCQlidWYuc3RhcnQgJj0gfihtdGQtPm9vYnNpemUgLSAxKTsKKwkJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIGJ1Zi5zdGFydCwgJm9wcyk7CiAKLQkJaWYgKHB1dF91c2VyKHJldGxlbiwgKHVpbnQzMl90IF9fdXNlciAqKWFyZ3ApKQorCQlpZiAocHV0X3VzZXIob3BzLnJldGxlbiwgKHVpbnQzMl90IF9fdXNlciAqKWFyZ3ApKQogCQkJcmV0ID0gLUVGQVVMVDsKLQkJZWxzZSBpZiAocmV0bGVuICYmIGNvcHlfdG9fdXNlcihidWYucHRyLCBkYXRhYnVmLCByZXRsZW4pKQorCQllbHNlIGlmIChvcHMucmV0bGVuICYmIGNvcHlfdG9fdXNlcihidWYucHRyLCBvcHMub29iYnVmLAorCQkJCQkJICAgIG9wcy5yZXRsZW4pKQogCQkJcmV0ID0gLUVGQVVMVDsKIAotCQlrZnJlZShkYXRhYnVmKTsKKwkJa2ZyZWUob3BzLm9vYmJ1Zik7CiAJCWJyZWFrOwogCX0KIApAQCAtNTA0LDE2ICs2MDYsMjIgQEAKIAkJYnJlYWs7CiAJfQogCi0JY2FzZSBNRU1TRVRPT0JTRUw6Ci0JewotCQlpZiAoY29weV9mcm9tX3VzZXIoJm10ZC0+b29iaW5mbywgYXJncCwgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKLQl9Ci0KKwkvKiBMZWdhY3kgaW50ZXJmYWNlICovCiAJY2FzZSBNRU1HRVRPT0JTRUw6CiAJewotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICYobXRkLT5vb2JpbmZvKSwgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKSkKKwkJc3RydWN0IG5hbmRfb29iaW5mbyBvaTsKKworCQlpZiAoIW10ZC0+ZWNjbGF5b3V0KQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlpZiAobXRkLT5lY2NsYXlvdXQtPmVjY2J5dGVzID4gQVJSQVlfU0laRShvaS5lY2Nwb3MpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJb2kudXNlZWNjID0gTVREX05BTkRFQ0NfQVVUT1BMQUNFOworCQltZW1jcHkoJm9pLmVjY3BvcywgbXRkLT5lY2NsYXlvdXQtPmVjY3Bvcywgc2l6ZW9mKG9pLmVjY3BvcykpOworCQltZW1jcHkoJm9pLm9vYmZyZWUsIG10ZC0+ZWNjbGF5b3V0LT5vb2JmcmVlLAorCQkgICAgICAgc2l6ZW9mKG9pLm9vYmZyZWUpKTsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZvaSwgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKIAl9CkBAIC01NDQsMzEgKzY1MiwxNyBAQAogCQlicmVhazsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTVREX09UUAorI2lmIGRlZmluZWQoQ09ORklHX01URF9PVFApIHx8IGRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09UUCkKIAljYXNlIE9UUFNFTEVDVDoKIAl7CiAJCWludCBtb2RlOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJm1vZGUsIGFyZ3AsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlTRVRfTVREX01PREUoZmlsZSwgMCk7Ci0JCXN3aXRjaCAobW9kZSkgewotCQljYXNlIE1URF9PVFBfRkFDVE9SWToKLQkJCWlmICghbXRkLT5yZWFkX2ZhY3RfcHJvdF9yZWcpCi0JCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCQllbHNlCi0JCQkJU0VUX01URF9NT0RFKGZpbGUsIE1URF9NT0RFX09UUF9GQUNUKTsKLQkJCWJyZWFrOwotCQljYXNlIE1URF9PVFBfVVNFUjoKLQkJCWlmICghbXRkLT5yZWFkX2ZhY3RfcHJvdF9yZWcpCi0JCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCQllbHNlCi0JCQkJU0VUX01URF9NT0RFKGZpbGUsIE1URF9NT0RFX09UUF9VU0VSKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0ID0gLUVJTlZBTDsKLQkJY2FzZSBNVERfT1RQX09GRjoKLQkJCWJyZWFrOwotCQl9CisKKwkJbWZpLT5tb2RlID0gTVREX01PREVfTk9STUFMOworCisJCXJldCA9IG90cF9zZWxlY3RfZmlsZW1vZGUobWZpLCBtb2RlKTsKKwogCQlmaWxlLT5mX3BvcyA9IDA7CiAJCWJyZWFrOwogCX0KQEAgLTU4MCw4ICs2NzQsOCBAQAogCQlpZiAoIWJ1ZikKIAkJCXJldHVybiAtRU5PTUVNOwogCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJc3dpdGNoIChNVERfTU9ERShmaWxlKSkgewotCQljYXNlIE1URF9NT0RFX09UUF9GQUNUOgorCQlzd2l0Y2ggKG1maS0+bW9kZSkgeworCQljYXNlIE1URF9NT0RFX09UUF9GQUNUT1JZOgogCQkJaWYgKG10ZC0+Z2V0X2ZhY3RfcHJvdF9pbmZvKQogCQkJCXJldCA9IG10ZC0+Z2V0X2ZhY3RfcHJvdF9pbmZvKG10ZCwgYnVmLCA0MDk2KTsKIAkJCWJyZWFrOwpAQCAtNTg5LDYgKzY4Myw4IEBACiAJCQlpZiAobXRkLT5nZXRfdXNlcl9wcm90X2luZm8pCiAJCQkJcmV0ID0gbXRkLT5nZXRfdXNlcl9wcm90X2luZm8obXRkLCBidWYsIDQwOTYpOwogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQogCQlpZiAocmV0ID49IDApIHsKIAkJCWlmIChjbWQgPT0gT1RQR0VUUkVHSU9OQ09VTlQpIHsKQEAgLTYwNyw3ICs3MDMsNyBAQAogCXsKIAkJc3RydWN0IG90cF9pbmZvIGluZm87CiAKLQkJaWYgKE1URF9NT0RFKGZpbGUpICE9IE1URF9NT0RFX09UUF9VU0VSKQorCQlpZiAobWZpLT5tb2RlICE9IE1URF9NT0RFX09UUF9VU0VSKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgYXJncCwgc2l6ZW9mKGluZm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNjE4LDYgKzcxNCw0OSBAQAogCX0KICNlbmRpZgogCisJY2FzZSBFQ0NHRVRMQVlPVVQ6CisJeworCQlpZiAoIW10ZC0+ZWNjbGF5b3V0KQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm10ZC0+ZWNjbGF5b3V0LAorCQkJCSBzaXplb2Yoc3RydWN0IG5hbmRfZWNjbGF5b3V0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBFQ0NHRVRTVEFUUzoKKwl7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm10ZC0+ZWNjX3N0YXRzLAorCQkJCSBzaXplb2Yoc3RydWN0IG10ZF9lY2Nfc3RhdHMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwl9CisKKwljYXNlIE1UREZJTEVNT0RFOgorCXsKKwkJbWZpLT5tb2RlID0gMDsKKworCQlzd2l0Y2goYXJnKSB7CisJCWNhc2UgTVREX01PREVfT1RQX0ZBQ1RPUlk6CisJCWNhc2UgTVREX01PREVfT1RQX1VTRVI6CisJCQlyZXQgPSBvdHBfc2VsZWN0X2ZpbGVtb2RlKG1maSwgYXJnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgTVREX01PREVfUkFXOgorCQkJaWYgKCFtdGQtPnJlYWRfb29iIHx8ICFtdGQtPndyaXRlX29vYikKKwkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCQltZmktPm1vZGUgPSBhcmc7CisKKwkJY2FzZSBNVERfTU9ERV9OT1JNQUw6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJZmlsZS0+Zl9wb3MgPSAwOworCQlicmVhazsKKwl9CisKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PVFRZOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKaW5kZXggOWFmODQwMy4uMWZlYTYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKQEAgLTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NvbmNhdC5oPgogCisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKIC8qCiAgKiBPdXIgc3RvcmFnZSBzdHJ1Y3R1cmU6CiAgKiBTdWJkZXYgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cnVjdCBtdGRfaW5mbyBvYmplY3RzCkBAIC01NCw3ICs1Niw3IEBACiAJICAgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKQogewogCXN0cnVjdCBtdGRfY29uY2F0ICpjb25jYXQgPSBDT05DQVQobXRkKTsKLQlpbnQgZXJyID0gLUVJTlZBTDsKKwlpbnQgcmV0ID0gMCwgZXJyOwogCWludCBpOwogCiAJKnJldGxlbiA9IDA7CkBAIC03OCwxOSArODAsMjkgQEAKIAogCQllcnIgPSBzdWJkZXYtPnJlYWQoc3ViZGV2LCBmcm9tLCBzaXplLCAmcmV0c2l6ZSwgYnVmKTsKIAotCQlpZiAoZXJyKQotCQkJYnJlYWs7CisJCS8qIFNhdmUgaW5mb3JtYXRpb24gYWJvdXQgYml0ZmxpcHMhICovCisJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQlpZiAoZXJyID09IC1FQkFETVNHKSB7CisJCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCQkJcmV0ID0gZXJyOworCQkJfSBlbHNlIGlmIChlcnIgPT0gLUVVQ0xFQU4pIHsKKwkJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQrKzsKKwkJCQkvKiBEbyBub3Qgb3ZlcndyaXRlIC1FQkFETVNHICEhICovCisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IGVycjsKKwkJCX0gZWxzZQorCQkJCXJldHVybiBlcnI7CisJCX0KIAogCQkqcmV0bGVuICs9IHJldHNpemU7CiAJCWxlbiAtPSBzaXplOwogCQlpZiAobGVuID09IDApCi0JCQlicmVhazsKKwkJCXJldHVybiByZXQ7CiAKLQkJZXJyID0gLUVJTlZBTDsKIAkJYnVmICs9IHNpemU7CiAJCWZyb20gPSAwOwogCX0KLQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNDEsMjExICsxNTMsMTg1IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNvbmNhdF9yZWFkX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCXNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBlY2NidWYsCi0JCXN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKK2NvbmNhdF93cml0ZXYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLAorCQl1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqIHJldGxlbikKIHsKIAlzdHJ1Y3QgbXRkX2NvbmNhdCAqY29uY2F0ID0gQ09OQ0FUKG10ZCk7Ci0JaW50IGVyciA9IC1FSU5WQUw7CisJc3RydWN0IGt2ZWMgKnZlY3NfY29weTsKKwl1bnNpZ25lZCBsb25nIGVudHJ5X2xvdywgZW50cnlfaGlnaDsKKwlzaXplX3QgdG90YWxfbGVuID0gMDsKIAlpbnQgaTsKLQotCSpyZXRsZW4gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IGNvbmNhdC0+bnVtX3N1YmRldjsgaSsrKSB7Ci0JCXN0cnVjdCBtdGRfaW5mbyAqc3ViZGV2ID0gY29uY2F0LT5zdWJkZXZbaV07Ci0JCXNpemVfdCBzaXplLCByZXRzaXplOwotCi0JCWlmIChmcm9tID49IHN1YmRldi0+c2l6ZSkgewotCQkJLyogTm90IGRlc3RpbmVkIGZvciB0aGlzIHN1YmRldiAqLwotCQkJc2l6ZSA9IDA7Ci0JCQlmcm9tIC09IHN1YmRldi0+c2l6ZTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGZyb20gKyBsZW4gPiBzdWJkZXYtPnNpemUpCi0JCQkvKiBGaXJzdCBwYXJ0IGdvZXMgaW50byB0aGlzIHN1YmRldiAqLwotCQkJc2l6ZSA9IHN1YmRldi0+c2l6ZSAtIGZyb207Ci0JCWVsc2UKLQkJCS8qIEVudGlyZSB0cmFuc2FjdGlvbiBnb2VzIGludG8gdGhpcyBzdWJkZXYgKi8KLQkJCXNpemUgPSBsZW47Ci0KLQkJaWYgKHN1YmRldi0+cmVhZF9lY2MpCi0JCQllcnIgPSBzdWJkZXYtPnJlYWRfZWNjKHN1YmRldiwgZnJvbSwgc2l6ZSwKLQkJCQkJICAgICAgICZyZXRzaXplLCBidWYsIGVjY2J1Ziwgb29ic2VsKTsKLQkJZWxzZQotCQkJZXJyID0gLUVJTlZBTDsKLQotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0KLQkJKnJldGxlbiArPSByZXRzaXplOwotCQlsZW4gLT0gc2l6ZTsKLQkJaWYgKGxlbiA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJZXJyID0gLUVJTlZBTDsKLQkJYnVmICs9IHNpemU7Ci0JCWlmIChlY2NidWYpIHsKLQkJCWVjY2J1ZiArPSBzdWJkZXYtPm9vYnNpemU7Ci0JCQkvKiBpbiBuYW5kLmMgYXQgbGVhc3QsIGVjY2J1ZnMgYXJlCi0JCQkgICB0YWdnZWQgd2l0aCAyIChpbnQpZWNjc3RhdHVzJzsgd2UKLQkJCSAgIG11c3QgYWNjb3VudCBmb3IgdGhlc2UgKi8KLQkJCWVjY2J1ZiArPSAyICogKHNpemVvZiAoaW50KSk7Ci0JCX0KLQkJZnJvbSA9IDA7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQKLWNvbmNhdF93cml0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQkJIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBlY2NidWYsCi0JCSBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCi17Ci0Jc3RydWN0IG10ZF9jb25jYXQgKmNvbmNhdCA9IENPTkNBVChtdGQpOwogCWludCBlcnIgPSAtRUlOVkFMOwotCWludCBpOwogCiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQlyZXR1cm4gLUVST0ZTOwogCiAJKnJldGxlbiA9IDA7CiAKKwkvKiBDYWxjdWxhdGUgdG90YWwgbGVuZ3RoIG9mIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJdG90YWxfbGVuICs9IHZlY3NbaV0uaW92X2xlbjsKKworCS8qIERvIG5vdCBhbGxvdyB3cml0ZSBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KKwlpZiAoKHRvICsgdG90YWxfbGVuKSA+IG10ZC0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDaGVjayBhbGlnbm1lbnQgKi8KKwlpZiAobXRkLT53cml0ZXNpemUgPiAxKSB7CisJCWxvZmZfdCBfX3RvID0gdG87CisJCWlmIChkb19kaXYoX190bywgbXRkLT53cml0ZXNpemUpIHx8ICh0b3RhbF9sZW4gJSBtdGQtPndyaXRlc2l6ZSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBtYWtlIGEgY29weSBvZiB2ZWNzICovCisJdmVjc19jb3B5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2ZWMpICogY291bnQsIEdGUF9LRVJORUwpOworCWlmICghdmVjc19jb3B5KQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkodmVjc19jb3B5LCB2ZWNzLCBzaXplb2Yoc3RydWN0IGt2ZWMpICogY291bnQpOworCisJZW50cnlfbG93ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgY29uY2F0LT5udW1fc3ViZGV2OyBpKyspIHsKIAkJc3RydWN0IG10ZF9pbmZvICpzdWJkZXYgPSBjb25jYXQtPnN1YmRldltpXTsKLQkJc2l6ZV90IHNpemUsIHJldHNpemU7CisJCXNpemVfdCBzaXplLCB3c2l6ZSwgcmV0c2l6ZSwgb2xkX2lvdl9sZW47CiAKIAkJaWYgKHRvID49IHN1YmRldi0+c2l6ZSkgewotCQkJc2l6ZSA9IDA7CiAJCQl0byAtPSBzdWJkZXYtPnNpemU7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAodG8gKyBsZW4gPiBzdWJkZXYtPnNpemUpCi0JCQlzaXplID0gc3ViZGV2LT5zaXplIC0gdG87Ci0JCWVsc2UKLQkJCXNpemUgPSBsZW47CisKKwkJc2l6ZSA9IG1pbih0b3RhbF9sZW4sIChzaXplX3QpKHN1YmRldi0+c2l6ZSAtIHRvKSk7CisJCXdzaXplID0gc2l6ZTsgLyogc3RvcmUgZm9yIGZ1dHVyZSB1c2UgKi8KKworCQllbnRyeV9oaWdoID0gZW50cnlfbG93OworCQl3aGlsZSAoZW50cnlfaGlnaCA8IGNvdW50KSB7CisJCQlpZiAoc2l6ZSA8PSB2ZWNzX2NvcHlbZW50cnlfaGlnaF0uaW92X2xlbikKKwkJCQlicmVhazsKKwkJCXNpemUgLT0gdmVjc19jb3B5W2VudHJ5X2hpZ2grK10uaW92X2xlbjsKKwkJfQorCisJCW9sZF9pb3ZfbGVuID0gdmVjc19jb3B5W2VudHJ5X2hpZ2hdLmlvdl9sZW47CisJCXZlY3NfY29weVtlbnRyeV9oaWdoXS5pb3ZfbGVuID0gc2l6ZTsKIAogCQlpZiAoIShzdWJkZXYtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCiAJCQllcnIgPSAtRVJPRlM7Ci0JCWVsc2UgaWYgKHN1YmRldi0+d3JpdGVfZWNjKQotCQkJZXJyID0gc3ViZGV2LT53cml0ZV9lY2Moc3ViZGV2LCB0bywgc2l6ZSwKLQkJCQkJCSZyZXRzaXplLCBidWYsIGVjY2J1Ziwgb29ic2VsKTsKIAkJZWxzZQotCQkJZXJyID0gLUVJTlZBTDsKKwkJCWVyciA9IHN1YmRldi0+d3JpdGV2KHN1YmRldiwgJnZlY3NfY29weVtlbnRyeV9sb3ddLAorCQkJCWVudHJ5X2hpZ2ggLSBlbnRyeV9sb3cgKyAxLCB0bywgJnJldHNpemUpOworCisJCXZlY3NfY29weVtlbnRyeV9oaWdoXS5pb3ZfbGVuID0gb2xkX2lvdl9sZW4gLSBzaXplOworCQl2ZWNzX2NvcHlbZW50cnlfaGlnaF0uaW92X2Jhc2UgKz0gc2l6ZTsKKworCQllbnRyeV9sb3cgPSBlbnRyeV9oaWdoOwogCiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAogCQkqcmV0bGVuICs9IHJldHNpemU7Ci0JCWxlbiAtPSBzaXplOwotCQlpZiAobGVuID09IDApCisJCXRvdGFsX2xlbiAtPSB3c2l6ZTsKKworCQlpZiAodG90YWxfbGVuID09IDApCiAJCQlicmVhazsKIAogCQllcnIgPSAtRUlOVkFMOwotCQlidWYgKz0gc2l6ZTsKLQkJaWYgKGVjY2J1ZikKLQkJCWVjY2J1ZiArPSBzdWJkZXYtPm9vYnNpemU7CiAJCXRvID0gMDsKIAl9CisKKwlrZnJlZSh2ZWNzX2NvcHkpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQKLWNvbmNhdF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCXNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKQorY29uY2F0X3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7CiAJc3RydWN0IG10ZF9jb25jYXQgKmNvbmNhdCA9IENPTkNBVChtdGQpOwotCWludCBlcnIgPSAtRUlOVkFMOwotCWludCBpOworCXN0cnVjdCBtdGRfb29iX29wcyBkZXZvcHMgPSAqb3BzOworCWludCBpLCBlcnIsIHJldCA9IDA7CiAKLQkqcmV0bGVuID0gMDsKKwlvcHMtPnJldGxlbiA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uY2F0LT5udW1fc3ViZGV2OyBpKyspIHsKIAkJc3RydWN0IG10ZF9pbmZvICpzdWJkZXYgPSBjb25jYXQtPnN1YmRldltpXTsKLQkJc2l6ZV90IHNpemUsIHJldHNpemU7CiAKIAkJaWYgKGZyb20gPj0gc3ViZGV2LT5zaXplKSB7Ci0JCQkvKiBOb3QgZGVzdGluZWQgZm9yIHRoaXMgc3ViZGV2ICovCi0JCQlzaXplID0gMDsKIAkJCWZyb20gLT0gc3ViZGV2LT5zaXplOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKGZyb20gKyBsZW4gPiBzdWJkZXYtPnNpemUpCi0JCQkvKiBGaXJzdCBwYXJ0IGdvZXMgaW50byB0aGlzIHN1YmRldiAqLwotCQkJc2l6ZSA9IHN1YmRldi0+c2l6ZSAtIGZyb207Ci0JCWVsc2UKLQkJCS8qIEVudGlyZSB0cmFuc2FjdGlvbiBnb2VzIGludG8gdGhpcyBzdWJkZXYgKi8KLQkJCXNpemUgPSBsZW47CiAKLQkJaWYgKHN1YmRldi0+cmVhZF9vb2IpCi0JCQllcnIgPSBzdWJkZXYtPnJlYWRfb29iKHN1YmRldiwgZnJvbSwgc2l6ZSwKLQkJCQkJICAgICAgICZyZXRzaXplLCBidWYpOwotCQllbHNlCi0JCQllcnIgPSAtRUlOVkFMOworCQkvKiBwYXJ0aWFsIHJlYWQgPyAqLworCQlpZiAoZnJvbSArIGRldm9wcy5sZW4gPiBzdWJkZXYtPnNpemUpCisJCQlkZXZvcHMubGVuID0gc3ViZGV2LT5zaXplIC0gZnJvbTsKIAotCQlpZiAoZXJyKQotCQkJYnJlYWs7CisJCWVyciA9IHN1YmRldi0+cmVhZF9vb2Ioc3ViZGV2LCBmcm9tLCAmZGV2b3BzKTsKKwkJb3BzLT5yZXRsZW4gKz0gZGV2b3BzLnJldGxlbjsKIAotCQkqcmV0bGVuICs9IHJldHNpemU7Ci0JCWxlbiAtPSBzaXplOwotCQlpZiAobGVuID09IDApCi0JCQlicmVhazsKKwkJLyogU2F2ZSBpbmZvcm1hdGlvbiBhYm91dCBiaXRmbGlwcyEgKi8KKwkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCWlmIChlcnIgPT0gLUVCQURNU0cpIHsKKwkJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKKwkJCQlyZXQgPSBlcnI7CisJCQl9IGVsc2UgaWYgKGVyciA9PSAtRVVDTEVBTikgeworCQkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOworCQkJCS8qIERvIG5vdCBvdmVyd3JpdGUgLUVCQURNU0cgISEgKi8KKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gZXJyOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIGVycjsKKwkJfQogCi0JCWVyciA9IC1FSU5WQUw7Ci0JCWJ1ZiArPSBzaXplOworCQlkZXZvcHMubGVuID0gb3BzLT5sZW4gLSBvcHMtPnJldGxlbjsKKwkJaWYgKCFkZXZvcHMubGVuKQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoZGV2b3BzLmRhdGJ1ZikKKwkJCWRldm9wcy5kYXRidWYgKz0gZGV2b3BzLnJldGxlbjsKKwkJaWYgKGRldm9wcy5vb2JidWYpCisJCQlkZXZvcHMub29iYnVmICs9IGRldm9wcy5vb2JsZW47CisKIAkJZnJvbSA9IDA7CiAJfQotCXJldHVybiBlcnI7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQKLWNvbmNhdF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQkJIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmKQorY29uY2F0X3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgbXRkX2NvbmNhdCAqY29uY2F0ID0gQ09OQ0FUKG10ZCk7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0JaW50IGk7CisJc3RydWN0IG10ZF9vb2Jfb3BzIGRldm9wcyA9ICpvcHM7CisJaW50IGksIGVycjsKIAogCWlmICghKG10ZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKIAkJcmV0dXJuIC1FUk9GUzsKIAotCSpyZXRsZW4gPSAwOworCW9wcy0+cmV0bGVuID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25jYXQtPm51bV9zdWJkZXY7IGkrKykgewogCQlzdHJ1Y3QgbXRkX2luZm8gKnN1YmRldiA9IGNvbmNhdC0+c3ViZGV2W2ldOwotCQlzaXplX3Qgc2l6ZSwgcmV0c2l6ZTsKIAogCQlpZiAodG8gPj0gc3ViZGV2LT5zaXplKSB7Ci0JCQlzaXplID0gMDsKIAkJCXRvIC09IHN1YmRldi0+c2l6ZTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmICh0byArIGxlbiA+IHN1YmRldi0+c2l6ZSkKLQkJCXNpemUgPSBzdWJkZXYtPnNpemUgLSB0bzsKLQkJZWxzZQotCQkJc2l6ZSA9IGxlbjsKIAotCQlpZiAoIShzdWJkZXYtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCi0JCQllcnIgPSAtRVJPRlM7Ci0JCWVsc2UgaWYgKHN1YmRldi0+d3JpdGVfb29iKQotCQkJZXJyID0gc3ViZGV2LT53cml0ZV9vb2Ioc3ViZGV2LCB0bywgc2l6ZSwgJnJldHNpemUsCi0JCQkJCQlidWYpOwotCQllbHNlCi0JCQllcnIgPSAtRUlOVkFMOworCQkvKiBwYXJ0aWFsIHdyaXRlID8gKi8KKwkJaWYgKHRvICsgZGV2b3BzLmxlbiA+IHN1YmRldi0+c2l6ZSkKKwkJCWRldm9wcy5sZW4gPSBzdWJkZXYtPnNpemUgLSB0bzsKIAorCQllcnIgPSBzdWJkZXYtPndyaXRlX29vYihzdWJkZXYsIHRvLCAmZGV2b3BzKTsKKwkJb3BzLT5yZXRsZW4gKz0gZGV2b3BzLnJldGxlbjsKIAkJaWYgKGVycikKLQkJCWJyZWFrOworCQkJcmV0dXJuIGVycjsKIAotCQkqcmV0bGVuICs9IHJldHNpemU7Ci0JCWxlbiAtPSBzaXplOwotCQlpZiAobGVuID09IDApCi0JCQlicmVhazsKKwkJZGV2b3BzLmxlbiA9IG9wcy0+bGVuIC0gb3BzLT5yZXRsZW47CisJCWlmICghZGV2b3BzLmxlbikKKwkJCXJldHVybiAwOwogCi0JCWVyciA9IC1FSU5WQUw7Ci0JCWJ1ZiArPSBzaXplOworCQlpZiAoZGV2b3BzLmRhdGJ1ZikKKwkJCWRldm9wcy5kYXRidWYgKz0gZGV2b3BzLnJldGxlbjsKKwkJaWYgKGRldm9wcy5vb2JidWYpCisJCQlkZXZvcHMub29iYnVmICs9IGRldm9wcy5vb2JsZW47CiAJCXRvID0gMDsKIAl9Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHZvaWQgY29uY2F0X2VyYXNlX2NhbGxiYWNrKHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKQEAgLTYzNiw2ICs2MjIsNjAgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgY29uY2F0X2Jsb2NrX2lzYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKQoreworCXN0cnVjdCBtdGRfY29uY2F0ICpjb25jYXQgPSBDT05DQVQobXRkKTsKKwlpbnQgaSwgcmVzID0gMDsKKworCWlmICghY29uY2F0LT5zdWJkZXZbMF0tPmJsb2NrX2lzYmFkKQorCQlyZXR1cm4gcmVzOworCisJaWYgKG9mcyA+IG10ZC0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uY2F0LT5udW1fc3ViZGV2OyBpKyspIHsKKwkJc3RydWN0IG10ZF9pbmZvICpzdWJkZXYgPSBjb25jYXQtPnN1YmRldltpXTsKKworCQlpZiAob2ZzID49IHN1YmRldi0+c2l6ZSkgeworCQkJb2ZzIC09IHN1YmRldi0+c2l6ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmVzID0gc3ViZGV2LT5ibG9ja19pc2JhZChzdWJkZXYsIG9mcyk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgY29uY2F0X2Jsb2NrX21hcmtiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCit7CisJc3RydWN0IG10ZF9jb25jYXQgKmNvbmNhdCA9IENPTkNBVChtdGQpOworCWludCBpLCBlcnIgPSAtRUlOVkFMOworCisJaWYgKCFjb25jYXQtPnN1YmRldlswXS0+YmxvY2tfbWFya2JhZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2ZzID4gbXRkLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBjb25jYXQtPm51bV9zdWJkZXY7IGkrKykgeworCQlzdHJ1Y3QgbXRkX2luZm8gKnN1YmRldiA9IGNvbmNhdC0+c3ViZGV2W2ldOworCisJCWlmIChvZnMgPj0gc3ViZGV2LT5zaXplKSB7CisJCQlvZnMgLT0gc3ViZGV2LT5zaXplOworCQkJY29udGludWU7CisJCX0KKworCQllcnIgPSBzdWJkZXYtPmJsb2NrX21hcmtiYWQoc3ViZGV2LCBvZnMpOworCQlpZiAoIWVycikKKwkJCW10ZC0+ZWNjX3N0YXRzLmJhZGJsb2NrcysrOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3RzIGEgdmlydHVhbCBNVEQgZGV2aWNlIGJ5IGNvbmNhdGVuYXRpbmcKICAqIG51bV9kZXZzIE1URCBkZXZpY2VzLiBBIHBvaW50ZXIgdG8gdGhlIG5ldyBkZXZpY2Ugb2JqZWN0IGlzCkBAIC02NzcsMTggKzcxNywyMiBAQAogCWNvbmNhdC0+bXRkLmZsYWdzID0gc3ViZGV2WzBdLT5mbGFnczsKIAljb25jYXQtPm10ZC5zaXplID0gc3ViZGV2WzBdLT5zaXplOwogCWNvbmNhdC0+bXRkLmVyYXNlc2l6ZSA9IHN1YmRldlswXS0+ZXJhc2VzaXplOwotCWNvbmNhdC0+bXRkLm9vYmJsb2NrID0gc3ViZGV2WzBdLT5vb2JibG9jazsKKwljb25jYXQtPm10ZC53cml0ZXNpemUgPSBzdWJkZXZbMF0tPndyaXRlc2l6ZTsKIAljb25jYXQtPm10ZC5vb2JzaXplID0gc3ViZGV2WzBdLT5vb2JzaXplOwogCWNvbmNhdC0+bXRkLmVjY3R5cGUgPSBzdWJkZXZbMF0tPmVjY3R5cGU7CiAJY29uY2F0LT5tdGQuZWNjc2l6ZSA9IHN1YmRldlswXS0+ZWNjc2l6ZTsKLQlpZiAoc3ViZGV2WzBdLT5yZWFkX2VjYykKLQkJY29uY2F0LT5tdGQucmVhZF9lY2MgPSBjb25jYXRfcmVhZF9lY2M7Ci0JaWYgKHN1YmRldlswXS0+d3JpdGVfZWNjKQotCQljb25jYXQtPm10ZC53cml0ZV9lY2MgPSBjb25jYXRfd3JpdGVfZWNjOworCWlmIChzdWJkZXZbMF0tPndyaXRldikKKwkJY29uY2F0LT5tdGQud3JpdGV2ID0gY29uY2F0X3dyaXRldjsKIAlpZiAoc3ViZGV2WzBdLT5yZWFkX29vYikKIAkJY29uY2F0LT5tdGQucmVhZF9vb2IgPSBjb25jYXRfcmVhZF9vb2I7CiAJaWYgKHN1YmRldlswXS0+d3JpdGVfb29iKQogCQljb25jYXQtPm10ZC53cml0ZV9vb2IgPSBjb25jYXRfd3JpdGVfb29iOworCWlmIChzdWJkZXZbMF0tPmJsb2NrX2lzYmFkKQorCQljb25jYXQtPm10ZC5ibG9ja19pc2JhZCA9IGNvbmNhdF9ibG9ja19pc2JhZDsKKwlpZiAoc3ViZGV2WzBdLT5ibG9ja19tYXJrYmFkKQorCQljb25jYXQtPm10ZC5ibG9ja19tYXJrYmFkID0gY29uY2F0X2Jsb2NrX21hcmtiYWQ7CisKKwljb25jYXQtPm10ZC5lY2Nfc3RhdHMuYmFkYmxvY2tzID0gc3ViZGV2WzBdLT5lY2Nfc3RhdHMuYmFkYmxvY2tzOwogCiAJY29uY2F0LT5zdWJkZXZbMF0gPSBzdWJkZXZbMF07CiAKQEAgLTcxNywxMiArNzYxLDEyIEBACiAJCQkJICAgIHN1YmRldltpXS0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFOwogCQl9CiAJCWNvbmNhdC0+bXRkLnNpemUgKz0gc3ViZGV2W2ldLT5zaXplOwotCQlpZiAoY29uY2F0LT5tdGQub29iYmxvY2sgICAhPSAgc3ViZGV2W2ldLT5vb2JibG9jayB8fAorCQljb25jYXQtPm10ZC5lY2Nfc3RhdHMuYmFkYmxvY2tzICs9CisJCQlzdWJkZXZbaV0tPmVjY19zdGF0cy5iYWRibG9ja3M7CisJCWlmIChjb25jYXQtPm10ZC53cml0ZXNpemUgICAhPSAgc3ViZGV2W2ldLT53cml0ZXNpemUgfHwKIAkJICAgIGNvbmNhdC0+bXRkLm9vYnNpemUgICAgIT0gIHN1YmRldltpXS0+b29ic2l6ZSB8fAogCQkgICAgY29uY2F0LT5tdGQuZWNjdHlwZSAgICAhPSAgc3ViZGV2W2ldLT5lY2N0eXBlIHx8CiAJCSAgICBjb25jYXQtPm10ZC5lY2NzaXplICAgICE9ICBzdWJkZXZbaV0tPmVjY3NpemUgfHwKLQkJICAgICFjb25jYXQtPm10ZC5yZWFkX2VjYyAgIT0gIXN1YmRldltpXS0+cmVhZF9lY2MgfHwKLQkJICAgICFjb25jYXQtPm10ZC53cml0ZV9lY2MgIT0gIXN1YmRldltpXS0+d3JpdGVfZWNjIHx8CiAJCSAgICAhY29uY2F0LT5tdGQucmVhZF9vb2IgICE9ICFzdWJkZXZbaV0tPnJlYWRfb29iIHx8CiAJCSAgICAhY29uY2F0LT5tdGQud3JpdGVfb29iICE9ICFzdWJkZXZbaV0tPndyaXRlX29vYikgewogCQkJa2ZyZWUoY29uY2F0KTsKQEAgLTczNCwxNCArNzc4LDExIEBACiAKIAl9CiAKKwljb25jYXQtPm10ZC5lY2NsYXlvdXQgPSBzdWJkZXZbMF0tPmVjY2xheW91dDsKKwogCWNvbmNhdC0+bnVtX3N1YmRldiA9IG51bV9kZXZzOwogCWNvbmNhdC0+bXRkLm5hbWUgPSBuYW1lOwogCi0JLyoKLQkgKiBOT1RFOiBmb3Igbm93LCB3ZSBkbyBub3QgcHJvdmlkZSBhbnkgcmVhZHYoKS93cml0ZXYoKSBtZXRob2RzCi0JICogICAgICAgYmVjYXVzZSB0aGV5IGFyZSBtZXNzeSB0byBpbXBsZW1lbnQgYW5kIHRoZXkgYXJlIG5vdAotCSAqICAgICAgIHVzZWQgdG8gYSBncmVhdCBleHRlbnQgYW55d2F5LgotCSAqLwogCWNvbmNhdC0+bXRkLmVyYXNlID0gY29uY2F0X2VyYXNlOwogCWNvbmNhdC0+bXRkLnJlYWQgPSBjb25jYXRfcmVhZDsKIAljb25jYXQtPm10ZC53cml0ZSA9IGNvbmNhdF93cml0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvcmUuYyBiL2RyaXZlcnMvbXRkL210ZGNvcmUuYwppbmRleCA5OTA1ODcwLi4xNmE5NTJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY29yZS5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNvcmUuYwpAQCAtNDcsNiArNDcsNyBAQAogewogCWludCBpOwogCisJQlVHX09OKG10ZC0+d3JpdGVzaXplID09IDApOwogCW11dGV4X2xvY2soJm10ZF90YWJsZV9tdXRleCk7CiAKIAlmb3IgKGk9MDsgaSA8IE1BWF9NVERfREVWSUNFUzsgaSsrKQpAQCAtMjU0LDM3ICsyNTUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLQotLyogZGVmYXVsdF9tdGRfcmVhZHYgLSBkZWZhdWx0IG10ZCByZWFkdiBtZXRob2QgZm9yIE1URCBkZXZpY2VzIHRoYXQgZG9udAotICoJCSAgICAgICBpbXBsZW1lbnQgdGhlaXIgb3duCi0gKi8KLQotaW50IGRlZmF1bHRfbXRkX3JlYWR2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IGZyb20sIHNpemVfdCAqcmV0bGVuKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQlzaXplX3QgdG90bGVuID0gMCwgdGhpc2xlbjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmKCFtdGQtPnJlYWQpIHsKLQkJcmV0ID0gLUVJTzsKLQl9IGVsc2UgewotCQlmb3IgKGk9MDsgaTxjb3VudDsgaSsrKSB7Ci0JCQlpZiAoIXZlY3NbaV0uaW92X2xlbikKLQkJCQljb250aW51ZTsKLQkJCXJldCA9IG10ZC0+cmVhZChtdGQsIGZyb20sIHZlY3NbaV0uaW92X2xlbiwgJnRoaXNsZW4sIHZlY3NbaV0uaW92X2Jhc2UpOwotCQkJdG90bGVuICs9IHRoaXNsZW47Ci0JCQlpZiAocmV0IHx8IHRoaXNsZW4gIT0gdmVjc1tpXS5pb3ZfbGVuKQotCQkJCWJyZWFrOwotCQkJZnJvbSArPSB2ZWNzW2ldLmlvdl9sZW47Ci0JCX0KLQl9Ci0JaWYgKHJldGxlbikKLQkJKnJldGxlbiA9IHRvdGxlbjsKLQlyZXR1cm4gcmV0OwotfQotCi0KIEVYUE9SVF9TWU1CT0woYWRkX210ZF9kZXZpY2UpOwogRVhQT1JUX1NZTUJPTChkZWxfbXRkX2RldmljZSk7CiBFWFBPUlRfU1lNQk9MKGdldF9tdGRfZGV2aWNlKTsKQEAgLTI5Miw3ICsyNjIsNiBAQAogRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9tdGRfdXNlcik7CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbXRkX3VzZXIpOwogRVhQT1JUX1NZTUJPTChkZWZhdWx0X210ZF93cml0ZXYpOwotRVhQT1JUX1NZTUJPTChkZWZhdWx0X210ZF9yZWFkdik7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKaW5kZXggOTkzOTU5MS4uNzdhNzEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwpAQCAtNTEsMTYgKzUxLDIxIEBACiAJCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCiB7CiAJc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOworCWludCByZXM7CisKIAlpZiAoZnJvbSA+PSBtdGQtPnNpemUpCiAJCWxlbiA9IDA7CiAJZWxzZSBpZiAoZnJvbSArIGxlbiA+IG10ZC0+c2l6ZSkKIAkJbGVuID0gbXRkLT5zaXplIC0gZnJvbTsKLQlpZiAocGFydC0+bWFzdGVyLT5yZWFkX2VjYyA9PSBOVUxMKQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT5yZWFkIChwYXJ0LT5tYXN0ZXIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsCi0JCQkJCWxlbiwgcmV0bGVuLCBidWYpOwotCWVsc2UKLQkJcmV0dXJuIHBhcnQtPm1hc3Rlci0+cmVhZF9lY2MgKHBhcnQtPm1hc3RlciwgZnJvbSArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1ZiwgTlVMTCwgJm10ZC0+b29iaW5mbyk7CisJcmVzID0gcGFydC0+bWFzdGVyLT5yZWFkIChwYXJ0LT5tYXN0ZXIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsCisJCQkJICAgbGVuLCByZXRsZW4sIGJ1Zik7CisJaWYgKHVubGlrZWx5KHJlcykpIHsKKwkJaWYgKHJlcyA9PSAtRVVDTEVBTikKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOworCQlpZiAocmVzID09IC1FQkFETVNHKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJfQorCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQgcGFydF9wb2ludCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLApAQCAtNzQsNiArNzksNyBAQAogCXJldHVybiBwYXJ0LT5tYXN0ZXItPnBvaW50IChwYXJ0LT5tYXN0ZXIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsCiAJCQkJICAgIGxlbiwgcmV0bGVuLCBidWYpOwogfQorCiBzdGF0aWMgdm9pZCBwYXJ0X3VucG9pbnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmFkZHIsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQobXRkKTsKQEAgLTgxLDMxICs4NywyNSBAQAogCXBhcnQtPm1hc3Rlci0+dW5wb2ludCAocGFydC0+bWFzdGVyLCBhZGRyLCBmcm9tICsgcGFydC0+b2Zmc2V0LCBsZW4pOwogfQogCi0KLXN0YXRpYyBpbnQgcGFydF9yZWFkX2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQorc3RhdGljIGludCBwYXJ0X3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7Ci0JaWYgKG9vYnNlbCA9PSBOVUxMKQotCQlvb2JzZWwgPSAmbXRkLT5vb2JpbmZvOwotCWlmIChmcm9tID49IG10ZC0+c2l6ZSkKLQkJbGVuID0gMDsKLQllbHNlIGlmIChmcm9tICsgbGVuID4gbXRkLT5zaXplKQotCQlsZW4gPSBtdGQtPnNpemUgLSBmcm9tOwotCXJldHVybiBwYXJ0LT5tYXN0ZXItPnJlYWRfZWNjIChwYXJ0LT5tYXN0ZXIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsCi0JCQkJCWxlbiwgcmV0bGVuLCBidWYsIGVjY2J1Ziwgb29ic2VsKTsKLX0KKwlpbnQgcmVzOwogCi1zdGF0aWMgaW50IHBhcnRfcmVhZF9vb2IgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKLQkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7CiAJaWYgKGZyb20gPj0gbXRkLT5zaXplKQotCQlsZW4gPSAwOwotCWVsc2UgaWYgKGZyb20gKyBsZW4gPiBtdGQtPnNpemUpCi0JCWxlbiA9IG10ZC0+c2l6ZSAtIGZyb207Ci0JcmV0dXJuIHBhcnQtPm1hc3Rlci0+cmVhZF9vb2IgKHBhcnQtPm1hc3RlciwgZnJvbSArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1Zik7CisJCXJldHVybiAtRUlOVkFMOworCWlmIChmcm9tICsgb3BzLT5sZW4gPiBtdGQtPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCXJlcyA9IHBhcnQtPm1hc3Rlci0+cmVhZF9vb2IocGFydC0+bWFzdGVyLCBmcm9tICsgcGFydC0+b2Zmc2V0LCBvcHMpOworCisJaWYgKHVubGlrZWx5KHJlcykpIHsKKwkJaWYgKHJlcyA9PSAtRVVDTEVBTikKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOworCQlpZiAocmVzID09IC1FQkFETVNHKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJfQorCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQgcGFydF9yZWFkX3VzZXJfcHJvdF9yZWcgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKQEAgLTE0OCw0NCArMTQ4LDIzIEBACiAJCWxlbiA9IDA7CiAJZWxzZSBpZiAodG8gKyBsZW4gPiBtdGQtPnNpemUpCiAJCWxlbiA9IG10ZC0+c2l6ZSAtIHRvOwotCWlmIChwYXJ0LT5tYXN0ZXItPndyaXRlX2VjYyA9PSBOVUxMKQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZSAocGFydC0+bWFzdGVyLCB0byArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1Zik7Ci0JZWxzZQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZV9lY2MgKHBhcnQtPm1hc3RlciwgdG8gKyBwYXJ0LT5vZmZzZXQsCi0JCQkJCWxlbiwgcmV0bGVuLCBidWYsIE5VTEwsICZtdGQtPm9vYmluZm8pOwotCisJcmV0dXJuIHBhcnQtPm1hc3Rlci0+d3JpdGUgKHBhcnQtPm1hc3RlciwgdG8gKyBwYXJ0LT5vZmZzZXQsCisJCQkJICAgIGxlbiwgcmV0bGVuLCBidWYpOwogfQogCi1zdGF0aWMgaW50IHBhcnRfd3JpdGVfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLAotCQkJIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCitzdGF0aWMgaW50IHBhcnRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7CiAJc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOwotCWlmICghKG10ZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKLQkJcmV0dXJuIC1FUk9GUzsKLQlpZiAob29ic2VsID09IE5VTEwpCi0JCW9vYnNlbCA9ICZtdGQtPm9vYmluZm87Ci0JaWYgKHRvID49IG10ZC0+c2l6ZSkKLQkJbGVuID0gMDsKLQllbHNlIGlmICh0byArIGxlbiA+IG10ZC0+c2l6ZSkKLQkJbGVuID0gbXRkLT5zaXplIC0gdG87Ci0JcmV0dXJuIHBhcnQtPm1hc3Rlci0+d3JpdGVfZWNjIChwYXJ0LT5tYXN0ZXIsIHRvICsgcGFydC0+b2Zmc2V0LAotCQkJCQlsZW4sIHJldGxlbiwgYnVmLCBlY2NidWYsIG9vYnNlbCk7Ci19CiAKLXN0YXRpYyBpbnQgcGFydF93cml0ZV9vb2IgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOwogCWlmICghKG10ZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKIAkJcmV0dXJuIC1FUk9GUzsKKwogCWlmICh0byA+PSBtdGQtPnNpemUpCi0JCWxlbiA9IDA7Ci0JZWxzZSBpZiAodG8gKyBsZW4gPiBtdGQtPnNpemUpCi0JCWxlbiA9IG10ZC0+c2l6ZSAtIHRvOwotCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRlX29vYiAocGFydC0+bWFzdGVyLCB0byArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1Zik7CisJCXJldHVybiAtRUlOVkFMOworCWlmICh0byArIG9wcy0+bGVuID4gbXRkLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZV9vb2IocGFydC0+bWFzdGVyLCB0byArIHBhcnQtPm9mZnNldCwgb3BzKTsKIH0KIAogc3RhdGljIGludCBwYXJ0X3dyaXRlX3VzZXJfcHJvdF9yZWcgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKQEAgLTIwOCw1MiArMTg3LDggQEAKIAlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7CiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQlyZXR1cm4gLUVST0ZTOwotCWlmIChwYXJ0LT5tYXN0ZXItPndyaXRldl9lY2MgPT0gTlVMTCkKLQkJcmV0dXJuIHBhcnQtPm1hc3Rlci0+d3JpdGV2IChwYXJ0LT5tYXN0ZXIsIHZlY3MsIGNvdW50LAorCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRldiAocGFydC0+bWFzdGVyLCB2ZWNzLCBjb3VudCwKIAkJCQkJdG8gKyBwYXJ0LT5vZmZzZXQsIHJldGxlbik7Ci0JZWxzZQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZXZfZWNjIChwYXJ0LT5tYXN0ZXIsIHZlY3MsIGNvdW50LAotCQkJCQl0byArIHBhcnQtPm9mZnNldCwgcmV0bGVuLAotCQkJCQlOVUxMLCAmbXRkLT5vb2JpbmZvKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X3JlYWR2IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgIHN0cnVjdCBrdmVjICp2ZWNzLAotCQkJIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLCBzaXplX3QgKnJldGxlbikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7Ci0JaWYgKHBhcnQtPm1hc3Rlci0+cmVhZHZfZWNjID09IE5VTEwpCi0JCXJldHVybiBwYXJ0LT5tYXN0ZXItPnJlYWR2IChwYXJ0LT5tYXN0ZXIsIHZlY3MsIGNvdW50LAotCQkJCQlmcm9tICsgcGFydC0+b2Zmc2V0LCByZXRsZW4pOwotCWVsc2UKLQkJcmV0dXJuIHBhcnQtPm1hc3Rlci0+cmVhZHZfZWNjIChwYXJ0LT5tYXN0ZXIsIHZlY3MsIGNvdW50LAotCQkJCQlmcm9tICsgcGFydC0+b2Zmc2V0LCByZXRsZW4sCi0JCQkJCU5VTEwsICZtdGQtPm9vYmluZm8pOwotfQotCi1zdGF0aWMgaW50IHBhcnRfd3JpdGV2X2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsICBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQkJCSB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqcmV0bGVuLAotCQkJIHVfY2hhciAqZWNjYnVmLCAgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQobXRkKTsKLQlpZiAoIShtdGQtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCi0JCXJldHVybiAtRVJPRlM7Ci0JaWYgKG9vYnNlbCA9PSBOVUxMKQotCQlvb2JzZWwgPSAmbXRkLT5vb2JpbmZvOwotCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRldl9lY2MgKHBhcnQtPm1hc3RlciwgdmVjcywgY291bnQsCi0JCQkJCXRvICsgcGFydC0+b2Zmc2V0LCByZXRsZW4sCi0JCQkJCWVjY2J1Ziwgb29ic2VsKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X3JlYWR2X2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsICBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQkJCSB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgZnJvbSwgc2l6ZV90ICpyZXRsZW4sCi0JCQkgdV9jaGFyICplY2NidWYsICBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOwotCWlmIChvb2JzZWwgPT0gTlVMTCkKLQkJb29ic2VsID0gJm10ZC0+b29iaW5mbzsKLQlyZXR1cm4gcGFydC0+bWFzdGVyLT5yZWFkdl9lY2MgKHBhcnQtPm1hc3RlciwgdmVjcywgY291bnQsCi0JCQkJCWZyb20gKyBwYXJ0LT5vZmZzZXQsIHJldGxlbiwKLQkJCQkJZWNjYnVmLCBvb2JzZWwpOwogfQogCiBzdGF0aWMgaW50IHBhcnRfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCkBAIC0zMjksMTIgKzI2NCwxNyBAQAogc3RhdGljIGludCBwYXJ0X2Jsb2NrX21hcmtiYWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKQogewogCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQobXRkKTsKKwlpbnQgcmVzOworCiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQlyZXR1cm4gLUVST0ZTOwogCWlmIChvZnMgPj0gbXRkLT5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlvZnMgKz0gcGFydC0+b2Zmc2V0OwotCXJldHVybiBwYXJ0LT5tYXN0ZXItPmJsb2NrX21hcmtiYWQocGFydC0+bWFzdGVyLCBvZnMpOworCXJlcyA9IHBhcnQtPm1hc3Rlci0+YmxvY2tfbWFya2JhZChwYXJ0LT5tYXN0ZXIsIG9mcyk7CisJaWYgKCFyZXMpCisJCW10ZC0+ZWNjX3N0YXRzLmJhZGJsb2NrcysrOworCXJldHVybiByZXM7CiB9CiAKIC8qCkBAIC0zOTgsNyArMzM4LDcgQEAKIAkJc2xhdmUtPm10ZC50eXBlID0gbWFzdGVyLT50eXBlOwogCQlzbGF2ZS0+bXRkLmZsYWdzID0gbWFzdGVyLT5mbGFncyAmIH5wYXJ0c1tpXS5tYXNrX2ZsYWdzOwogCQlzbGF2ZS0+bXRkLnNpemUgPSBwYXJ0c1tpXS5zaXplOwotCQlzbGF2ZS0+bXRkLm9vYmJsb2NrID0gbWFzdGVyLT5vb2JibG9jazsKKwkJc2xhdmUtPm10ZC53cml0ZXNpemUgPSBtYXN0ZXItPndyaXRlc2l6ZTsKIAkJc2xhdmUtPm10ZC5vb2JzaXplID0gbWFzdGVyLT5vb2JzaXplOwogCQlzbGF2ZS0+bXRkLmVjY3R5cGUgPSBtYXN0ZXItPmVjY3R5cGU7CiAJCXNsYXZlLT5tdGQuZWNjc2l6ZSA9IG1hc3Rlci0+ZWNjc2l6ZTsKQEAgLTQxNSwxMCArMzU1LDYgQEAKIAkJCXNsYXZlLT5tdGQudW5wb2ludCA9IHBhcnRfdW5wb2ludDsKIAkJfQogCi0JCWlmIChtYXN0ZXItPnJlYWRfZWNjKQotCQkJc2xhdmUtPm10ZC5yZWFkX2VjYyA9IHBhcnRfcmVhZF9lY2M7Ci0JCWlmIChtYXN0ZXItPndyaXRlX2VjYykKLQkJCXNsYXZlLT5tdGQud3JpdGVfZWNjID0gcGFydF93cml0ZV9lY2M7CiAJCWlmIChtYXN0ZXItPnJlYWRfb29iKQogCQkJc2xhdmUtPm10ZC5yZWFkX29vYiA9IHBhcnRfcmVhZF9vb2I7CiAJCWlmIChtYXN0ZXItPndyaXRlX29vYikKQEAgLTQ0MywxMiArMzc5LDYgQEAKIAkJfQogCQlpZiAobWFzdGVyLT53cml0ZXYpCiAJCQlzbGF2ZS0+bXRkLndyaXRldiA9IHBhcnRfd3JpdGV2OwotCQlpZiAobWFzdGVyLT5yZWFkdikKLQkJCXNsYXZlLT5tdGQucmVhZHYgPSBwYXJ0X3JlYWR2OwotCQlpZiAobWFzdGVyLT53cml0ZXZfZWNjKQotCQkJc2xhdmUtPm10ZC53cml0ZXZfZWNjID0gcGFydF93cml0ZXZfZWNjOwotCQlpZiAobWFzdGVyLT5yZWFkdl9lY2MpCi0JCQlzbGF2ZS0+bXRkLnJlYWR2X2VjYyA9IHBhcnRfcmVhZHZfZWNjOwogCQlpZiAobWFzdGVyLT5sb2NrKQogCQkJc2xhdmUtPm10ZC5sb2NrID0gcGFydF9sb2NrOwogCQlpZiAobWFzdGVyLT51bmxvY2spCkBAIC01MjgsOCArNDU4LDE3IEBACiAJCQkJcGFydHNbaV0ubmFtZSk7CiAJCX0KIAotCQkvKiBjb3B5IG9vYmluZm8gZnJvbSBtYXN0ZXIgKi8KLQkJbWVtY3B5KCZzbGF2ZS0+bXRkLm9vYmluZm8sICZtYXN0ZXItPm9vYmluZm8sIHNpemVvZihzbGF2ZS0+bXRkLm9vYmluZm8pKTsKKwkJc2xhdmUtPm10ZC5lY2NsYXlvdXQgPSBtYXN0ZXItPmVjY2xheW91dDsKKwkJaWYgKG1hc3Rlci0+YmxvY2tfaXNiYWQpIHsKKwkJCXVpbnQzMl90IG9mZnMgPSAwOworCisJCQl3aGlsZShvZmZzIDwgc2xhdmUtPm10ZC5zaXplKSB7CisJCQkJaWYgKG1hc3Rlci0+YmxvY2tfaXNiYWQobWFzdGVyLAorCQkJCQkJCW9mZnMgKyBzbGF2ZS0+b2Zmc2V0KSkKKwkJCQkJc2xhdmUtPm10ZC5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CisJCQkJb2ZmcyArPSBzbGF2ZS0+bXRkLmVyYXNlc2l6ZTsKKwkJCX0KKwkJfQogCiAJCWlmKHBhcnRzW2ldLm10ZHApCiAJCXsJLyogc3RvcmUgdGhlIG9iamVjdCBwb2ludGVyIChjYWxsZXIgbWF5IG9yIG1heSBub3QgcmVnaXN0ZXIgaXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCBjZmUyODhhLi4zZGI3N2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC0yMyw2ICsyMywxNCBAQAogCSAgZGV2aWNlIHRoaW5rcyB0aGUgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwsIGEgYml0IGNvdWxkIGhhdmUgYmVlbgogCSAgZmxpcHBlZCBhY2NpZGVudGFseSBkdWUgdG8gZGV2aWNlIHdlYXIgb3Igc29tZXRoaW5nIGVsc2UuCiAKK2NvbmZpZyBNVERfTkFORF9FQ0NfU01DCisJYm9vbCAiTkFORCBFQ0MgU21hcnQgTWVkaWEgYnl0ZSBvcmRlciIKKwlkZXBlbmRzIG9uIE1URF9OQU5ECisJZGVmYXVsdCBuCisJaGVscAorCSAgU29mdHdhcmUgRUNDIGFjY29yZGluZyB0byB0aGUgU21hcnQgTWVkaWEgU3BlY2lmaWNhdGlvbi4KKwkgIFRoZSBvcmlnaW5hbCBMaW51eCBpbXBsZW1lbnRhdGlvbiBoYWQgYnl0ZSAwIGFuZCAxIHN3YXBwZWQuCisKIGNvbmZpZyBNVERfTkFORF9BVVRDUFUxMgogCXRyaXN0YXRlICJTbWFydE1lZGlhQ2FyZCBvbiBhdXRyb25peCBhdXRjcHUxMiBib2FyZCIKIAlkZXBlbmRzIG9uIE1URF9OQU5EICYmIEFSQ0hfQVVUQ1BVMTIKQEAgLTQ5LDEyICs1NywyNCBAQAogCWhlbHAKIAkgIElmIHlvdSBoYWQgdG8gYXNrLCB5b3UgZG9uJ3QgaGF2ZSBvbmUuIFNheSAnTicuCiAKK2NvbmZpZyBNVERfTkFORF9BTVNfREVMVEEKKwl0cmlzdGF0ZSAiTkFORCBGbGFzaCBkZXZpY2Ugb24gQW1zdHJhZCBFMyIKKwlkZXBlbmRzIG9uIE1BQ0hfQU1TX0RFTFRBICYmIE1URF9OQU5ECisJaGVscAorCSAgU3VwcG9ydCBmb3IgTkFORCBmbGFzaCBvbiBBbXN0cmFkIEUzIChEZWx0YSkuCisKIGNvbmZpZyBNVERfTkFORF9UT1RPCiAJdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIFRPVE8gYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAgJiYgTVREX05BTkQKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUCAmJiBNVERfTkFORCAmJiBCUk9LRU4KIAloZWxwCiAJICBTdXBwb3J0IGZvciBOQU5EIGZsYXNoIG9uIFRleGFzIEluc3RydW1lbnRzIFRvdG8gcGxhdGZvcm0uCiAKK2NvbmZpZyBNVERfTkFORF9UUzcyNTAKKwl0cmlzdGF0ZSAiTkFORCBGbGFzaCBkZXZpY2Ugb24gVFMtNzI1MCBib2FyZCIKKwlkZXBlbmRzIG9uIE1BQ0hfVFM3MlhYICYmIE1URF9OQU5ECisJaGVscAorCSAgU3VwcG9ydCBmb3IgTkFORCBmbGFzaCBvbiBUZWNobm9sb2dpYyBTeXN0ZW1zIFRTLTcyNTAgcGxhdGZvcm0uCisKIGNvbmZpZyBNVERfTkFORF9JRFMKIAl0cmlzdGF0ZQogCkBAIC03Niw3ICs5Niw3IEBACiAKIGNvbmZpZyBNVERfTkFORF9QUENIQU1FTEVPTkVWQgogCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBQUENoYW1lbGVvbkVWQiBib2FyZCIKLQlkZXBlbmRzIG9uIFBQQ0hBTUVMRU9ORVZCICYmIE1URF9OQU5ECisJZGVwZW5kcyBvbiBQUENIQU1FTEVPTkVWQiAmJiBNVERfTkFORCAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIE5BTkQgZmxhc2ggZHJpdmVyIG9uIHRoZSBQUENoYW1lbGVvbiBFVkIgQm9hcmQuCiAKQEAgLTg3LDcgKzEwNyw3IEBACiAJICBUaGlzIGVuYWJsZXMgdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBvbiB0aGUgUzNDMjQxMCBhbmQgUzNDMjQ0MAogCSAgU29DcwogCi0JICBObyBib2FyZCBzcGVjZmljIHN1cHBvcnQgaXMgZG9uZSBieSB0aGlzIGRyaXZlciwgZWFjaCBib2FyZAorCSAgTm8gYm9hcmQgc3BlY2lmaWMgc3VwcG9ydCBpcyBkb25lIGJ5IHRoaXMgZHJpdmVyLCBlYWNoIGJvYXJkCiAJICBtdXN0IGFkdmVydGlzZSBhIHBsYXRmb3JtX2RldmljZSBmb3IgdGhlIGRyaXZlciB0byBhdHRhY2guCiAKIGNvbmZpZyBNVERfTkFORF9TM0MyNDEwX0RFQlVHCkBAIC0xMDksNiArMTI5LDIyIEBACiAJICBjdXJyZW50bHkgbm90IGJlIGFibGUgdG8gc3dpdGNoIHRvIHNvZnR3YXJlLCBhcyB0aGVyZSBpcyBubwogCSAgaW1wbGVtZW50YXRpb24gZm9yIEVDQyBtZXRob2QgdXNlZCBieSB0aGUgUzNDMjQxMAogCitjb25maWcgTVREX05BTkRfTkRGQworCXRyaXN0YXRlICJOREZDIE5hbkQgRmxhc2ggQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIE1URF9OQU5EICYmIDQ0eAorCWhlbHAKKwkgTkRGQyBOYW5kIEZsYXNoIENvbnRyb2xsZXJzIGFyZSBpbnRlZ3JhdGVkIGluIEVQNDR4IFNvQ3MKKworY29uZmlnIE1URF9OQU5EX1MzQzI0MTBfQ0xLU1RPUAorCWJvb2wgIlMzQzI0MTAgTkFORCBJRExFIGNsb2NrIHN0b3AiCisJZGVwZW5kcyBvbiBNVERfTkFORF9TM0MyNDEwCisJZGVmYXVsdCBuCisJaGVscAorCSAgU3RvcCB0aGUgY2xvY2sgdG8gdGhlIE5BTkQgY29udHJvbGxlciB3aGVuIHRoZXJlIGlzIG5vIGNoaXAKKwkgIHNlbGVjdGVkIHRvIHNhdmUgcG93ZXIuIFRoaXMgd2lsbCBtZWFuIHRoZXJlIGlzIGEgc21hbGwgZGVsYXkKKwkgIHdoZW4gdGhlIGlzIE5BTkQgY2hpcCBzZWxlY3RlZCBvciByZWxlYXNlZCwgYnV0IHdpbGwgc2F2ZQorCSAgYXBwcm94aW1hdGVseSA1bUEgb2YgcG93ZXIgd2hlbiB0aGVyZSBpcyBub3RoaW5nIGhhcHBlbmluZy4KKwogY29uZmlnIE1URF9OQU5EX0RJU0tPTkNISVAKIAl0cmlzdGF0ZSAiRGlza09uQ2hpcCAyMDAwLCBNaWxsZW5uaXVtIGFuZCBNaWxsZW5uaXVtIFBsdXMgKE5BTkQgcmVpbXBsZW1lbnRhdGlvbikgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBFWFBFUklNRU5UQUwKQEAgLTE4MywxMSArMjE5LDI0IEBACiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggb24gU2hhcnAgU0wgU2VyaWVzIChDN3h4ICsgb3RoZXJzKSIKIAlkZXBlbmRzIG9uIE1URF9OQU5EICYmIEFSQ0hfUFhBCiAKK2NvbmZpZyBNVERfTkFORF9DUzU1M1gKKwl0cmlzdGF0ZSAiTkFORCBzdXBwb3J0IGZvciBDUzU1MzUvQ1M1NTM2IChBTUQgR2VvZGUgY29tcGFuaW9uIGNoaXApIgorCWRlcGVuZHMgb24gTVREX05BTkQgJiYgWDg2XzMyICYmIChYODZfUEMgfHwgWDg2X0dFTkVSSUNBUkNIKQorCWhlbHAKKwkgIFRoZSBDUzU1M3ggY29tcGFuaW9uIGNoaXBzIGZvciB0aGUgQU1EIEdlb2RlIHByb2Nlc3NvcgorCSAgaW5jbHVkZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXJzIHdpdGggYnVpbHQtaW4gaGFyZHdhcmUgRUNDCisJICBjYXBhYmlsaXRpZXM7IGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYWxsb3cgeW91IHRvIHVzZQorCSAgdGhlc2UuIFRoZSBkcml2ZXIgd2lsbCBjaGVjayB0aGUgTVNScyB0byB2ZXJpZnkgdGhhdCB0aGUKKwkgIGNvbnRyb2xsZXIgaXMgZW5hYmxlZCBmb3IgTkFORCwgYW5kIGN1cnJlbnRseSByZXF1aXJlcyB0aGF0CisJICB0aGUgY29udHJvbGxlciBiZSBpbiBNTUlPIG1vZGUuCisKKwkgIElmIHlvdSBzYXkgIm0iLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICJjczU1M3hfbmFuZC5rbyIuCisKIGNvbmZpZyBNVERfTkFORF9OQU5EU0lNCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggU2ltdWxhdG9yIgogCWRlcGVuZHMgb24gTVREX05BTkQgJiYgTVREX1BBUlRJVElPTlMKIAloZWxwCi0JICBUaGUgc2ltdWxhdG9yIG1heSBzaW11bGF0ZSB2ZXJpb3VzIE5BTkQgZmxhc2ggY2hpcHMgZm9yIHRoZQorCSAgVGhlIHNpbXVsYXRvciBtYXkgc2ltdWxhdGUgdmFyaW91cyBOQU5EIGZsYXNoIGNoaXBzIGZvciB0aGUKIAkgIE1URCBuYW5kIGxheWVyLgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQppbmRleCA0MTc0MjAyLi5mNzQ3NTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfSURTKQkJKz0gbmFuZF9pZHMubwogCiBvYmotJChDT05GSUdfTVREX05BTkRfU1BJQSkJCSs9IHNwaWEubworb2JqLSQoQ09ORklHX01URF9OQU5EX0FNU19ERUxUQSkJKz0gYW1zLWRlbHRhLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9UT1RPKQkJKz0gdG90by5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQVVUQ1BVMTIpCQkrPSBhdXRjcHUxMi5vCiBvYmotJChDT05GSUdfTVREX05BTkRfRURCNzMxMikJCSs9IGVkYjczMTIubwpAQCAtMTcsNiArMTgsOSBAQAogb2JqLSQoQ09ORklHX01URF9OQU5EX0gxOTAwKQkJKz0gaDE5MTAubwogb2JqLSQoQ09ORklHX01URF9OQU5EX1JUQ19GUk9NNCkJKz0gcnRjX2Zyb200Lm8KIG9iai0kKENPTkZJR19NVERfTkFORF9TSEFSUFNMKQkJKz0gc2hhcnBzbC5vCitvYmotJChDT05GSUdfTVREX05BTkRfVFM3MjUwKQkJKz0gdHM3MjUwLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9OQU5EU0lNKQkJKz0gbmFuZHNpbS5vCitvYmotJChDT05GSUdfTVREX05BTkRfQ1M1NTNYKQkJKz0gY3M1NTN4X25hbmQubworb2JqLSQoQ09ORklHX01URF9OQU5EX05ERkMpCQkrPSBuZGZjLm8KIAogbmFuZC1vYmpzID0gbmFuZF9iYXNlLm8gbmFuZF9iYnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYyBiL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4OTdkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiAgZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgSm9uYXRoYW4gTWNEb3dlbGwgPG5vb2RsZXNAZWFydGgubGk+CisgKgorICogIERlcml2ZWQgZnJvbSBkcml2ZXJzL210ZC90b3RvLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBPdmVydmlldzoKKyAqICAgVGhpcyBpcyBhIGRldmljZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGRldmljZSBmb3VuZCBvbiB0aGUKKyAqICAgQW1zdHJhZCBFMyAoRGVsdGEpLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC1hbXMtZGVsdGEuaD4KKworLyoKKyAqIE1URCBzdHJ1Y3R1cmUgZm9yIEUzIChEZWx0YSkKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqYW1zX2RlbHRhX210ZCA9IE5VTEw7CisKKyNkZWZpbmUgTkFORF9NQVNLIChBTVNfREVMVEFfTEFUQ0gyX05BTkRfTlJFIHwgQU1TX0RFTFRBX0xBVENIMl9OQU5EX05XRSB8IEFNU19ERUxUQV9MQVRDSDJfTkFORF9DTEUgfCBBTVNfREVMVEFfTEFUQ0gyX05BTkRfQUxFIHwgQU1TX0RFTFRBX0xBVENIMl9OQU5EX05DRSB8IEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV1ApCisKKy8qCisgKiBEZWZpbmUgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlcworICovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0geworCXsgLm5hbWUJCT0gIktlcm5lbCIsCisJICAub2Zmc2V0CT0gMCwKKwkgIC5zaXplCQk9IDMgKiBTWl8xTSArIFNaXzUxMksgfSwKKwl7IC5uYW1lCQk9ICJ1LWJvb3QiLAorCSAgLm9mZnNldAk9IDMgKiBTWl8xTSArIFNaXzUxMkssCisJICAuc2l6ZQkJPSBTWl8yNTZLIH0sCisJeyAubmFtZQkJPSAidS1ib290IHBhcmFtcyIsCisJICAub2Zmc2V0CT0gMyAqIFNaXzFNICsgU1pfNTEySyArIFNaXzI1NkssCisJICAuc2l6ZQkJPSBTWl8yNTZLIH0sCisJeyAubmFtZQkJPSAiQW1zdHJhZCBMRFIiLAorCSAgLm9mZnNldAk9IDQgKiBTWl8xTSwKKwkgIC5zaXplCQk9IFNaXzI1NksgfSwKKwl7IC5uYW1lCQk9ICJGaWxlIHN5c3RlbSIsCisJICAub2Zmc2V0CT0gNCAqIFNaXzFNICsgMSAqIFNaXzI1NkssCisJICAuc2l6ZQkJPSAyNyAqIFNaXzFNIH0sCisJeyAubmFtZQkJPSAiUEJMIHJlc2VydmVkIiwKKwkgIC5vZmZzZXQJPSAzMiAqIFNaXzFNIC0gMyAqIFNaXzI1NkssCisJICAuc2l6ZQkJPSAgMyAqIFNaXzI1NksgfSwKK307CisKK3N0YXRpYyB2b2lkIGFtc19kZWx0YV93cml0ZV9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgYnl0ZSkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJb21hcF93cml0ZXcoMCwgKE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fSU9fQ05UTCkpOworCW9tYXBfd3JpdGV3KGJ5dGUsIHRoaXMtPklPX0FERFJfVyk7CisJYW1zX2RlbHRhX2xhdGNoMl93cml0ZShBTVNfREVMVEFfTEFUQ0gyX05BTkRfTldFLCAwKTsKKwluZGVsYXkoNDApOworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9OQU5EX05XRSwKKwkJCSAgICAgICBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTldFKTsKK30KKworc3RhdGljIHVfY2hhciBhbXNfZGVsdGFfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXVfY2hhciByZXM7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9OQU5EX05SRSwgMCk7CisJbmRlbGF5KDQwKTsKKwlvbWFwX3dyaXRldyh+MCwgKE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fSU9fQ05UTCkpOworCXJlcyA9IG9tYXBfcmVhZHcodGhpcy0+SU9fQUREUl9SKTsKKwlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTkFORF9OUkUsCisJCQkgICAgICAgQU1TX0RFTFRBX0xBVENIMl9OQU5EX05SRSk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBhbXNfZGVsdGFfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwKKwkJCQlpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpPTA7IGk8bGVuOyBpKyspCisJCWFtc19kZWx0YV93cml0ZV9ieXRlKG10ZCwgYnVmW2ldKTsKK30KKworc3RhdGljIHZvaWQgYW1zX2RlbHRhX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPGxlbjsgaSsrKQorCQlidWZbaV0gPSBhbXNfZGVsdGFfcmVhZF9ieXRlKG10ZCk7Cit9CisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLAorCQkJCWludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTxsZW47IGkrKykKKwkJaWYgKGJ1ZltpXSAhPSBhbXNfZGVsdGFfcmVhZF9ieXRlKG10ZCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisvKgorICogQ29tbWFuZCBjb250cm9sIGZ1bmN0aW9uCisgKgorICogY3RybDoKKyAqIE5BTkRfTkNFOiBiaXQgMCAtPiBiaXQgMgorICogTkFORF9DTEU6IGJpdCAxIC0+IGJpdCA3CisgKiBOQU5EX0FMRTogYml0IDIgLT4gYml0IDYKKyAqLworc3RhdGljIHZvaWQgYW1zX2RlbHRhX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQl1bnNpZ25lZCBpbnQgY3RybCkKK3sKKworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl1bnNpZ25lZCBsb25nIGJpdHM7CisKKwkJYml0cyA9ICh+Y3RybCAmIE5BTkRfTkNFKSA8PCAyOworCQliaXRzIHw9IChjdHJsICYgTkFORF9DTEUpIDw8IDc7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0FMRSkgPDwgNjsKKworCQlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKDB4QzIsIGJpdHMpOworCX0KKworCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJYW1zX2RlbHRhX3dyaXRlX2J5dGUobXRkLCBjbWQpOworfQorCitzdGF0aWMgaW50IGFtc19kZWx0YV9uYW5kX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBvbWFwX2dldF9ncGlvX2RhdGFpbihBTVNfREVMVEFfR1BJT19QSU5fTkFORF9SQik7Cit9CisKKy8qCisgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKKyAqLworc3RhdGljIGludCBfX2luaXQgYW1zX2RlbHRhX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOworCWludCBlcnIgPSAwOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCisJYW1zX2RlbHRhX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKworCQkJCXNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbXNfZGVsdGFfbXRkKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gYWxsb2NhdGUgRTMgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhbXNfZGVsdGFfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmYW1zX2RlbHRhX210ZFsxXSk7CisKKwkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KKwltZW1zZXQoYW1zX2RlbHRhX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOworCisJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KKwlhbXNfZGVsdGFfbXRkLT5wcml2ID0gdGhpczsKKworCS8qIFNldCBhZGRyZXNzIG9mIE5BTkQgSU8gbGluZXMgKi8KKwl0aGlzLT5JT19BRERSX1IgPSAoT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19JTlBVVF9MQVRDSCk7CisJdGhpcy0+SU9fQUREUl9XID0gKE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fT1VUUFVUKTsKKwl0aGlzLT5yZWFkX2J5dGUgPSBhbXNfZGVsdGFfcmVhZF9ieXRlOworCXRoaXMtPndyaXRlX2J1ZiA9IGFtc19kZWx0YV93cml0ZV9idWY7CisJdGhpcy0+cmVhZF9idWYgPSBhbXNfZGVsdGFfcmVhZF9idWY7CisJdGhpcy0+dmVyaWZ5X2J1ZiA9IGFtc19kZWx0YV92ZXJpZnlfYnVmOworCXRoaXMtPmNtZF9jdHJsID0gYW1zX2RlbHRhX2h3Y29udHJvbDsKKwlpZiAoIW9tYXBfcmVxdWVzdF9ncGlvKEFNU19ERUxUQV9HUElPX1BJTl9OQU5EX1JCKSkgeworCQl0aGlzLT5kZXZfcmVhZHkgPSBhbXNfZGVsdGFfbmFuZF9yZWFkeTsKKwl9IGVsc2UgeworCQl0aGlzLT5kZXZfcmVhZHkgPSBOVUxMOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNvdWxkbid0IHJlcXVlc3QgZ3BpbyBmb3IgRGVsdGEgTkFORCByZWFkeS5cbiIpOworCX0KKwkvKiAyNSB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KKwl0aGlzLT5jaGlwX2RlbGF5ID0gMzA7CisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19TT0ZUOworCisJLyogU2V0IGNoaXAgZW5hYmxlZCwgYnV0ICAqLworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoTkFORF9NQVNLLCBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTlJFIHwKKwkJCQkJICBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTldFIHwKKwkJCQkJICBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTkNFIHwKKwkJCQkJICBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTldQKTsKKworCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCWlmIChuYW5kX3NjYW4oYW1zX2RlbHRhX210ZCwgMSkpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dF9tdGQ7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIHBhcnRpdGlvbnMgKi8KKwlhZGRfbXRkX3BhcnRpdGlvbnMoYW1zX2RlbHRhX210ZCwgcGFydGl0aW9uX2luZm8sCisJCQkgICBBUlJBWV9TSVpFKHBhcnRpdGlvbl9pbmZvKSk7CisKKwlnb3RvIG91dDsKKworIG91dF9tdGQ6CisJa2ZyZWUoYW1zX2RlbHRhX210ZCk7Cisgb3V0OgorCXJldHVybiBlcnI7Cit9CisKK21vZHVsZV9pbml0KGFtc19kZWx0YV9pbml0KTsKKworLyoKKyAqIENsZWFuIHVwIHJvdXRpbmUKKyAqLworc3RhdGljIHZvaWQgX19leGl0IGFtc19kZWx0YV9jbGVhbnVwKHZvaWQpCit7CisJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCisJbmFuZF9yZWxlYXNlKGFtc19kZWx0YV9tdGQpOworCisJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlrZnJlZShhbXNfZGVsdGFfbXRkKTsKK30KK21vZHVsZV9leGl0KGFtc19kZWx0YV9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSm9uYXRoYW4gTWNEb3dlbGwgPG5vb2RsZXNAZWFydGgubGk+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdsdWUgbGF5ZXIgZm9yIE5BTkQgZmxhc2ggb24gQW1zdHJhZCBFMyAoRGVsdGEpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKaW5kZXggYmRlMzU1MC4uMzEyMjgzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KQEAgLTM4LDIyICszOSwyMSBAQAogICovCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICphdTE1NTBfbXRkID0gTlVMTDsKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnBfbmFuZDsKLXN0YXRpYyBpbnQgbmFuZF93aWR0aCA9IDE7IC8qIGRlZmF1bHQgeDgqLworc3RhdGljIGludCBuYW5kX3dpZHRoID0gMTsJLyogZGVmYXVsdCB4OCAqLworc3RhdGljIHZvaWQgKCphdTE1NTBfd3JpdGVfYnl0ZSkoc3RydWN0IG10ZF9pbmZvICosIHVfY2hhcik7CiAKIC8qCiAgKiBEZWZpbmUgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0gewogCXsKLQkJLm5hbWUgCT0gIk5BTkQgRlMgMCIsCi0JICAJLm9mZnNldCA9IDAsCi0JICAJLnNpemUgCT0gOCoxMDI0KjEwMjQKLQl9LAorCSAubmFtZSA9ICJOQU5EIEZTIDAiLAorCSAub2Zmc2V0ID0gMCwKKwkgLnNpemUgPSA4ICogMTAyNCAqIDEwMjR9LAogCXsKLQkJLm5hbWUgCT0gIk5BTkQgRlMgMSIsCi0JCS5vZmZzZXQgPSAgTVREUEFSVF9PRlNfQVBQRU5ELAotIAkJLnNpemUgCT0gICAgTVREUEFSVF9TSVpfRlVMTAotCX0KKwkgLm5hbWUgPSAiTkFORCBGUyAxIiwKKwkgLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMfQogfTsKIAogLyoqCkBAIC0xMzAsMjEgKzEzMCw2IEBACiB9CiAKIC8qKgotICogYXVfd3JpdGVfd29yZCAtICB3cml0ZSBvbmUgd29yZCB0byB0aGUgY2hpcAotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB3b3JkOglkYXRhIHdvcmQgdG8gd3JpdGUKLSAqCi0gKiAgd3JpdGUgZnVuY3Rpb24gZm9yIDE2Yml0IGJ1c3dpdGggd2l0aG91dAotICogZW5kaWFuZXNzIGNvbnZlcnNpb24KLSAqLwotc3RhdGljIHZvaWQgYXVfd3JpdGVfd29yZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdTE2IHdvcmQpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl3cml0ZXcod29yZCwgdGhpcy0+SU9fQUREUl9XKTsKLQlhdV9zeW5jKCk7Ci19Ci0KLS8qKgogICogYXVfd3JpdGVfYnVmIC0gIHdyaXRlIGJ1ZmZlciB0byBjaGlwCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQGJ1ZjoJZGF0YSBidWZmZXIKQEAgLTE1Nyw3ICsxNDIsNyBAQAogCWludCBpOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQl3cml0ZWIoYnVmW2ldLCB0aGlzLT5JT19BRERSX1cpOwogCQlhdV9zeW5jKCk7CiAJfQpAQCAtMTc2LDcgKzE2MSw3IEBACiAJaW50IGk7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAotCWZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCWJ1ZltpXSA9IHJlYWRiKHRoaXMtPklPX0FERFJfUik7CiAJCWF1X3N5bmMoKTsKIAl9CkBAIC0xOTUsNyArMTgwLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJaWYgKGJ1ZltpXSAhPSByZWFkYih0aGlzLT5JT19BRERSX1IpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWF1X3N5bmMoKTsKQEAgLTIxOSw3ICsyMDQsNyBAQAogCXUxNiAqcCA9ICh1MTYgKikgYnVmOwogCWxlbiA+Pj0gMTsKIAotCWZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCXdyaXRldyhwW2ldLCB0aGlzLT5JT19BRERSX1cpOwogCQlhdV9zeW5jKCk7CiAJfQpAQCAtMjQxLDcgKzIyNiw3IEBACiAJdTE2ICpwID0gKHUxNiAqKSBidWY7CiAJbGVuID4+PSAxOwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJcFtpXSA9IHJlYWR3KHRoaXMtPklPX0FERFJfUik7CiAJCWF1X3N5bmMoKTsKIAl9CkBAIC0yNjIsNyArMjQ3LDcgQEAKIAl1MTYgKnAgPSAodTE2ICopIGJ1ZjsKIAlsZW4gPj49IDE7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlpZiAocFtpXSAhPSByZWFkdyh0aGlzLT5JT19BRERSX1IpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWF1X3N5bmMoKTsKQEAgLTI3MCwzMiArMjU1LDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBsb3cgKi8KKyNkZWZpbmUgTkFORF9DVExfU0VUTkNFCQkxCisvKiBEZXNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBoaWdoICovCisjZGVmaW5lIE5BTkRfQ1RMX0NMUk5DRQkJMgorLyogU2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoIGJ5IHNldHRpbmcgQ0xFIHRvIGhpZ2ggKi8KKyNkZWZpbmUgTkFORF9DVExfU0VUQ0xFCQkzCisvKiBEZXNlbGVjdCB0aGUgY29tbWFuZCBsYXRjaCBieSBzZXR0aW5nIENMRSB0byBsb3cgKi8KKyNkZWZpbmUgTkFORF9DVExfQ0xSQ0xFCQk0CisvKiBTZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggYnkgc2V0dGluZyBBTEUgdG8gaGlnaCAqLworI2RlZmluZSBOQU5EX0NUTF9TRVRBTEUJCTUKKy8qIERlc2VsZWN0IHRoZSBhZGRyZXNzIGxhdGNoIGJ5IHNldHRpbmcgQUxFIHRvIGxvdyAqLworI2RlZmluZSBOQU5EX0NUTF9DTFJBTEUJCTYKIAogc3RhdGljIHZvaWQgYXUxNTUwX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCi0Jc3dpdGNoKGNtZCl7CisJc3dpdGNoIChjbWQpIHsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOiB0aGlzLT5JT19BRERSX1cgPSBwX25hbmQgKyBNRU1fU1ROQU5EX0NNRDsgYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6IHRoaXMtPklPX0FERFJfVyA9IHBfbmFuZCArIE1FTV9TVE5BTkRfREFUQTsgYnJlYWs7CisJY2FzZSBOQU5EX0NUTF9TRVRDTEU6CisJCXRoaXMtPklPX0FERFJfVyA9IHBfbmFuZCArIE1FTV9TVE5BTkRfQ01EOworCQlicmVhazsKIAotCWNhc2UgTkFORF9DVExfU0VUQUxFOiB0aGlzLT5JT19BRERSX1cgPSBwX25hbmQgKyBNRU1fU1ROQU5EX0FERFI7IGJyZWFrOworCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgorCQl0aGlzLT5JT19BRERSX1cgPSBwX25hbmQgKyBNRU1fU1ROQU5EX0RBVEE7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NUTF9TRVRBTEU6CisJCXRoaXMtPklPX0FERFJfVyA9IHBfbmFuZCArIE1FTV9TVE5BTkRfQUREUjsKKwkJYnJlYWs7CisKIAljYXNlIE5BTkRfQ1RMX0NMUkFMRToKIAkJdGhpcy0+SU9fQUREUl9XID0gcF9uYW5kICsgTUVNX1NUTkFORF9EQVRBOwotCQkvKiBGSVhNRTogTm9ib2R5IGtub3dzIHdoeSB0aGlzIGlzIG5lY2NlY2FyeSwKKwkJLyogRklYTUU6IE5vYm9keSBrbm93cyB3aHkgdGhpcyBpcyBuZWNlc3NhcnksCiAJCSAqIGJ1dCBpdCB3b3JrcyBvbmx5IHRoYXQgd2F5ICovCiAJCXVkZWxheSgxKTsKIAkJYnJlYWs7CiAKIAljYXNlIE5BTkRfQ1RMX1NFVE5DRToKIAkJLyogYXNzZXJ0IChmb3JjZSBhc3NlcnQpIGNoaXAgZW5hYmxlICovCi0JCWF1X3dyaXRlbCgoMTw8KDQrTkFORF9DUykpICwgTUVNX1NUTkRDVEwpOyBicmVhazsKKwkJYXVfd3JpdGVsKCgxIDw8ICg0ICsgTkFORF9DUykpLCBNRU1fU1RORENUTCk7CiAJCWJyZWFrOwogCiAJY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0gCQkvKiBkZWFzc2VydCBjaGlwIGVuYWJsZSAqLwotCQlhdV93cml0ZWwoMCwgTUVNX1NUTkRDVEwpOyBicmVhazsKKwkJLyogZGVhc3NlcnQgY2hpcCBlbmFibGUgKi8KKwkJYXVfd3JpdGVsKDAsIE1FTV9TVE5EQ1RMKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zMTIsNjkgKzMxNywyMDAgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGF1MTU1MF9zZWxlY3RfY2hpcCAtIGNvbnRyb2wgLUNFIGxpbmUKKyAqCUZvcmJpZCBkcml2aW5nIC1DRSBtYW51YWxseSBwZXJtaXR0aW5nIHRoZSBOQU5EIGNvbnRyb2xsZXIgdG8gZG8gdGhpcy4KKyAqCUtlZXBpbmcgLUNFIGFzc2VydGVkIGR1cmluZyB0aGUgd2hvbGUgc2VjdG9yIHJlYWRzIGludGVyZmVyZXMgd2l0aCB0aGUKKyAqCU5PUiBmbGFzaCBhbmQgUENNQ0lBIGRyaXZlcnMgYXMgaXQgY2F1c2VzIGNvbnRlbnRpb24gb24gdGhlIHN0YXRpYyBidXMuCisgKglXZSBvbmx5IGhhdmUgdG8gaG9sZCAtQ0UgbG93IGZvciB0aGUgTkFORCByZWFkIGNvbW1hbmRzIHNpbmNlIHRoZSBmbGFzaAorICoJY2hpcCBuZWVkcyBpdCB0byBiZSBhc3NlcnRlZCBkdXJpbmcgY2hpcCBub3QgcmVhZHkgdGltZSBidXQgdGhlIE5BTkQKKyAqCWNvbnRyb2xsZXIga2VlcHMgaXQgcmVsZWFzZWQuCisgKgorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgljaGlwbnVtYmVyIHRvIHNlbGVjdCwgLTEgZm9yIGRlc2VsZWN0CisgKi8KK3N0YXRpYyB2b2lkIGF1MTU1MF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCit7Cit9CisKKy8qKgorICogYXUxNTUwX2NvbW1hbmQgLSBTZW5kIGNvbW1hbmQgdG8gTkFORCBkZXZpY2UKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAY29tbWFuZDoJdGhlIGNvbW1hbmQgdG8gYmUgc2VudAorICogQGNvbHVtbjoJdGhlIGNvbHVtbiBhZGRyZXNzIGZvciB0aGlzIGNvbW1hbmQsIC0xIGlmIG5vbmUKKyAqIEBwYWdlX2FkZHI6CXRoZSBwYWdlIGFkZHJlc3MgZm9yIHRoaXMgY29tbWFuZCwgLTEgaWYgbm9uZQorICovCitzdGF0aWMgdm9pZCBhdTE1NTBfY29tbWFuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3sKKwlyZWdpc3RlciBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCBjZV9vdmVycmlkZSA9IDAsIGk7CisJdWxvbmcgZmxhZ3M7CisKKwkvKiBCZWdpbiBjb21tYW5kIGxhdGNoIGN5Y2xlICovCisJYXUxNTUwX2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7CisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIGNvbW1hbmQgdG8gdGhlIGRldmljZS4KKwkgKi8KKwlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9TRVFJTikgeworCQlpbnQgcmVhZGNtZDsKKworCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7CisJCQkvKiBPT0IgYXJlYSAqLworCQkJY29sdW1uIC09IG10ZC0+d3JpdGVzaXplOworCQkJcmVhZGNtZCA9IE5BTkRfQ01EX1JFQURPT0I7CisJCX0gZWxzZSBpZiAoY29sdW1uIDwgMjU2KSB7CisJCQkvKiBGaXJzdCAyNTYgYnl0ZXMgLS0+IFJFQUQwICovCisJCQlyZWFkY21kID0gTkFORF9DTURfUkVBRDA7CisJCX0gZWxzZSB7CisJCQljb2x1bW4gLT0gMjU2OworCQkJcmVhZGNtZCA9IE5BTkRfQ01EX1JFQUQxOworCQl9CisJCWF1MTU1MF93cml0ZV9ieXRlKG10ZCwgcmVhZGNtZCk7CisJfQorCWF1MTU1MF93cml0ZV9ieXRlKG10ZCwgY29tbWFuZCk7CisKKwkvKiBTZXQgQUxFIGFuZCBjbGVhciBDTEUgdG8gc3RhcnQgYWRkcmVzcyBjeWNsZSAqLworCWF1MTU1MF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOworCisJaWYgKGNvbHVtbiAhPSAtMSB8fCBwYWdlX2FkZHIgIT0gLTEpIHsKKwkJYXUxNTUwX2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVEFMRSk7CisKKwkJLyogU2VyaWFsbHkgaW5wdXQgYWRkcmVzcyAqLworCQlpZiAoY29sdW1uICE9IC0xKSB7CisJCQkvKiBBZGp1c3QgY29sdW1ucyBmb3IgMTYgYml0IGJ1c3dpZHRoICovCisJCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCisJCQkJY29sdW1uID4+PSAxOworCQkJYXUxNTUwX3dyaXRlX2J5dGUobXRkLCBjb2x1bW4pOworCQl9CisJCWlmIChwYWdlX2FkZHIgIT0gLTEpIHsKKwkJCWF1MTU1MF93cml0ZV9ieXRlKG10ZCwgKHU4KShwYWdlX2FkZHIgJiAweGZmKSk7CisKKwkJCWlmIChjb21tYW5kID09IE5BTkRfQ01EX1JFQUQwIHx8CisJCQkgICAgY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFEMSB8fAorCQkJICAgIGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRE9PQikgeworCQkJCS8qCisJCQkJICogTkFORCBjb250cm9sbGVyIHdpbGwgcmVsZWFzZSAtQ0UgYWZ0ZXIKKwkJCQkgKiB0aGUgbGFzdCBhZGRyZXNzIGJ5dGUgaXMgd3JpdHRlbiwgc28gd2UnbGwKKwkJCQkgKiBoYXZlIHRvIGZvcmNpYmx5IGFzc2VydCBpdC4gTm8gaW50ZXJydXB0cworCQkJCSAqIGFyZSBhbGxvd2VkIHdoaWxlIHdlIGRvIHRoaXMgYXMgd2UgZG9uJ3QKKwkJCQkgKiB3YW50IHRoZSBOT1IgZmxhc2ggb3IgUENNQ0lBIGRyaXZlcnMgdG8KKwkJCQkgKiBzdGVhbCBvdXIgcHJlY2lvdXMgYnl0ZXMgb2YgZGF0YS4uLgorCQkJCSAqLworCQkJCWNlX292ZXJyaWRlID0gMTsKKwkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQkJYXUxNTUwX2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVE5DRSk7CisJCQl9CisKKwkJCWF1MTU1MF93cml0ZV9ieXRlKG10ZCwgKHU4KShwYWdlX2FkZHIgPj4gOCkpOworCisJCQkvKiBPbmUgbW9yZSBhZGRyZXNzIGN5Y2xlIGZvciBkZXZpY2VzID4gMzJNaUIgKi8KKwkJCWlmICh0aGlzLT5jaGlwc2l6ZSA+ICgzMiA8PCAyMCkpCisJCQkJYXUxNTUwX3dyaXRlX2J5dGUobXRkLCAodTgpKChwYWdlX2FkZHIgPj4gMTYpICYgMHgwZikpOworCQl9CisJCS8qIExhdGNoIGluIGFkZHJlc3MgKi8KKwkJYXUxNTUwX2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkFMRSk7CisJfQorCisJLyoKKwkgKiBQcm9ncmFtIGFuZCBlcmFzZSBoYXZlIHRoZWlyIG93biBidXN5IGhhbmRsZXJzLgorCSAqIFN0YXR1cyBhbmQgc2VxdWVudGlhbCBpbiBuZWVkIG5vIGRlbGF5LgorCSAqLworCXN3aXRjaCAoY29tbWFuZCkgeworCisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwljYXNlIE5BTkRfQ01EX0VSQVNFMToKKwljYXNlIE5BTkRfQ01EX0VSQVNFMjoKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCQlyZXR1cm47CisKKwljYXNlIE5BTkRfQ01EX1JFU0VUOgorCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfUkVBRDA6CisJY2FzZSBOQU5EX0NNRF9SRUFEMToKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJCS8qIENoZWNrIGlmIHdlJ3JlIHJlYWxseSBkcml2aW5nIC1DRSBsb3cgKGp1c3QgaW4gY2FzZSkgKi8KKwkJaWYgKHVubGlrZWx5KCFjZV9vdmVycmlkZSkpCisJCQlicmVhazsKKworCQkvKiBBcHBseSBhIHNob3J0IGRlbGF5IGFsd2F5cyB0byBlbnN1cmUgdGhhdCB3ZSBkbyB3YWl0IHRXQi4gKi8KKwkJbmRlbGF5KDEwMCk7CisJCS8qIFdhaXQgZm9yIGEgY2hpcCB0byBiZWNvbWUgcmVhZHkuLi4gKi8KKwkJZm9yIChpID0gdGhpcy0+Y2hpcF9kZWxheTsgIXRoaXMtPmRldl9yZWFkeShtdGQpICYmIGkgPiAwOyAtLWkpCisJCQl1ZGVsYXkoMSk7CisKKwkJLyogUmVsZWFzZSAtQ0UgYW5kIHJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLworCQlhdTE1NTBfaHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSTkNFKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm47CisJfQorCS8qIEFwcGx5IHRoaXMgc2hvcnQgZGVsYXkgYWx3YXlzIHRvIGVuc3VyZSB0aGF0IHdlIGRvIHdhaXQgdFdCLiAqLworCW5kZWxheSgxMDApOworCisJd2hpbGUoIXRoaXMtPmRldl9yZWFkeShtdGQpKTsKK30KKworCiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLWludCBfX2luaXQgYXUxeHh4X25hbmRfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGF1MXh4eF9uYW5kX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwotCXUxNiBib290X3N3YXBib290ID0gMDsgLyogZGVmYXVsdCB2YWx1ZSAqLworCXUxNiBib290X3N3YXBib290ID0gMDsJLyogZGVmYXVsdCB2YWx1ZSAqLwogCWludCByZXR2YWw7CiAJdTMyIG1lbV9zdGFkZHI7CiAJdTMyIG5hbmRfcGh5czsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLwotCWF1MTU1MF9tdGQgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArCi0JCQlzaXplb2YgKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlhdTE1NTBfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhdTE1NTBfbXRkKSB7Ci0JCXByaW50ayAoIlVuYWJsZSB0byBhbGxvY2F0ZSBOQU5EIE1URCBkZXYgc3RydWN0dXJlLlxuIik7CisJCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIE5BTkQgTVREIGRldiBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmYXUxNTUwX210ZFsxXSk7CisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZhdTE1NTBfbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSBhdTE1NTBfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KGF1MTU1MF9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKIAogCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCiAJYXUxNTUwX210ZC0+cHJpdiA9IHRoaXM7CisJYXUxNTUwX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCi0JLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JYXVfd3JpdGVsKGF1X3JlYWRsKE1FTV9TVE5EQ1RMKSAmIH4oMTw8OCksIE1FTV9TVE5EQ1RMKTsKLQotCS8qIGRpc2FibGUgTkFORCBib290ICovCi0JYXVfd3JpdGVsKGF1X3JlYWRsKE1FTV9TVE5EQ1RMKSAmIH4oMTw8MCksIE1FTV9TVE5EQ1RMKTsKKwkvKiBNRU1fU1RORENUTDogZGlzYWJsZSBpbnRzLCBkaXNhYmxlIG5hbmQgYm9vdCAqLworCWF1X3dyaXRlbCgwLCBNRU1fU1RORENUTCk7CiAKICNpZmRlZiBDT05GSUdfTUlQU19QQjE1NTAKIAkvKiBzZXQgZ3BpbzIwNiBoaWdoICovCi0JYXVfd3JpdGVsKGF1X3JlYWRsKEdQSU8yX0RJUikgJiB+KDE8PDYpLCBHUElPMl9ESVIpOworCWF1X3dyaXRlbChhdV9yZWFkbChHUElPMl9ESVIpICYgfigxIDw8IDYpLCBHUElPMl9ESVIpOwogCi0JYm9vdF9zd2FwYm9vdCA9IChhdV9yZWFkbChNRU1fU1RTVEFUKSAmICgweDc8PDEpKSB8Ci0JCSgoYmNzci0+c3RhdHVzID4+IDYpICAmIDB4MSk7CisJYm9vdF9zd2FwYm9vdCA9IChhdV9yZWFkbChNRU1fU1RTVEFUKSAmICgweDcgPDwgMSkpIHwgKChiY3NyLT5zdGF0dXMgPj4gNikgJiAweDEpOwogCXN3aXRjaCAoYm9vdF9zd2FwYm9vdCkgewotCQljYXNlIDA6Ci0JCWNhc2UgMjoKLQkJY2FzZSA4OgotCQljYXNlIDB4QzoKLQkJY2FzZSAweEQ6Ci0JCQkvKiB4MTYgTkFORCBGbGFzaCAqLwotCQkJbmFuZF93aWR0aCA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQljYXNlIDk6Ci0JCWNhc2UgMzoKLQkJY2FzZSAweEU6Ci0JCWNhc2UgMHhGOgotCQkJLyogeDggTkFORCBGbGFzaCAqLwotCQkJbmFuZF93aWR0aCA9IDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50aygiUGIxNTUwIE5BTkQ6IGJhZCBib290OnN3YXBcbiIpOwotCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0bWVtOworCWNhc2UgMDoKKwljYXNlIDI6CisJY2FzZSA4OgorCWNhc2UgMHhDOgorCWNhc2UgMHhEOgorCQkvKiB4MTYgTkFORCBGbGFzaCAqLworCQluYW5kX3dpZHRoID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCWNhc2UgOToKKwljYXNlIDM6CisJY2FzZSAweEU6CisJY2FzZSAweEY6CisJCS8qIHg4IE5BTkQgRmxhc2ggKi8KKwkJbmFuZF93aWR0aCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiUGIxNTUwIE5BTkQ6IGJhZCBib290OnN3YXBcbiIpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIG91dG1lbTsKIAl9CiAjZW5kaWYKIApAQCAtNDI0LDIxICs1NjAsMjIgQEAKIAogCS8qIG1ha2UgY29udHJvbGxlciBhbmQgTVREIGFncmVlICovCiAJaWYgKE5BTkRfQ1MgPT0gMCkKLQkJbmFuZF93aWR0aCA9IGF1X3JlYWRsKE1FTV9TVENGRzApICYgKDE8PDIyKTsKKwkJbmFuZF93aWR0aCA9IGF1X3JlYWRsKE1FTV9TVENGRzApICYgKDEgPDwgMjIpOwogCWlmIChOQU5EX0NTID09IDEpCi0JCW5hbmRfd2lkdGggPSBhdV9yZWFkbChNRU1fU1RDRkcxKSAmICgxPDwyMik7CisJCW5hbmRfd2lkdGggPSBhdV9yZWFkbChNRU1fU1RDRkcxKSAmICgxIDw8IDIyKTsKIAlpZiAoTkFORF9DUyA9PSAyKQotCQluYW5kX3dpZHRoID0gYXVfcmVhZGwoTUVNX1NUQ0ZHMikgJiAoMTw8MjIpOworCQluYW5kX3dpZHRoID0gYXVfcmVhZGwoTUVNX1NUQ0ZHMikgJiAoMSA8PCAyMik7CiAJaWYgKE5BTkRfQ1MgPT0gMykKLQkJbmFuZF93aWR0aCA9IGF1X3JlYWRsKE1FTV9TVENGRzMpICYgKDE8PDIyKTsKLQorCQluYW5kX3dpZHRoID0gYXVfcmVhZGwoTUVNX1NUQ0ZHMykgJiAoMSA8PCAyMik7CiAKIAkvKiBTZXQgYWRkcmVzcyBvZiBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9uICovCi0JdGhpcy0+aHdjb250cm9sID0gYXUxNTUwX2h3Y29udHJvbDsKIAl0aGlzLT5kZXZfcmVhZHkgPSBhdTE1NTBfZGV2aWNlX3JlYWR5OworCXRoaXMtPnNlbGVjdF9jaGlwID0gYXUxNTUwX3NlbGVjdF9jaGlwOworCXRoaXMtPmNtZGZ1bmMgPSBhdTE1NTBfY29tbWFuZDsKKwogCS8qIDMwIHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwogCXRoaXMtPmNoaXBfZGVsYXkgPSAzMDsKLQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CiAKIAl0aGlzLT5vcHRpb25zID0gTkFORF9OT19BVVRPSU5DUjsKIApAQCAtNDQ2LDE1ICs1ODMsMTQgQEAKIAkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX0JVU1dJRFRIXzE2OwogCiAJdGhpcy0+cmVhZF9ieXRlID0gKCFuYW5kX3dpZHRoKSA/IGF1X3JlYWRfYnl0ZTE2IDogYXVfcmVhZF9ieXRlOwotCXRoaXMtPndyaXRlX2J5dGUgPSAoIW5hbmRfd2lkdGgpID8gYXVfd3JpdGVfYnl0ZTE2IDogYXVfd3JpdGVfYnl0ZTsKLQl0aGlzLT53cml0ZV93b3JkID0gYXVfd3JpdGVfd29yZDsKKwlhdTE1NTBfd3JpdGVfYnl0ZSA9ICghbmFuZF93aWR0aCkgPyBhdV93cml0ZV9ieXRlMTYgOiBhdV93cml0ZV9ieXRlOwogCXRoaXMtPnJlYWRfd29yZCA9IGF1X3JlYWRfd29yZDsKIAl0aGlzLT53cml0ZV9idWYgPSAoIW5hbmRfd2lkdGgpID8gYXVfd3JpdGVfYnVmMTYgOiBhdV93cml0ZV9idWY7CiAJdGhpcy0+cmVhZF9idWYgPSAoIW5hbmRfd2lkdGgpID8gYXVfcmVhZF9idWYxNiA6IGF1X3JlYWRfYnVmOwogCXRoaXMtPnZlcmlmeV9idWYgPSAoIW5hbmRfd2lkdGgpID8gYXVfdmVyaWZ5X2J1ZjE2IDogYXVfdmVyaWZ5X2J1ZjsKIAogCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4gKGF1MTU1MF9tdGQsIDEpKSB7CisJaWYgKG5hbmRfc2NhbihhdTE1NTBfbXRkLCAxKSkgewogCQlyZXR2YWwgPSAtRU5YSU87CiAJCWdvdG8gb3V0aW87CiAJfQpAQCAtNDY1LDEwICs2MDEsMTAgQEAKIAlyZXR1cm4gMDsKIAogIG91dGlvOgotCWlvdW5tYXAgKCh2b2lkICopcF9uYW5kKTsKKwlpb3VubWFwKCh2b2lkICopcF9uYW5kKTsKIAogIG91dG1lbToKLQlrZnJlZSAoYXUxNTUwX210ZCk7CisJa2ZyZWUoYXUxNTUwX210ZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNDc3LDIyICs2MTMsMjEgQEAKIC8qCiAgKiBDbGVhbiB1cCByb3V0aW5lCiAgKi8KLSNpZmRlZiBNT0RVTEUKLXN0YXRpYyB2b2lkIF9fZXhpdCBhdTE1NTBfY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdTE1NTBfY2xlYW51cCh2b2lkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAmYXUxNTUwX210ZFsxXTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikmYXUxNTUwX210ZFsxXTsKIAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwotCW5hbmRfcmVsZWFzZSAoYXUxNTUwX210ZCk7CisJbmFuZF9yZWxlYXNlKGF1MTU1MF9tdGQpOwogCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSAoYXUxNTUwX210ZCk7CisJa2ZyZWUoYXUxNTUwX210ZCk7CiAKIAkvKiBVbm1hcCAqLwotCWlvdW5tYXAgKCh2b2lkICopcF9uYW5kKTsKKwlpb3VubWFwKCh2b2lkICopcF9uYW5kKTsKIH0KKwogbW9kdWxlX2V4aXQoYXUxNTUwX2NsZWFudXApOwotI2VuZGlmCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkVtYmVkZGVkIEVkZ2UsIExMQyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jCmluZGV4IGEzYzdmZWEuLmZlOTRhZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jCkBAIC00LDcgKzQsNyBAQAogICogIENvcHlyaWdodCAoYykgMjAwMiBUaG9tYXMgR2xlaXhuZXIgPHRneGxAbGludXRyb25peC5kZT4KICAqCiAgKiAgRGVyaXZlZCBmcm9tIGRyaXZlcnMvbXRkL3NwaWEuYwotICogCSBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20pCisgKgkgQ29weXJpZ2h0IChDKSAyMDAwIFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tKQogICoKICAqICRJZDogYXV0Y3B1MTIuYyx2IDEuMjMgMjAwNS8xMS8wNyAxMToxNDozMCBnbGVpeG5lciBFeHAgJAogICoKQEAgLTQyLDEyICs0Miw3IEBACiAgKiBNVEQgc3RydWN0dXJlIGZvciBBVVRDUFUxMiBib2FyZAogICovCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICphdXRjcHUxMl9tdGQgPSBOVUxMOwotCi1zdGF0aWMgaW50IGF1dGNwdTEyX2lvX2Jhc2UgPSBDUzg5NzEyX1ZJUlRfQkFTRTsKLXN0YXRpYyBpbnQgYXV0Y3B1MTJfZmlvX3BiYXNlID0gQVVUQ1BVMTJfUEhZU19TTUM7Ci1zdGF0aWMgaW50IGF1dGNwdTEyX2Zpb19jdHJsID0gQVVUQ1BVMTJfU01DX1NFTEVDVF9PRkZTRVQ7Ci1zdGF0aWMgaW50IGF1dGNwdTEyX3BlZHIgPSBBVVRDUFUxMl9TTUNfUE9SVF9PRkZTRVQ7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICogYXV0Y3B1MTJfZmlvX2Jhc2U7CitzdGF0aWMgdm9pZCBfX2lvbWVtICphdXRjcHUxMl9maW9fYmFzZTsKIAogLyoKICAqIERlZmluZSBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2VzCkBAIC05NCwxMDggKzg5LDEzMSBAQAogI2RlZmluZSBOVU1fUEFSVElUSU9OUzEyOEsgMgogLyoKICAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCi0qLwotc3RhdGljIHZvaWQgYXV0Y3B1MTJfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQorICoKKyAqCUFMRSBiaXQgNCBhdXRjcHUxMl9wZWRyCisgKglDTEUgYml0IDUgYXV0Y3B1MTJfcGVkcgorICoJTkNFIGJpdCAwIGZpb19jdHJsCisgKgorICovCitzdGF0aWMgdm9pZCBhdXRjcHUxMl9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGN0cmwpCiB7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCXN3aXRjaChjbWQpeworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl2b2lkIF9faW9tZW0gKmFkZHIKKwkJdW5zaWduZWQgY2hhciBiaXRzOwogCi0JCWNhc2UgTkFORF9DVExfU0VUQ0xFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhdXRjcHUxMl9pb19iYXNlICsgYXV0Y3B1MTJfcGVkcikpIHw9ICBBVVRDUFUxMl9TTUNfQ0xFOyBicmVhazsKLQkJY2FzZSBOQU5EX0NUTF9DTFJDTEU6ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKGF1dGNwdTEyX2lvX2Jhc2UgKyBhdXRjcHUxMl9wZWRyKSkgJj0gfkFVVENQVTEyX1NNQ19DTEU7IGJyZWFrOworCQlhZGRyID0gQ1M4OTcxMl9WSVJUX0JBU0UgKyBBVVRDUFUxMl9TTUNfUE9SVF9PRkZTRVQ7CisJCWJpdHMgPSAoY3RybCAmIE5BTkRfQ0xFKSA8PCA0OworCQliaXRzIHw9IChjdHJsICYgTkFORF9BTEUpIDw8IDI7CisJCXdyaXRlYigocmVhZGIoYWRkcikgJiB+MHgzMCkgfCBiaXRzLCBhZGRyKTsKIAotCQljYXNlIE5BTkRfQ1RMX1NFVEFMRTogKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYXV0Y3B1MTJfaW9fYmFzZSArIGF1dGNwdTEyX3BlZHIpKSB8PSAgQVVUQ1BVMTJfU01DX0FMRTsgYnJlYWs7Ci0JCWNhc2UgTkFORF9DVExfQ0xSQUxFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhdXRjcHUxMl9pb19iYXNlICsgYXV0Y3B1MTJfcGVkcikpICY9IH5BVVRDUFUxMl9TTUNfQUxFOyBicmVhazsKLQotCQljYXNlIE5BTkRfQ1RMX1NFVE5DRTogKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYXV0Y3B1MTJfZmlvX2Jhc2UgKyBhdXRjcHUxMl9maW9fY3RybCkpID0gMHgwMTsgYnJlYWs7Ci0JCWNhc2UgTkFORF9DVExfQ0xSTkNFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhdXRjcHUxMl9maW9fYmFzZSArIGF1dGNwdTEyX2Zpb19jdHJsKSkgPSAweDAwOyBicmVhazsKKwkJYWRkciA9IGF1dGNwdTEyX2Zpb19iYXNlICsgQVVUQ1BVMTJfU01DX1NFTEVDVF9PRkZTRVQ7CisJCXdyaXRlYigocmVhZGIoYWRkcikgJiB+MHgxKSB8IChjdHJsICYgTkFORF9OQ0UpLCBhZGRyKTsKIAl9CisKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyk7CiB9CiAKIC8qCi0qCXJlYWQgZGV2aWNlIHJlYWR5IHBpbgotKi8KKyAqCXJlYWQgZGV2aWNlIHJlYWR5IHBpbgorICovCiBpbnQgYXV0Y3B1MTJfZGV2aWNlX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogeworCXZvaWQgX19pb21lbSAqYWRkciA9IENTODk3MTJfVklSVF9CQVNFICsgQVVUQ1BVMTJfU01DX1BPUlRfT0ZGU0VUOwogCi0JcmV0dXJuICggKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYXV0Y3B1MTJfaW9fYmFzZSArIGF1dGNwdTEyX3BlZHIpKSAmIEFVVENQVTEyX1NNQ19SRFkpID8gMSA6IDA7Ci0KKwlyZXR1cm4gcmVhZGIoYWRkcikgJiBBVVRDUFUxMl9TTUNfUkRZOwogfQogCiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLWludCBfX2luaXQgYXV0Y3B1MTJfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGF1dGNwdTEyX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCWludCBlcnIgPSAwOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JYXV0Y3B1MTJfbXRkID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2YgKHN0cnVjdCBuYW5kX2NoaXApLAotCQkJCUdGUF9LRVJORUwpOworCWF1dGNwdTEyX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhdXRjcHUxMl9tdGQpIHsKLQkJcHJpbnRrICgiVW5hYmxlIHRvIGFsbG9jYXRlIEFVVENQVTEyIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKKwkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgQVVUQ1BVMTIgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBtYXAgcGh5c2ljYWwgYWRyZXNzICovCi0JYXV0Y3B1MTJfZmlvX2Jhc2UgPSBpb3JlbWFwKGF1dGNwdTEyX2Zpb19wYmFzZSxTWl8xSyk7Ci0JaWYoIWF1dGNwdTEyX2Zpb19iYXNlKXsKKwlhdXRjcHUxMl9maW9fYmFzZSA9IGlvcmVtYXAoQVVUQ1BVMTJfUEhZU19TTUMsIFNaXzFLKTsKKwlpZiAoIWF1dGNwdTEyX2Zpb19iYXNlKSB7CiAJCXByaW50aygiSW9yZW1hcCBhdXRjcHUxMiBTbWFydE1lZGlhIENhcmQgZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXRfbXRkOwogCX0KIAogCS8qIEdldCBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSAqLwotCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAoJmF1dGNwdTEyX210ZFsxXSk7CisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZhdXRjcHUxMl9tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIGF1dGNwdTEyX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOwotCW1lbXNldCgoY2hhciAqKSB0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOworCW1lbXNldChhdXRjcHUxMl9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKIAogCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCiAJYXV0Y3B1MTJfbXRkLT5wcml2ID0gdGhpczsKKwlhdXRjcHUxMl9tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiBTZXQgYWRkcmVzcyBvZiBOQU5EIElPIGxpbmVzICovCiAJdGhpcy0+SU9fQUREUl9SID0gYXV0Y3B1MTJfZmlvX2Jhc2U7CiAJdGhpcy0+SU9fQUREUl9XID0gYXV0Y3B1MTJfZmlvX2Jhc2U7Ci0JdGhpcy0+aHdjb250cm9sID0gYXV0Y3B1MTJfaHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gYXV0Y3B1MTJfaHdjb250cm9sOwogCXRoaXMtPmRldl9yZWFkeSA9IGF1dGNwdTEyX2RldmljZV9yZWFkeTsKIAkvKiAyMCB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KIAl0aGlzLT5jaGlwX2RlbGF5ID0gMjA7Ci0JdGhpcy0+ZWNjbW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19TT0ZUOwogCiAJLyogRW5hYmxlIHRoZSBmb2xsb3dpbmcgZm9yIGEgZmxhc2ggYmFzZWQgYmFkIGJsb2NrIHRhYmxlICovCiAJLyoKLQl0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUOwotCSovCisJICAgdGhpcy0+b3B0aW9ucyA9IE5BTkRfVVNFX0ZMQVNIX0JCVDsKKwkgKi8KIAl0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUOwogCiAJLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCi0JaWYgKG5hbmRfc2NhbiAoYXV0Y3B1MTJfbXRkLCAxKSkgeworCWlmIChuYW5kX3NjYW4oYXV0Y3B1MTJfbXRkLCAxKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0X2lvcjsKIAl9CiAKIAkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwotCXN3aXRjaChhdXRjcHUxMl9tdGQtPnNpemUpewotCQljYXNlIFNaXzE2TTogYWRkX210ZF9wYXJ0aXRpb25zKGF1dGNwdTEyX210ZCwgcGFydGl0aW9uX2luZm8xNmssIE5VTV9QQVJUSVRJT05TMTZLKTsgYnJlYWs7Ci0JCWNhc2UgU1pfMzJNOiBhZGRfbXRkX3BhcnRpdGlvbnMoYXV0Y3B1MTJfbXRkLCBwYXJ0aXRpb25faW5mbzMyaywgTlVNX1BBUlRJVElPTlMzMkspOyBicmVhazsKLQkJY2FzZSBTWl82NE06IGFkZF9tdGRfcGFydGl0aW9ucyhhdXRjcHUxMl9tdGQsIHBhcnRpdGlvbl9pbmZvNjRrLCBOVU1fUEFSVElUSU9OUzY0Syk7IGJyZWFrOwotCQljYXNlIFNaXzEyOE06IGFkZF9tdGRfcGFydGl0aW9ucyhhdXRjcHUxMl9tdGQsIHBhcnRpdGlvbl9pbmZvMTI4aywgTlVNX1BBUlRJVElPTlMxMjhLKTsgYnJlYWs7Ci0JCWRlZmF1bHQ6IHsKLQkJCXByaW50ayAoIlVuc3VwcG9ydGVkIFNtYXJ0TWVkaWEgZGV2aWNlXG4iKTsKKwlzd2l0Y2ggKGF1dGNwdTEyX210ZC0+c2l6ZSkgeworCQljYXNlIFNaXzE2TToKKwkJCWFkZF9tdGRfcGFydGl0aW9ucyhhdXRjcHUxMl9tdGQsIHBhcnRpdGlvbl9pbmZvMTZrLAorCQkJCQkgICBOVU1fUEFSVElUSU9OUzE2Syk7CisJCQlicmVhazsKKwkJY2FzZSBTWl8zMk06CisJCQlhZGRfbXRkX3BhcnRpdGlvbnMoYXV0Y3B1MTJfbXRkLCBwYXJ0aXRpb25faW5mbzMyaywKKwkJCQkJICAgTlVNX1BBUlRJVElPTlMzMkspOworCQkJYnJlYWs7CisJCWNhc2UgU1pfNjRNOgorCQkJYWRkX210ZF9wYXJ0aXRpb25zKGF1dGNwdTEyX210ZCwgcGFydGl0aW9uX2luZm82NGssCisJCQkJCSAgIE5VTV9QQVJUSVRJT05TNjRLKTsKKwkJCWJyZWFrOworCQljYXNlIFNaXzEyOE06CisJCQlhZGRfbXRkX3BhcnRpdGlvbnMoYXV0Y3B1MTJfbXRkLCBwYXJ0aXRpb25faW5mbzEyOGssCisJCQkJCSAgIE5VTV9QQVJUSVRJT05TMTI4Syk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiVW5zdXBwb3J0ZWQgU21hcnRNZWRpYSBkZXZpY2VcbiIpOwogCQkJZXJyID0gLUVOWElPOwogCQkJZ290byBvdXRfaW9yOwotCQl9CiAJfQogCWdvdG8gb3V0OwogCi1vdXRfaW9yOgotCWlvdW5tYXAoKHZvaWQgKilhdXRjcHUxMl9maW9fYmFzZSk7Ci1vdXRfbXRkOgotCWtmcmVlIChhdXRjcHUxMl9tdGQpOwotb3V0OgorIG91dF9pb3I6CisJaW91bm1hcChhdXRjcHUxMl9maW9fYmFzZSk7Cisgb3V0X210ZDoKKwlrZnJlZShhdXRjcHUxMl9tdGQpOworIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMDQsMjAgKzIyMiwxOSBAQAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotI2lmZGVmIE1PRFVMRQotc3RhdGljIHZvaWQgX19leGl0IGF1dGNwdTEyX2NsZWFudXAgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYXV0Y3B1MTJfY2xlYW51cCh2b2lkKQogewogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwotCW5hbmRfcmVsZWFzZSAoYXV0Y3B1MTJfbXRkKTsKKwluYW5kX3JlbGVhc2UoYXV0Y3B1MTJfbXRkKTsKIAogCS8qIHVubWFwIHBoeXNpY2FsIGFkcmVzcyAqLwotCWlvdW5tYXAoKHZvaWQgKilhdXRjcHUxMl9maW9fYmFzZSk7CisJaW91bm1hcChhdXRjcHUxMl9maW9fYmFzZSk7CiAKIAkvKiBGcmVlIHRoZSBNVEQgZGV2aWNlIHN0cnVjdHVyZSAqLwotCWtmcmVlIChhdXRjcHUxMl9tdGQpOworCWtmcmVlKGF1dGNwdTEyX210ZCk7CiB9CisKIG1vZHVsZV9leGl0KGF1dGNwdTEyX2NsZWFudXApOwotI2VuZGlmCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYTFkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBkcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKKyAqCisgKiAoQykgMjAwNSwgMjAwNiBSZWQgSGF0IEluYy4KKyAqCisgKiBBdXRob3I6IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqCSAgIFRvbSBTeWxsYSA8dG9tLnN5bGxhQGFtZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgT3ZlcnZpZXc6CisgKiAgIFRoaXMgaXMgYSBkZXZpY2UgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBjb250cm9sbGVyIGZvdW5kIG9uIAorICogICB0aGUgQU1EIENTNTUzNS9DUzU1MzYgY29tcGFuaW9uIGNoaXBzZXRzIGZvciB0aGUgR2VvZGUgcHJvY2Vzc29yLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgTlJfQ1M1NTNYX0NPTlRST0xMRVJTCTQKKworI2RlZmluZSBNU1JfRElWSUxfR0xEX0NBUAkweDUxNDAwMDAwCS8qIERJVklMIGNhcGFiaWxpdGlpZXMgKi8KKyNkZWZpbmUgQ0FQX0NTNTUzNQkJMHgyZGYwMDBVTEwKKyNkZWZpbmUgQ0FQX0NTNTUzNgkJMHg1ZGY1MDBVTEwKKworLyogTkFORCBUaW1pbmcgTVNScyAqLworI2RlZmluZSBNU1JfTkFOREZfREFUQQkJMHg1MTQwMDAxYgkvKiBOQU5EIEZsYXNoIERhdGEgVGltaW5nIE1TUiAqLworI2RlZmluZSBNU1JfTkFOREZfQ1RMCQkweDUxNDAwMDFjCS8qIE5BTkQgRmxhc2ggQ29udHJvbCBUaW1pbmcgKi8KKyNkZWZpbmUgTVNSX05BTkRGX1JTVkQJCTB4NTE0MDAwMWQJLyogUmVzZXJ2ZWQgKi8KKworLyogTkFORCBCQVIgTVNScyAqLworI2RlZmluZSBNU1JfRElWSUxfTEJBUl9GTFNIMAkweDUxNDAwMDEwCS8qIEZsYXNoIENoaXAgU2VsZWN0IDAgKi8KKyNkZWZpbmUgTVNSX0RJVklMX0xCQVJfRkxTSDEJMHg1MTQwMDAxMQkvKiBGbGFzaCBDaGlwIFNlbGVjdCAxICovCisjZGVmaW5lIE1TUl9ESVZJTF9MQkFSX0ZMU0gyCTB4NTE0MDAwMTIJLyogRmxhc2ggQ2hpcCBTZWxlY3QgMiAqLworI2RlZmluZSBNU1JfRElWSUxfTEJBUl9GTFNIMwkweDUxNDAwMDEzCS8qIEZsYXNoIENoaXAgU2VsZWN0IDMgKi8KKwkvKiBFYWNoIG1hZGUgdXAgb2YuLi4gKi8KKyNkZWZpbmUgRkxTSF9MQkFSX0VOCQkoMVVMTDw8MzIpCisjZGVmaW5lIEZMU0hfTk9SX05BTkQJCSgxVUxMPDwzMykJLyogMSBmb3IgTkFORCAqLworI2RlZmluZSBGTFNIX01FTV9JTwkJKDFVTEw8PDM0KQkvKiAxIGZvciBNTUlPICovCisJLyogSS9PIEJBUnMgaGF2ZSBCQVNFX0FERFIgaW4gYml0cyAxNTo0LCBJT19NQVNLIGluIDQ3OjM2ICovCisJLyogTU1JTyBCQVJzIGhhdmUgQkFTRV9BRERSIGluIGJpdHMgMzE6MTIsIE1FTV9NQVNLIGluIDYzOjQ0ICovCisKKy8qIFBpbiBmdW5jdGlvbiBzZWxlY3Rpb24gTVNSIChJREUgdnMuIGZsYXNoIG9uIHRoZSBJREUgcGlucykgKi8KKyNkZWZpbmUgTVNSX0RJVklMX0JBTExfT1BUUwkweDUxNDAwMDE1CisjZGVmaW5lIFBJTl9PUFRfSURFCQkoMTw8MCkJLyogMCBmb3IgZmxhc2gsIDEgZm9yIElERSAqLworCisvKiBSZWdpc3RlcnMgd2l0aGluIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgQkFSIC0tIG1lbW9yeSBtYXBwZWQgKi8KKyNkZWZpbmUgTU1fTkFORF9EQVRBCQkweDAwCS8qIDAgdG8gMHg3ZmYsIGluIGZhY3QgKi8KKyNkZWZpbmUgTU1fTkFORF9DVEwJCTB4ODAwCS8qIEFueSBldmVuIGFkZHJlc3MgMHg4MDAtMHg4MGUgKi8KKyNkZWZpbmUgTU1fTkFORF9JTwkJMHg4MDEJLyogQW55IG9kZCBhZGRyZXNzIDB4ODAxLTB4ODBmICovCisjZGVmaW5lIE1NX05BTkRfU1RTCQkweDgxMAorI2RlZmluZSBNTV9OQU5EX0VDQ19MU0IJCTB4ODExCisjZGVmaW5lIE1NX05BTkRfRUNDX01TQgkJMHg4MTIKKyNkZWZpbmUgTU1fTkFORF9FQ0NfQ09MCQkweDgxMworI2RlZmluZSBNTV9OQU5EX0xBQwkJMHg4MTQKKyNkZWZpbmUgTU1fTkFORF9FQ0NfQ1RMCQkweDgxNQorCisvKiBSZWdpc3RlcnMgd2l0aGluIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgQkFSIC0tIEkvTyBtYXBwZWQgKi8KKyNkZWZpbmUgSU9fTkFORF9EQVRBCQkweDAwCS8qIDAgdG8gMywgaW4gZmFjdCAqLworI2RlZmluZSBJT19OQU5EX0NUTAkJMHgwNAorI2RlZmluZSBJT19OQU5EX0lPCQkweDA1CisjZGVmaW5lIElPX05BTkRfU1RTCQkweDA2CisjZGVmaW5lIElPX05BTkRfRUNDX0NUTAkJMHgwOAorI2RlZmluZSBJT19OQU5EX0VDQ19MU0IJCTB4MDkKKyNkZWZpbmUgSU9fTkFORF9FQ0NfTVNCCQkweDBhCisjZGVmaW5lIElPX05BTkRfRUNDX0NPTAkJMHgwYgorI2RlZmluZSBJT19OQU5EX0xBQwkJMHgwYworCisjZGVmaW5lIENTX05BTkRfQ1RMX0RJU1RfRU4JKDE8PDQpCS8qIEVuYWJsZSBOQU5EIERpc3RyYWN0IGludGVycnVwdCAqLworI2RlZmluZSBDU19OQU5EX0NUTF9SRFlfSU5UX01BU0sJKDE8PDMpCS8qIEVuYWJsZSBSRFkvQlVTWSMgaW50ZXJydXB0ICovCisjZGVmaW5lIENTX05BTkRfQ1RMX0FMRQkJKDE8PDIpCisjZGVmaW5lIENTX05BTkRfQ1RMX0NMRQkJKDE8PDEpCisjZGVmaW5lIENTX05BTkRfQ1RMX0NFCQkoMTw8MCkJLyogS2VlcCBsb3c7IDEgdG8gcmVzZXQgKi8KKworI2RlZmluZSBDU19OQU5EX1NUU19GTEFTSF9SRFkJKDE8PDMpCisjZGVmaW5lIENTX05BTkRfQ1RMUl9CVVNZCSgxPDwyKQorI2RlZmluZSBDU19OQU5EX0NNRF9DT01QCSgxPDwxKQorI2RlZmluZSBDU19OQU5EX0RJU1RfU1QJCSgxPDwwKQorCisjZGVmaW5lIENTX05BTkRfRUNDX1BBUklUWQkoMTw8MikKKyNkZWZpbmUgQ1NfTkFORF9FQ0NfQ0xSRUNDCSgxPDwxKQorI2RlZmluZSBDU19OQU5EX0VDQ19FTkVDQwkoMTw8MCkKKworc3RhdGljIHZvaWQgY3M1NTN4X3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJd2hpbGUgKHVubGlrZWx5KGxlbiA+IDB4ODAwKSkgeworCQltZW1jcHlfZnJvbWlvKGJ1ZiwgdGhpcy0+SU9fQUREUl9SLCAweDgwMCk7CisJCWJ1ZiArPSAweDgwMDsKKwkJbGVuIC09IDB4ODAwOworCX0KKwltZW1jcHlfZnJvbWlvKGJ1ZiwgdGhpcy0+SU9fQUREUl9SLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBjczU1M3hfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJd2hpbGUgKHVubGlrZWx5KGxlbiA+IDB4ODAwKSkgeworCQltZW1jcHlfdG9pbyh0aGlzLT5JT19BRERSX1IsIGJ1ZiwgMHg4MDApOworCQlidWYgKz0gMHg4MDA7CisJCWxlbiAtPSAweDgwMDsKKwl9CisJbWVtY3B5X3RvaW8odGhpcy0+SU9fQUREUl9SLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNzNTUzeF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlyZXR1cm4gcmVhZGIodGhpcy0+SU9fQUREUl9SKTsKK30KKworc3RhdGljIHZvaWQgY3M1NTN4X3dyaXRlX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBieXRlKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJaW50IGkgPSAxMDAwMDA7CisKKwl3aGlsZSAoaSAmJiByZWFkYih0aGlzLT5JT19BRERSX1IgKyBNTV9OQU5EX1NUUykgJiBDU19OQU5EX0NUTFJfQlVTWSkgeworCQl1ZGVsYXkoMSk7CisJCWktLTsKKwl9CisJd3JpdGViKGJ5dGUsIHRoaXMtPklPX0FERFJfVyArIDB4ODAxKTsKK30KKworc3RhdGljIHZvaWQgY3M1NTN4X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl2b2lkIF9faW9tZW0gKm1taW9fYmFzZSA9IHRoaXMtPklPX0FERFJfUjsKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJdW5zaWduZWQgY2hhciBjdGwgPSAoY3RybCAmIH5OQU5EX0NUUkxfQ0hBTkdFICkgXiAweDAxOworCQl3cml0ZWIoY3RsLCBtbWlvX2Jhc2UgKyBNTV9OQU5EX0NUTCk7CisJfQorCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJY3M1NTN4X3dyaXRlX2J5dGUobXRkLCBjbWQpOworfQorCitzdGF0aWMgaW50IGNzNTUzeF9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl2b2lkIF9faW9tZW0gKm1taW9fYmFzZSA9IHRoaXMtPklPX0FERFJfUjsKKwl1bnNpZ25lZCBjaGFyIGZvbyA9IHJlYWRiKG1taW9fYmFzZSArIE1NX05BTkRfU1RTKTsKKworCXJldHVybiAoZm9vICYgQ1NfTkFORF9TVFNfRkxBU0hfUkRZKSAmJiAhKGZvbyAmIENTX05BTkRfQ1RMUl9CVVNZKTsKK30KKworc3RhdGljIHZvaWQgY3NfZW5hYmxlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXZvaWQgX19pb21lbSAqbW1pb19iYXNlID0gdGhpcy0+SU9fQUREUl9SOworCisJd3JpdGViKDB4MDcsIG1taW9fYmFzZSArIE1NX05BTkRfRUNDX0NUTCk7Cit9CisKK3N0YXRpYyBpbnQgY3NfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCit7CisJdWludDMyX3QgZWNjOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdm9pZCBfX2lvbWVtICptbWlvX2Jhc2UgPSB0aGlzLT5JT19BRERSX1I7CisKKwllY2MgPSByZWFkbChtbWlvX2Jhc2UgKyBNTV9OQU5EX1NUUyk7CisKKwllY2NfY29kZVsxXSA9IGVjYyA+PiA4OworCWVjY19jb2RlWzBdID0gZWNjID4+IDE2OworCWVjY19jb2RlWzJdID0gZWNjID4+IDI0OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpjczU1M3hfbXRkWzRdOworCitzdGF0aWMgaW50IF9faW5pdCBjczU1M3hfaW5pdF9vbmUoaW50IGNzLCBpbnQgbW1pbywgdW5zaWduZWQgbG9uZyBhZHIpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKKwlzdHJ1Y3QgbXRkX2luZm8gKm5ld19tdGQ7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlByb2JpbmcgQ1M1NTN4IE5BTkQgY29udHJvbGxlciBDUyMlZCBhdCAlc0lPIDB4JTA4bHhcbiIsIGNzLCBtbWlvPyJNTSI6IlAiLCBhZHIpOworCisJaWYgKCFtbWlvKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiUElPIG1vZGUgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgQ1M1NTNYIE5BTkQgY29udHJvbGxlclxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCisJbmV3X210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOworCWlmICghbmV3X210ZCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gYWxsb2NhdGUgQ1M1NTNYIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZuZXdfbXRkWzFdKTsKKworCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLworCW1lbXNldChuZXdfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisKKwkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLworCW5ld19tdGQtPnByaXYgPSB0aGlzOworCW5ld19tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkvKiBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqLworCXRoaXMtPklPX0FERFJfUiA9IHRoaXMtPklPX0FERFJfVyA9IGlvcmVtYXAoYWRyLCA0MDk2KTsKKwlpZiAoIXRoaXMtPklPX0FERFJfUikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpb3JlbWFwIGNzNTUzeCBOQU5EIEAweCUwOGx4IGZhaWxlZFxuIiwgYWRyKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfbXRkOworCX0KKworCXRoaXMtPmNtZF9jdHJsID0gY3M1NTN4X2h3Y29udHJvbDsKKwl0aGlzLT5kZXZfcmVhZHkgPSBjczU1M3hfZGV2aWNlX3JlYWR5OworCXRoaXMtPnJlYWRfYnl0ZSA9IGNzNTUzeF9yZWFkX2J5dGU7CisJdGhpcy0+cmVhZF9idWYgPSBjczU1M3hfcmVhZF9idWY7CisJdGhpcy0+d3JpdGVfYnVmID0gY3M1NTN4X3dyaXRlX2J1ZjsKKworCXRoaXMtPmNoaXBfZGVsYXkgPSAwOworCisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKKwl0aGlzLT5lY2Muc2l6ZSA9IDI1NjsKKwl0aGlzLT5lY2MuYnl0ZXMgPSAzOworCXRoaXMtPmVjYy5od2N0bCAgPSBjc19lbmFibGVfaHdlY2M7CisJdGhpcy0+ZWNjLmNhbGN1bGF0ZSA9IGNzX2NhbGN1bGF0ZV9lY2M7CisJdGhpcy0+ZWNjLmNvcnJlY3QgID0gbmFuZF9jb3JyZWN0X2RhdGE7CisKKwkvKiBFbmFibGUgdGhlIGZvbGxvd2luZyBmb3IgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgKi8KKwl0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUIHwgTkFORF9OT19BVVRPSU5DUjsKKworCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCWlmIChuYW5kX3NjYW4obmV3X210ZCwgMSkpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dF9pb3I7CisJfQorCisJY3M1NTN4X210ZFtjc10gPSBuZXdfbXRkOworCWdvdG8gb3V0OworCitvdXRfaW9yOgorCWlvdW5tYXAoKHZvaWQgKil0aGlzLT5JT19BRERSX1IpOworb3V0X210ZDoKKwlrZnJlZShuZXdfbXRkKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlzX2dlb2RlKHZvaWQpCit7CisJLyogVGhlc2UgYXJlIHRoZSBDUFVzIHdoaWNoIHdpbGwgaGF2ZSBhIENTNTUzWzU2XSBjb21wYW5pb24gY2hpcCAqLworCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKKwkgICAgYm9vdF9jcHVfZGF0YS54ODYgPT0gNSAmJgorCSAgICBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAxMCkKKwkJcmV0dXJuIDE7IC8qIEdlb2RlIExYICovCisKKwlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX05TQyB8fAorCSAgICAgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQ1lSSVgpICYmCisJICAgIGJvb3RfY3B1X2RhdGEueDg2ID09IDUgJiYKKwkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gNSkKKwkJcmV0dXJuIDE7IC8qIEdlb2RlIEdYIChuw6llIEdYMikgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjczU1M3hfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSAtRU5YSU87CisJaW50IGk7CisJdWludDY0X3QgdmFsOworCisJLyogSWYgdGhlIENQVSBpc24ndCBhIEdlb2RlIEdYIG9yIExYLCBhYm9ydCAqLworCWlmICghaXNfZ2VvZGUoKSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIElmIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgQ1M1NTNbNTZdLCBhYm9ydCAqLworCXJkbXNybChNU1JfRElWSUxfR0xEX0NBUCwgdmFsKTsKKwl2YWwgJj0gfjB4RkZVTEw7CisJaWYgKHZhbCAhPSBDQVBfQ1M1NTM1ICYmIHZhbCAhPSBDQVBfQ1M1NTM2KQorCQlyZXR1cm4gLUVOWElPOworCisJLyogSWYgaXQgZG9lc24ndCBoYXZlIHRoZSBOQU5EIGNvbnRyb2xsZXIgZW5hYmxlZCwgYWJvcnQgKi8KKwlyZG1zcmwoTVNSX0RJVklMX0JBTExfT1BUUywgdmFsKTsKKwlpZiAodmFsICYgMSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDUzU1M3ggTkFORCBjb250cm9sbGVyOiBGbGFzaCBJL08gbm90IGVuYWJsZWQgaW4gTVNSX0RJVklMX0JBTExfT1BUUy5cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBOUl9DUzU1M1hfQ09OVFJPTExFUlM7IGkrKykgeworCQlyZG1zcmwoTVNSX0RJVklMX0xCQVJfRkxTSDAgKyBpLCB2YWwpOworCisJCWlmICgodmFsICYgKEZMU0hfTEJBUl9FTnxGTFNIX05PUl9OQU5EKSkgPT0gKEZMU0hfTEJBUl9FTnxGTFNIX05PUl9OQU5EKSkKKwkJCWVyciA9IGNzNTUzeF9pbml0X29uZShpLCAhISh2YWwgJiBGTFNIX01FTV9JTyksIHZhbCAmIDB4RkZGRkZGRkYpOworCX0KKworCS8qIFJlZ2lzdGVyIGFsbCBkZXZpY2VzIHRvZ2V0aGVyIGhlcmUuIFRoaXMgbWVhbnMgd2UgY2FuIGVhc2lseSBoYWNrIGl0IHRvIAorCSAgIGRvIG10ZGNvbmNhdCBldGMuIGlmIHdlIHdhbnQgdG8uICovCisJZm9yIChpID0gMDsgaSA8IE5SX0NTNTUzWF9DT05UUk9MTEVSUzsgaSsrKSB7CisJCWlmIChjczU1M3hfbXRkW2ldKSB7CisJCQlhZGRfbXRkX2RldmljZShjczU1M3hfbXRkW2ldKTsKKworCQkJLyogSWYgYW55IGRldmljZXMgcmVnaXN0ZXJlZCwgcmV0dXJuIHN1Y2Nlc3MuIEVsc2UgdGhlIGxhc3QgZXJyb3IuICovCisJCQllcnIgPSAwOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworbW9kdWxlX2luaXQoY3M1NTN4X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY3M1NTN4X2NsZWFudXAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9DUzU1M1hfQ09OVFJPTExFUlM7IGkrKykgeworCQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGNzNTUzeF9tdGRbaV07CisJCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CisJCXZvaWQgX19pb21lbSAqbW1pb19iYXNlOworCisJCWlmICghbXRkKQorCQkJYnJlYWs7CisKKwkJdGhpcyA9IGNzNTUzeF9tdGRbaV0tPnByaXY7CisJCW1taW9fYmFzZSA9IHRoaXMtPklPX0FERFJfUjsKKworCQkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KKwkJbmFuZF9yZWxlYXNlKGNzNTUzeF9tdGRbaV0pOworCQljczU1M3hfbXRkW2ldID0gTlVMTDsKKworCQkvKiB1bm1hcCBwaHlzaWNhbCBhZHJlc3MgKi8KKwkJaW91bm1hcChtbWlvX2Jhc2UpOworCisJCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCisJCWtmcmVlKG10ZCk7CisJfQorfQorCittb2R1bGVfZXhpdChjczU1M3hfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTkFORCBjb250cm9sbGVyIGRyaXZlciBmb3IgQU1EIENTNTUzNS9DUzU1MzYgY29tcGFuaW9uIGNoaXAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZGlza29uY2hpcC5jIGIvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKaW5kZXggZWM1ZTQ1ZS4uNjEwN2Y1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKQEAgLTU4LDEwICs1OCwxMCBAQAogCTB4ZTQwMDAwMDAsCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NT01FTkNPX09DRUxPVCkKIAkweDJmMDAwMDAwLAotICAgICAgICAweGZmMDAwMDAwLAorCTB4ZmYwMDAwMDAsCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NT01FTkNPX09DRUxPVF9HKSB8fCBkZWZpbmVkIChDT05GSUdfTU9NRU5DT19PQ0VMT1RfQykKLSAgICAgICAgMHhmZjAwMDAwMCwKLSMjZWxzZQorCTB4ZmYwMDAwMDAsCisjZWxzZQogI3dhcm5pbmcgVW5rbm93biBhcmNoaXRlY3R1cmUgZm9yIERpc2tPbkNoaXAuIE5vIGRlZmF1bHQgcHJvYmUgbG9jYXRpb25zIGRlZmluZWQKICNlbmRpZgogCTB4ZmZmZmZmZmYgfTsKQEAgLTczLDcgKzczLDcgQEAKIAl1bnNpZ25lZCBsb25nIHBoeXNhZHI7CiAJdV9jaGFyIENoaXBJRDsKIAl1X2NoYXIgQ0RTTkNvbnRyb2w7Ci0JaW50IGNoaXBzX3Blcl9mbG9vcjsgLyogVGhlIG51bWJlciBvZiBjaGlwcyBkZXRlY3RlZCBvbiBlYWNoIGZsb29yICovCisJaW50IGNoaXBzX3Blcl9mbG9vcjsJLyogVGhlIG51bWJlciBvZiBjaGlwcyBkZXRlY3RlZCBvbiBlYWNoIGZsb29yICovCiAJaW50IGN1cmZsb29yOwogCWludCBjdXJjaGlwOwogCWludCBtaDBfcGFnZTsKQEAgLTg0LDYgKzg0LDcgQEAKIC8qIFRoaXMgaXMgdGhlIHN5bmRyb21lIGNvbXB1dGVkIGJ5IHRoZSBIVyBlY2MgZ2VuZXJhdG9yIHVwb24gcmVhZGluZyBhbiBlbXB0eQogICAgcGFnZSwgb25lIHdpdGggYWxsIDB4ZmYgZm9yIGRhdGEgYW5kIHN0b3JlZCBlY2MgY29kZS4gKi8KIHN0YXRpYyB1X2NoYXIgZW1wdHlfcmVhZF9zeW5kcm9tZVs2XSA9IHsgMHgyNiwgMHhmZiwgMHg2ZCwgMHg0NywgMHg3MywgMHg3YSB9OworCiAvKiBUaGlzIGlzIHRoZSBlY2MgdmFsdWUgY29tcHV0ZWQgYnkgdGhlIEhXIGVjYyBnZW5lcmF0b3IgdXBvbiB3cml0aW5nIGFuIGVtcHR5CiAgICBwYWdlLCBvbmUgd2l0aCBhbGwgMHhmZiBmb3IgZGF0YS4gKi8KIHN0YXRpYyB1X2NoYXIgZW1wdHlfd3JpdGVfZWNjWzZdID0geyAweDRiLCAweDAwLCAweGUyLCAweDBlLCAweDkzLCAweGY3IH07CkBAIC05NCwyOCArOTUsMjkgQEAKICNkZWZpbmUgRG9DX2lzX01pbGxlbm5pdW0oZG9jKSAoKGRvYyktPkNoaXBJRCA9PSBET0NfQ2hpcElEX0RvY01pbCkKICNkZWZpbmUgRG9DX2lzXzIwMDAoZG9jKSAoKGRvYyktPkNoaXBJRCA9PSBET0NfQ2hpcElEX0RvYzJrKQogCi1zdGF0aWMgdm9pZCBkb2MyMDB4X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCk7CitzdGF0aWMgdm9pZCBkb2MyMDB4X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBiaXRtYXNrKTsKIHN0YXRpYyB2b2lkIGRvYzIwMHhfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKTsKIAotc3RhdGljIGludCBkZWJ1Zz0wOworc3RhdGljIGludCBkZWJ1ZyA9IDA7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiAKLXN0YXRpYyBpbnQgdHJ5X2R3b3JkPTE7CitzdGF0aWMgaW50IHRyeV9kd29yZCA9IDE7CiBtb2R1bGVfcGFyYW0odHJ5X2R3b3JkLCBpbnQsIDApOwogCi1zdGF0aWMgaW50IG5vX2VjY19mYWlsdXJlcz0wOworc3RhdGljIGludCBub19lY2NfZmFpbHVyZXMgPSAwOwogbW9kdWxlX3BhcmFtKG5vX2VjY19mYWlsdXJlcywgaW50LCAwKTsKIAotc3RhdGljIGludCBub19hdXRvcGFydD0wOworc3RhdGljIGludCBub19hdXRvcGFydCA9IDA7CiBtb2R1bGVfcGFyYW0obm9fYXV0b3BhcnQsIGludCwgMCk7CiAKLXN0YXRpYyBpbnQgc2hvd19maXJtd2FyZV9wYXJ0aXRpb249MDsKK3N0YXRpYyBpbnQgc2hvd19maXJtd2FyZV9wYXJ0aXRpb24gPSAwOwogbW9kdWxlX3BhcmFtKHNob3dfZmlybXdhcmVfcGFydGl0aW9uLCBpbnQsIDApOwogCiAjaWZkZWYgTVREX05BTkRfRElTS09OQ0hJUF9CQlRXUklURQotc3RhdGljIGludCBpbmZ0bF9iYnRfd3JpdGU9MTsKK3N0YXRpYyBpbnQgaW5mdGxfYmJ0X3dyaXRlID0gMTsKICNlbHNlCi1zdGF0aWMgaW50IGluZnRsX2JidF93cml0ZT0wOworc3RhdGljIGludCBpbmZ0bF9iYnRfd3JpdGUgPSAwOwogI2VuZGlmCiBtb2R1bGVfcGFyYW0oaW5mdGxfYmJ0X3dyaXRlLCBpbnQsIDApOwogCkBAIC0xMjMsNyArMTI1LDYgQEAKIG1vZHVsZV9wYXJhbShkb2NfY29uZmlnX2xvY2F0aW9uLCB1bG9uZywgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRvY19jb25maWdfbG9jYXRpb24sICJQaHlzaWNhbCBtZW1vcnkgYWRkcmVzcyBhdCB3aGljaCB0byBwcm9iZSBmb3IgRGlza09uQ2hpcCIpOwogCi0KIC8qIFNlY3RvciBzaXplIGZvciBIVyBFQ0MgKi8KICNkZWZpbmUgU0VDVE9SX1NJWkUgNTEyCiAvKiBUaGUgc2VjdG9yIGJ5dGVzIGFyZSBwYWNrZWQgaW50byBOQl9EQVRBIDEwIGJpdCB3b3JkcyAqLwpAQCAtMTQ3LDcgKzE0OCw3IEBACiAgKiBzb21lIGNvbW1lbnRzLCBpbXByb3ZlZCBhIG1pbm9yIGJpdCBhbmQgY29udmVydGVkIGl0IHRvIG1ha2UgdXNlCiAgKiBvZiB0aGUgZ2VuZXJpYyBSZWVkLVNvbG9tb24gbGliYXJ5LiB0Z2x4CiAgKi8KLXN0YXRpYyBpbnQgZG9jX2VjY19kZWNvZGUgKHN0cnVjdCByc19jb250cm9sICpycywgdWludDhfdCAqZGF0YSwgdWludDhfdCAqZWNjKQorc3RhdGljIGludCBkb2NfZWNjX2RlY29kZShzdHJ1Y3QgcnNfY29udHJvbCAqcnMsIHVpbnQ4X3QgKmRhdGEsIHVpbnQ4X3QgKmVjYykKIHsKIAlpbnQgaSwgaiwgbmVyciwgZXJycG9zWzhdOwogCXVpbnQ4X3QgcGFyaXR5OwpAQCAtMTY4LDE4ICsxNjksMTggQEAKIAkgKiAgc1tpXSA9IGRzWzNdeF4zICsgZHNbMl14XjIgKyBkc1sxXXheMSArIGRzWzBdCiAJICogIHdoZXJlIHggPSBhbHBoYV4oRkNSICsgaSkKIAkgKi8KLQlmb3IoaiA9IDE7IGogPCBOUk9PVFM7IGorKykgewotCQlpZihkc1tqXSA9PSAwKQorCWZvciAoaiA9IDE7IGogPCBOUk9PVFM7IGorKykgeworCQlpZiAoZHNbal0gPT0gMCkKIAkJCWNvbnRpbnVlOwogCQl0bXAgPSBycy0+aW5kZXhfb2ZbZHNbal1dOwotCQlmb3IoaSA9IDA7IGkgPCBOUk9PVFM7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IE5ST09UUzsgaSsrKQogCQkJc1tpXSBePSBycy0+YWxwaGFfdG9bcnNfbW9kbm4ocnMsIHRtcCArIChGQ1IgKyBpKSAqIGopXTsKIAl9CiAKIAkvKiBDYWxjIHNbaV0gPSBzW2ldIC8gYWxwaGFeKHYgKyBpKSAqLwogCWZvciAoaSA9IDA7IGkgPCBOUk9PVFM7IGkrKykgewogCQlpZiAoc3luW2ldKQotIAkJCXN5bltpXSA9IHJzX21vZG5uKHJzLCBycy0+aW5kZXhfb2Zbc1tpXV0gKyAoTk4gLSBGQ1IgLSBpKSk7CisJCQlzeW5baV0gPSByc19tb2RubihycywgcnMtPmluZGV4X29mW3NbaV1dICsgKE5OIC0gRkNSIC0gaSkpOwogCX0KIAkvKiBDYWxsIHRoZSBkZWNvZGVyIGxpYnJhcnkgKi8KIAluZXJyID0gZGVjb2RlX3JzMTYocnMsIE5VTEwsIE5VTEwsIDEwMTksIHN5biwgMCwgZXJycG9zLCAwLCBlcnJ2YWwpOwpAQCAtMTkzLDcgKzE5NCw3IEBACiAJICogYnV0IHRoZXkgYXJlIGdpdmVuIGJ5IHRoZSBkZXNpZ24gb2YgdGhlIGRlL2VuY29kZXIgY2lyY3VpdAogCSAqIGluIHRoZSBEb0MgQVNJQydzLgogCSAqLwotCWZvcihpID0gMDtpIDwgbmVycjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5lcnI7IGkrKykgewogCQlpbnQgaW5kZXgsIGJpdHBvcywgcG9zID0gMTAxNSAtIGVycnBvc1tpXTsKIAkJdWludDhfdCB2YWw7CiAJCWlmIChwb3MgPj0gTkJfREFUQSAmJiBwb3MgPCAxMDE5KQpAQCAtMjA1LDggKzIwNiw3IEBACiAJCQkgICBjYW4gYmUgbW9kaWZpZWQgc2luY2UgcG9zIGlzIGV2ZW4gKi8KIAkJCWluZGV4ID0gKHBvcyA+PiAzKSBeIDE7CiAJCQliaXRwb3MgPSBwb3MgJiA3OwotCQkJaWYgKChpbmRleCA+PSAwICYmIGluZGV4IDwgU0VDVE9SX1NJWkUpIHx8Ci0JCQkgICAgaW5kZXggPT0gKFNFQ1RPUl9TSVpFICsgMSkpIHsKKwkJCWlmICgoaW5kZXggPj0gMCAmJiBpbmRleCA8IFNFQ1RPUl9TSVpFKSB8fCBpbmRleCA9PSAoU0VDVE9SX1NJWkUgKyAxKSkgewogCQkJCXZhbCA9ICh1aW50OF90KSAoZXJydmFsW2ldID4+ICgyICsgYml0cG9zKSk7CiAJCQkJcGFyaXR5IF49IHZhbDsKIAkJCQlpZiAoaW5kZXggPCBTRUNUT1JfU0laRSkKQEAgLTIxNiw5ICsyMTYsOCBAQAogCQkJYml0cG9zID0gKGJpdHBvcyArIDEwKSAmIDc7CiAJCQlpZiAoYml0cG9zID09IDApCiAJCQkJYml0cG9zID0gODsKLQkJCWlmICgoaW5kZXggPj0gMCAmJiBpbmRleCA8IFNFQ1RPUl9TSVpFKSB8fAotCQkJICAgIGluZGV4ID09IChTRUNUT1JfU0laRSArIDEpKSB7Ci0JCQkJdmFsID0gKHVpbnQ4X3QpKGVycnZhbFtpXSA8PCAoOCAtIGJpdHBvcykpOworCQkJaWYgKChpbmRleCA+PSAwICYmIGluZGV4IDwgU0VDVE9SX1NJWkUpIHx8IGluZGV4ID09IChTRUNUT1JfU0laRSArIDEpKSB7CisJCQkJdmFsID0gKHVpbnQ4X3QpIChlcnJ2YWxbaV0gPDwgKDggLSBiaXRwb3MpKTsKIAkJCQlwYXJpdHkgXj0gdmFsOwogCQkJCWlmIChpbmRleCA8IFNFQ1RPUl9TSVpFKQogCQkJCQlkYXRhW2luZGV4XSBePSB2YWw7CkBAIC0yNTAsMTAgKzI0OSwxMSBAQAogLyogRE9DX1dhaXRSZWFkeTogV2FpdCBmb3IgUkRZIGxpbmUgdG8gYmUgYXNzZXJ0ZWQgYnkgdGhlIGZsYXNoIGNoaXAgKi8KIHN0YXRpYyBpbnQgX0RvQ19XYWl0UmVhZHkoc3RydWN0IGRvY19wcml2ICpkb2MpCiB7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCXVuc2lnbmVkIGxvbmcgdGltZW8gPSBqaWZmaWVzICsgKEhaICogMTApOwogCi0JaWYoZGVidWcpIHByaW50aygiX0RvQ19XYWl0UmVhZHkuLi5cbiIpOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJfRG9DX1dhaXRSZWFkeS4uLlxuIik7CiAJLyogT3V0LW9mLWxpbmUgcm91dGluZSB0byB3YWl0IGZvciBjaGlwIHJlc3BvbnNlICovCiAJaWYgKERvQ19pc19NaWxsZW5uaXVtUGx1cyhkb2MpKSB7CiAJCXdoaWxlICgoUmVhZERPQyhkb2NwdHIsIE1wbHVzX0ZsYXNoQ29udHJvbCkgJiBDRFNOX0NUUkxfRlJfQl9NQVNLKSAhPSBDRFNOX0NUUkxfRlJfQl9NQVNLKSB7CkBAIC0yODAsNyArMjgwLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgRG9DX1dhaXRSZWFkeShzdHJ1Y3QgZG9jX3ByaXYgKmRvYykKIHsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoRG9DX2lzX01pbGxlbm5pdW1QbHVzKGRvYykpIHsKQEAgLTI5OCw3ICsyOTgsOCBAQAogCQlEb0NfRGVsYXkoZG9jLCAyKTsKIAl9CiAKLQlpZihkZWJ1ZykgcHJpbnRrKCJEb0NfV2FpdFJlYWR5IE9LXG4iKTsKKwlpZiAoZGVidWcpCisJCXByaW50aygiRG9DX1dhaXRSZWFkeSBPS1xuIik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzA2LDkgKzMwNywxMCBAQAogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAotCWlmKGRlYnVnKXByaW50aygid3JpdGVfYnl0ZSAlMDJ4XG4iLCBkYXR1bSk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoIndyaXRlX2J5dGUgJTAyeFxuIiwgZGF0dW0pOwogCVdyaXRlRE9DKGRhdHVtLCBkb2NwdHIsIENEU05TbG93SU8pOwogCVdyaXRlRE9DKGRhdHVtLCBkb2NwdHIsIDJrX0NEU05fSU8pOwogfQpAQCAtMzE3LDc3ICszMTksNzggQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJdV9jaGFyIHJldDsKIAogCVJlYWRET0MoZG9jcHRyLCBDRFNOU2xvd0lPKTsKIAlEb0NfRGVsYXkoZG9jLCAyKTsKIAlyZXQgPSBSZWFkRE9DKGRvY3B0ciwgMmtfQ0RTTl9JTyk7Ci0JaWYgKGRlYnVnKSBwcmludGsoInJlYWRfYnl0ZSByZXR1cm5zICUwMnhcbiIsIHJldCk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInJlYWRfYnl0ZSByZXR1cm5zICUwMnhcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZG9jMjAwMF93cml0ZWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCSAgICAgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBkb2MyMDAwX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7Ci0JaWYgKGRlYnVnKXByaW50aygid3JpdGVidWYgb2YgJWQgYnl0ZXM6ICIsIGxlbik7Ci0JZm9yIChpPTA7IGkgPCBsZW47IGkrKykgeworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJ3cml0ZWJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJV3JpdGVET0NfKGJ1ZltpXSwgZG9jcHRyLCBEb0NfMmtfQ0RTTl9JTyArIGkpOwogCQlpZiAoZGVidWcgJiYgaSA8IDE2KQogCQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltpXSk7CiAJfQotCWlmIChkZWJ1ZykgcHJpbnRrKCJcbiIpOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBkb2MyMDAwX3JlYWRidWYoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkgICAgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBkb2MyMDAwX3JlYWRidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLSAJaW50IGk7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJaW50IGk7CiAKLQlpZiAoZGVidWcpcHJpbnRrKCJyZWFkYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJyZWFkYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOwogCi0JZm9yIChpPTA7IGkgPCBsZW47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlidWZbaV0gPSBSZWFkRE9DKGRvY3B0ciwgMmtfQ0RTTl9JTyArIGkpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgZG9jMjAwMF9yZWFkYnVmX2R3b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgIHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG9jMjAwMF9yZWFkYnVmX2R3b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7Ci0gCWludCBpOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCWludCBpOwogCi0JaWYgKGRlYnVnKSBwcmludGsoInJlYWRidWZfZHdvcmQgb2YgJWQgYnl0ZXM6ICIsIGxlbik7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInJlYWRidWZfZHdvcmQgb2YgJWQgYnl0ZXM6ICIsIGxlbik7CiAKLQlpZiAodW5saWtlbHkoKCgodW5zaWduZWQgbG9uZylidWYpfGxlbikgJiAzKSkgewotCQlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7Ci0JCQkqKHVpbnQ4X3QgKikoJmJ1ZltpXSkgPSBSZWFkRE9DKGRvY3B0ciwgMmtfQ0RTTl9JTyArIGkpOworCWlmICh1bmxpa2VseSgoKCh1bnNpZ25lZCBsb25nKWJ1ZikgfCBsZW4pICYgMykpIHsKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQkqKHVpbnQ4X3QgKikgKCZidWZbaV0pID0gUmVhZERPQyhkb2NwdHIsIDJrX0NEU05fSU8gKyBpKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWZvciAoaT0wOyBpIDwgbGVuOyBpKz00KSB7Ci0JCQkqKHVpbnQzMl90KikoJmJ1ZltpXSkgPSByZWFkbChkb2NwdHIgKyBEb0NfMmtfQ0RTTl9JTyArIGkpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHsKKwkJCSoodWludDMyX3QgKikgKCZidWZbaV0pID0gcmVhZGwoZG9jcHRyICsgRG9DXzJrX0NEU05fSU8gKyBpKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIGludCBkb2MyMDAwX3ZlcmlmeWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCSAgICAgIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIGludCBkb2MyMDAwX3ZlcmlmeWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCWludCBpOwogCi0JZm9yIChpPTA7IGkgPCBsZW47IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAJCWlmIChidWZbaV0gIT0gUmVhZERPQyhkb2NwdHIsIDJrX0NEU05fSU8pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CkBAIC00MDAsMTIgKzQwMywxMCBAQAogCXVpbnQxNl90IHJldDsKIAogCWRvYzIwMHhfc2VsZWN0X2NoaXAobXRkLCBucik7Ci0JZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCXRoaXMtPndyaXRlX2J5dGUobXRkLCBOQU5EX0NNRF9SRUFESUQpOwotCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKLQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVEFMRSk7Ci0JdGhpcy0+d3JpdGVfYnl0ZShtdGQsIDApOwotCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQUxFKTsKKwlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ01EX1JFQURJRCwKKwkJCSAgTkFORF9DVFJMX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgMCwgTkFORF9DVFJMX0FMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DTURfTk9ORSwgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCS8qIFdlIGNhbnQnIHVzZSBkZXZfcmVhZHkgaGVyZSwgYnV0IGF0IGxlYXN0IHdlIHdhaXQgZm9yIHRoZQogCSAqIGNvbW1hbmQgdG8gY29tcGxldGUKQEAgLTQyMywxMiArNDI0LDExIEBACiAJCX0gaWRlbnQ7CiAJCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCi0JCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQ0xFKTsKLQkJZG9jMjAwMF93cml0ZV9ieXRlKG10ZCwgTkFORF9DTURfUkVBRElEKTsKLQkJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOwotCQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVEFMRSk7Ci0JCWRvYzIwMDBfd3JpdGVfYnl0ZShtdGQsIDApOwotCQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkFMRSk7CisJCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DTURfUkVBRElELAorCQkJCSAgTkFORF9DVFJMX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIDAsIE5BTkRfQ1RSTF9BTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NNRF9OT05FLAorCQkJCSAgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCQl1ZGVsYXkoNTApOwogCkBAIC00NjQsNyArNDY0LDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiRGV0ZWN0ZWQgJWQgY2hpcHMgcGVyIGZsb29yLlxuIiwgaSk7CiB9CiAKLXN0YXRpYyBpbnQgZG9jMjAweF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgc3RhdGUpCitzdGF0aWMgaW50IGRvYzIwMHhfd2FpdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcykKIHsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7CiAKQEAgLTQ4Miw3ICs0ODIsNyBAQAogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAogCVdyaXRlRE9DKGRhdHVtLCBkb2NwdHIsIENEU05TbG93SU8pOwogCVdyaXRlRE9DKGRhdHVtLCBkb2NwdHIsIE1pbF9DRFNOX0lPKTsKQEAgLTQ5Myw3ICs0OTMsNyBAQAogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAogCS8vUmVhZERPQyhkb2NwdHIsIENEU05TbG93SU8pOwogCS8qIDExLjQuNSAtLSBkZWxheSB0d2ljZSB0byBhbGxvdyBleHRlbmRlZCBsZW5ndGggY3ljbGUgKi8KQEAgLTUwMyw1MCArNTAzLDQ3IEBACiAJcmV0dXJuIFJlYWRET0MoZG9jcHRyLCBMYXN0RGF0YVJlYWQpOwogfQogCi1zdGF0aWMgdm9pZCBkb2MyMDAxX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGRvYzIwMDFfd3JpdGVidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAlpbnQgaTsKIAotCWZvciAoaT0wOyBpIDwgbGVuOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQogCQlXcml0ZURPQ18oYnVmW2ldLCBkb2NwdHIsIERvQ19NaWxfQ0RTTl9JTyArIGkpOwogCS8qIFRlcm1pbmF0ZSB3cml0ZSBwaXBlbGluZSAqLwogCVdyaXRlRE9DKDB4MDAsIGRvY3B0ciwgV3JpdGVQaXBlVGVybSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRvYzIwMDFfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCSAgICB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGRvYzIwMDFfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCWludCBpOwogCiAJLyogU3RhcnQgcmVhZCBwaXBlbGluZSAqLwogCVJlYWRET0MoZG9jcHRyLCBSZWFkUGlwZUluaXQpOwogCi0JZm9yIChpPTA7IGkgPCBsZW4tMTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspCiAJCWJ1ZltpXSA9IFJlYWRET0MoZG9jcHRyLCBNaWxfQ0RTTl9JTyArIChpICYgMHhmZikpOwogCiAJLyogVGVybWluYXRlIHJlYWQgcGlwZWxpbmUgKi8KIAlidWZbaV0gPSBSZWFkRE9DKGRvY3B0ciwgTGFzdERhdGFSZWFkKTsKIH0KIAotc3RhdGljIGludCBkb2MyMDAxX3ZlcmlmeWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCSAgICAgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgaW50IGRvYzIwMDFfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7CiAKIAkvKiBTdGFydCByZWFkIHBpcGVsaW5lICovCiAJUmVhZERPQyhkb2NwdHIsIFJlYWRQaXBlSW5pdCk7CiAKLQlmb3IgKGk9MDsgaSA8IGxlbi0xOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykKIAkJaWYgKGJ1ZltpXSAhPSBSZWFkRE9DKGRvY3B0ciwgTWlsX0NEU05fSU8pKSB7CiAJCQlSZWFkRE9DKGRvY3B0ciwgTGFzdERhdGFSZWFkKTsKIAkJCXJldHVybiBpOwpAQCAtNTYwLDg3ICs1NTcsOTAgQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJdV9jaGFyIHJldDsKIAotICAgICAgICBSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKLSAgICAgICAgUmVhZERPQyhkb2NwdHIsIE1wbHVzX1JlYWRQaXBlSW5pdCk7Ci0gICAgICAgIHJldCA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwotCWlmIChkZWJ1ZykgcHJpbnRrKCJyZWFkX2J5dGUgcmV0dXJucyAlMDJ4XG4iLCByZXQpOworCVJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOworCVJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOworCXJldCA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJyZWFkX2J5dGUgcmV0dXJucyAlMDJ4XG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRvYzIwMDFwbHVzX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGRvYzIwMDFwbHVzX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7CiAKLQlpZiAoZGVidWcpcHJpbnRrKCJ3cml0ZWJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKLQlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7CisJaWYgKGRlYnVnKQorCQlwcmludGsoIndyaXRlYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlXcml0ZURPQ18oYnVmW2ldLCBkb2NwdHIsIERvQ19NaWxfQ0RTTl9JTyArIGkpOwogCQlpZiAoZGVidWcgJiYgaSA8IDE2KQogCQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltpXSk7CiAJfQotCWlmIChkZWJ1ZykgcHJpbnRrKCJcbiIpOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBkb2MyMDAxcGx1c19yZWFkYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgIHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG9jMjAwMXBsdXNfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCWludCBpOwogCi0JaWYgKGRlYnVnKXByaW50aygicmVhZGJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKKwlpZiAoZGVidWcpCisJCXByaW50aygicmVhZGJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKIAogCS8qIFN0YXJ0IHJlYWQgcGlwZWxpbmUgKi8KIAlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKIAlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKIAotCWZvciAoaT0wOyBpIDwgbGVuLTI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAyOyBpKyspIHsKIAkJYnVmW2ldID0gUmVhZERPQyhkb2NwdHIsIE1pbF9DRFNOX0lPKTsKIAkJaWYgKGRlYnVnICYmIGkgPCAxNikKIAkJCXByaW50aygiJTAyeCAiLCBidWZbaV0pOwogCX0KIAogCS8qIFRlcm1pbmF0ZSByZWFkIHBpcGVsaW5lICovCi0JYnVmW2xlbi0yXSA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOworCWJ1ZltsZW4gLSAyXSA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwogCWlmIChkZWJ1ZyAmJiBpIDwgMTYpCi0JCXByaW50aygiJTAyeCAiLCBidWZbbGVuLTJdKTsKLQlidWZbbGVuLTFdID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7CisJCXByaW50aygiJTAyeCAiLCBidWZbbGVuIC0gMl0pOworCWJ1ZltsZW4gLSAxXSA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwogCWlmIChkZWJ1ZyAmJiBpIDwgMTYpCi0JCXByaW50aygiJTAyeCAiLCBidWZbbGVuLTFdKTsKLQlpZiAoZGVidWcpIHByaW50aygiXG4iKTsKKwkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltsZW4gLSAxXSk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoIlxuIik7CiB9CiAKLXN0YXRpYyBpbnQgZG9jMjAwMXBsdXNfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyBpbnQgZG9jMjAwMXBsdXNfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7CiAKLQlpZiAoZGVidWcpcHJpbnRrKCJ2ZXJpZnlidWYgb2YgJWQgYnl0ZXM6ICIsIGxlbik7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInZlcmlmeWJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKIAogCS8qIFN0YXJ0IHJlYWQgcGlwZWxpbmUgKi8KIAlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKIAlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKIAotCWZvciAoaT0wOyBpIDwgbGVuLTI7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMjsgaSsrKQogCQlpZiAoYnVmW2ldICE9IFJlYWRET0MoZG9jcHRyLCBNaWxfQ0RTTl9JTykpIHsKIAkJCVJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwogCQkJUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7CiAJCQlyZXR1cm4gaTsKIAkJfQotCWlmIChidWZbbGVuLTJdICE9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpKQotCQlyZXR1cm4gbGVuLTI7Ci0JaWYgKGJ1ZltsZW4tMV0gIT0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCkpCi0JCXJldHVybiBsZW4tMTsKKwlpZiAoYnVmW2xlbiAtIDJdICE9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpKQorCQlyZXR1cm4gbGVuIC0gMjsKKwlpZiAoYnVmW2xlbiAtIDFdICE9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpKQorCQlyZXR1cm4gbGVuIC0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjQ4LDEwICs2NDgsMTEgQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGZsb29yID0gMDsKIAotCWlmKGRlYnVnKXByaW50aygic2VsZWN0IGNoaXAgKCVkKVxuIiwgY2hpcCk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInNlbGVjdCBjaGlwICglZClcbiIsIGNoaXApOwogCiAJaWYgKGNoaXAgPT0gLTEpIHsKIAkJLyogRGlzYWJsZSBmbGFzaCBpbnRlcm5hbGx5ICovCkBAIC02NjAsNyArNjYxLDcgQEAKIAl9CiAKIAlmbG9vciA9IGNoaXAgLyBkb2MtPmNoaXBzX3Blcl9mbG9vcjsKLQljaGlwIC09IChmbG9vciAqICBkb2MtPmNoaXBzX3Blcl9mbG9vcik7CisJY2hpcCAtPSAoZmxvb3IgKiBkb2MtPmNoaXBzX3Blcl9mbG9vcik7CiAKIAkvKiBBc3NlcnQgQ2hpcEVuYWJsZSBhbmQgZGVhc3NlcnQgV3JpdGVQcm90ZWN0ICovCiAJV3JpdGVET0MoKERPQ19GTEFTSF9DRSksIGRvY3B0ciwgTXBsdXNfRmxhc2hTZWxlY3QpOwpAQCAtNjc0LDcyICs2NzUsNjEgQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGZsb29yID0gMDsKIAotCWlmKGRlYnVnKXByaW50aygic2VsZWN0IGNoaXAgKCVkKVxuIiwgY2hpcCk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInNlbGVjdCBjaGlwICglZClcbiIsIGNoaXApOwogCiAJaWYgKGNoaXAgPT0gLTEpCiAJCXJldHVybjsKIAogCWZsb29yID0gY2hpcCAvIGRvYy0+Y2hpcHNfcGVyX2Zsb29yOwotCWNoaXAgLT0gKGZsb29yICogIGRvYy0+Y2hpcHNfcGVyX2Zsb29yKTsKKwljaGlwIC09IChmbG9vciAqIGRvYy0+Y2hpcHNfcGVyX2Zsb29yKTsKIAogCS8qIDExLjQuNCAtLSBkZWFzc2VydCBDRSBiZWZvcmUgY2hhbmdpbmcgY2hpcCAqLwotCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSTkNFKTsKKwlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ01EX05PTkUsIDAgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCVdyaXRlRE9DKGZsb29yLCBkb2NwdHIsIEZsb29yU2VsZWN0KTsKIAlXcml0ZURPQyhjaGlwLCBkb2NwdHIsIENEU05EZXZpY2VTZWxlY3QpOwogCi0JZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVROQ0UpOworCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DTURfTk9ORSwgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCWRvYy0+Y3VyY2hpcCA9IGNoaXA7CiAJZG9jLT5jdXJmbG9vciA9IGZsb29yOwogfQogCi1zdGF0aWMgdm9pZCBkb2MyMDB4X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKKyNkZWZpbmUgQ0RTTl9DVFJMX01TSyAoQ0RTTl9DVFJMX0NFIHwgQ0RTTl9DVFJMX0NMRSB8IENEU05fQ1RSTF9BTEUpCisKK3N0YXRpYyB2b2lkIGRvYzIwMHhfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJICAgICAgdW5zaWduZWQgaW50IGN0cmwpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCi0Jc3dpdGNoKGNtZCkgewotCWNhc2UgTkFORF9DVExfU0VUTkNFOgotCQlkb2MtPkNEU05Db250cm9sIHw9IENEU05fQ1RSTF9DRTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCWRvYy0+Q0RTTkNvbnRyb2wgJj0gfkNEU05fQ1RSTF9DRTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6Ci0JCWRvYy0+Q0RTTkNvbnRyb2wgfD0gQ0RTTl9DVFJMX0NMRTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6Ci0JCWRvYy0+Q0RTTkNvbnRyb2wgJj0gfkNEU05fQ1RSTF9DTEU7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotCQlkb2MtPkNEU05Db250cm9sIHw9IENEU05fQ1RSTF9BTEU7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotCQlkb2MtPkNEU05Db250cm9sICY9IH5DRFNOX0NUUkxfQUxFOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX1NFVFdQOgotCQlkb2MtPkNEU05Db250cm9sIHw9IENEU05fQ1RSTF9XUDsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJXUDoKLQkJZG9jLT5DRFNOQ29udHJvbCAmPSB+Q0RTTl9DVFJMX1dQOwotCQlicmVhazsKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJZG9jLT5DRFNOQ29udHJvbCAmPSB+Q0RTTl9DVFJMX01TSzsKKwkJZG9jLT5DRFNOQ29udHJvbCB8PSBjdHJsICYgQ0RTTl9DVFJMX01TSzsKKwkJaWYgKGRlYnVnKQorCQkJcHJpbnRrKCJod2NvbnRyb2woJWQpOiAlMDJ4XG4iLCBjbWQsIGRvYy0+Q0RTTkNvbnRyb2wpOworCQlXcml0ZURPQyhkb2MtPkNEU05Db250cm9sLCBkb2NwdHIsIENEU05Db250cm9sKTsKKwkJLyogMTEuNC4zIC0tIDQgTk9QcyBhZnRlciBDU0ROQ29udHJvbCB3cml0ZSAqLworCQlEb0NfRGVsYXkoZG9jLCA0KTsKIAl9Ci0JaWYgKGRlYnVnKXByaW50aygiaHdjb250cm9sKCVkKTogJTAyeFxuIiwgY21kLCBkb2MtPkNEU05Db250cm9sKTsKLQlXcml0ZURPQyhkb2MtPkNEU05Db250cm9sLCBkb2NwdHIsIENEU05Db250cm9sKTsKLQkvKiAxMS40LjMgLS0gNCBOT1BzIGFmdGVyIENTRE5Db250cm9sIHdyaXRlICovCi0JRG9DX0RlbGF5KGRvYywgNCk7CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKSB7CisJCWlmIChEb0NfaXNfMjAwMChkb2MpKQorCQkJZG9jMjAwMF93cml0ZV9ieXRlKG10ZCwgY21kKTsKKwkJZWxzZQorCQkJZG9jMjAwMV93cml0ZV9ieXRlKG10ZCwgY21kKTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGRvYzIwMDFwbHVzX2NvbW1hbmQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQorc3RhdGljIHZvaWQgZG9jMjAwMXBsdXNfY29tbWFuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAKIAkvKgogCSAqIE11c3QgdGVybWluYXRlIHdyaXRlIHBpcGVsaW5lIGJlZm9yZSBzZW5kaW5nIGFueSBjb21tYW5kcwpAQCAtNzU2LDkgKzc0Niw5IEBACiAJaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfU0VRSU4pIHsKIAkJaW50IHJlYWRjbWQ7CiAKLQkJaWYgKGNvbHVtbiA+PSBtdGQtPm9vYmJsb2NrKSB7CisJCWlmIChjb2x1bW4gPj0gbXRkLT53cml0ZXNpemUpIHsKIAkJCS8qIE9PQiBhcmVhICovCi0JCQljb2x1bW4gLT0gbXRkLT5vb2JibG9jazsKKwkJCWNvbHVtbiAtPSBtdGQtPndyaXRlc2l6ZTsKIAkJCXJlYWRjbWQgPSBOQU5EX0NNRF9SRUFET09COwogCQl9IGVsc2UgaWYgKGNvbHVtbiA8IDI1NikgewogCQkJLyogRmlyc3QgMjU2IGJ5dGVzIC0tPiBSRUFEMCAqLwpAQCAtNzgyLDI1ICs3NzIsMjYgQEAKIAkJCVdyaXRlRE9DKGNvbHVtbiwgZG9jcHRyLCBNcGx1c19GbGFzaEFkZHJlc3MpOwogCQl9CiAJCWlmIChwYWdlX2FkZHIgIT0gLTEpIHsKLQkJCVdyaXRlRE9DKCh1bnNpZ25lZCBjaGFyKSAocGFnZV9hZGRyICYgMHhmZiksIGRvY3B0ciwgTXBsdXNfRmxhc2hBZGRyZXNzKTsKLQkJCVdyaXRlRE9DKCh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpLCBkb2NwdHIsIE1wbHVzX0ZsYXNoQWRkcmVzcyk7CisJCQlXcml0ZURPQygodW5zaWduZWQgY2hhcikocGFnZV9hZGRyICYgMHhmZiksIGRvY3B0ciwgTXBsdXNfRmxhc2hBZGRyZXNzKTsKKwkJCVdyaXRlRE9DKCh1bnNpZ25lZCBjaGFyKSgocGFnZV9hZGRyID4+IDgpICYgMHhmZiksIGRvY3B0ciwgTXBsdXNfRmxhc2hBZGRyZXNzKTsKIAkJCS8qIE9uZSBtb3JlIGFkZHJlc3MgY3ljbGUgZm9yIGhpZ2hlciBkZW5zaXR5IGRldmljZXMgKi8KIAkJCWlmICh0aGlzLT5jaGlwc2l6ZSAmIDB4MGMwMDAwMDApIHsKLQkJCQlXcml0ZURPQygodW5zaWduZWQgY2hhcikgKChwYWdlX2FkZHIgPj4gMTYpICYgMHgwZiksIGRvY3B0ciwgTXBsdXNfRmxhc2hBZGRyZXNzKTsKKwkJCQlXcml0ZURPQygodW5zaWduZWQgY2hhcikoKHBhZ2VfYWRkciA+PiAxNikgJiAweDBmKSwgZG9jcHRyLCBNcGx1c19GbGFzaEFkZHJlc3MpOwogCQkJCXByaW50aygiaGlnaCBkZW5zaXR5XG4iKTsKIAkJCX0KIAkJfQogCQlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX1dyaXRlUGlwZVRlcm0pOwogCQlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX1dyaXRlUGlwZVRlcm0pOwogCQkvKiBkZWFzc2VydCBBTEUgKi8KLQkJaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRDAgfHwgY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFEMSB8fCBjb21tYW5kID09IE5BTkRfQ01EX1JFQURPT0IgfHwgY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFESUQpCisJCWlmIChjb21tYW5kID09IE5BTkRfQ01EX1JFQUQwIHx8IGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRDEgfHwKKwkJICAgIGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRE9PQiB8fCBjb21tYW5kID09IE5BTkRfQ01EX1JFQURJRCkKIAkJCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfRmxhc2hDb250cm9sKTsKIAl9CiAKIAkvKgogCSAqIHByb2dyYW0gYW5kIGVyYXNlIGhhdmUgdGhlaXIgb3duIGJ1c3kgaGFuZGxlcnMKIAkgKiBzdGF0dXMgYW5kIHNlcXVlbnRpYWwgaW4gbmVlZHMgbm8gZGVsYXkKLQkqLworCSAqLwogCXN3aXRjaCAoY29tbWFuZCkgewogCiAJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKQEAgLTgxNyw1NSArODA4LDU3IEBACiAJCVdyaXRlRE9DKE5BTkRfQ01EX1NUQVRVUywgZG9jcHRyLCBNcGx1c19GbGFzaENtZCk7CiAJCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfV3JpdGVQaXBlVGVybSk7CiAJCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfV3JpdGVQaXBlVGVybSk7Ci0JCXdoaWxlICggISh0aGlzLT5yZWFkX2J5dGUobXRkKSAmIDB4NDApKTsKKwkJd2hpbGUgKCEodGhpcy0+cmVhZF9ieXRlKG10ZCkgJiAweDQwKSkgOwogCQlyZXR1cm47CiAKLQkvKiBUaGlzIGFwcGxpZXMgdG8gcmVhZCBjb21tYW5kcyAqLworCQkvKiBUaGlzIGFwcGxpZXMgdG8gcmVhZCBjb21tYW5kcyAqLwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIElmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBidXN5IHBpbiwgd2UgYXBwbHkgdGhlIGdpdmVuCiAJCSAqIGNvbW1hbmQgZGVsYXkKLQkJKi8KKwkJICovCiAJCWlmICghdGhpcy0+ZGV2X3JlYWR5KSB7Ci0JCQl1ZGVsYXkgKHRoaXMtPmNoaXBfZGVsYXkpOworCQkJdWRlbGF5KHRoaXMtPmNoaXBfZGVsYXkpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCiAJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4KIAkgKiBhbnkgY2FzZSBvbiBhbnkgbWFjaGluZS4gKi8KLQluZGVsYXkgKDEwMCk7CisJbmRlbGF5KDEwMCk7CiAJLyogd2FpdCB1bnRpbCBjb21tYW5kIGlzIHByb2Nlc3NlZCAqLwotCXdoaWxlICghdGhpcy0+ZGV2X3JlYWR5KG10ZCkpOworCXdoaWxlICghdGhpcy0+ZGV2X3JlYWR5KG10ZCkpIDsKIH0KIAogc3RhdGljIGludCBkb2MyMDB4X2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAKIAlpZiAoRG9DX2lzX01pbGxlbm5pdW1QbHVzKGRvYykpIHsKIAkJLyogMTEuNC4yIC0tIG11c3QgTk9QIGZvdXIgdGltZXMgYmVmb3JlIGNoZWNraW5nIEZSL0IjICovCiAJCURvQ19EZWxheShkb2MsIDQpOwogCQlpZiAoKFJlYWRET0MoZG9jcHRyLCBNcGx1c19GbGFzaENvbnRyb2wpICYgQ0RTTl9DVFJMX0ZSX0JfTUFTSykgIT0gQ0RTTl9DVFJMX0ZSX0JfTUFTSykgewotCQkJaWYoZGVidWcpCisJCQlpZiAoZGVidWcpCiAJCQkJcHJpbnRrKCJub3QgcmVhZHlcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJaWYgKGRlYnVnKXByaW50aygid2FzIHJlYWR5XG4iKTsKKwkJaWYgKGRlYnVnKQorCQkJcHJpbnRrKCJ3YXMgcmVhZHlcbiIpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewogCQkvKiAxMS40LjIgLS0gbXVzdCBOT1AgZm91ciB0aW1lcyBiZWZvcmUgY2hlY2tpbmcgRlIvQiMgKi8KIAkJRG9DX0RlbGF5KGRvYywgNCk7CiAJCWlmICghKFJlYWRET0MoZG9jcHRyLCBDRFNOQ29udHJvbCkgJiBDRFNOX0NUUkxfRlJfQikpIHsKLQkJCWlmKGRlYnVnKQorCQkJaWYgKGRlYnVnKQogCQkJCXByaW50aygibm90IHJlYWR5XG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCS8qIDExLjQuMiAtLSBNdXN0IE5PUCB0d2ljZSBpZiBpdCdzIHJlYWR5ICovCiAJCURvQ19EZWxheShkb2MsIDIpOwotCQlpZiAoZGVidWcpcHJpbnRrKCJ3YXMgcmVhZHlcbiIpOworCQlpZiAoZGVidWcpCisJCQlwcmludGsoIndhcyByZWFkeVxuIik7CiAJCXJldHVybiAxOwogCX0KIH0KQEAgLTg4MSwxMCArODc0LDEwIEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCiAJLyogUHJpbWUgdGhlIEVDQyBlbmdpbmUgKi8KLQlzd2l0Y2gobW9kZSkgeworCXN3aXRjaCAobW9kZSkgewogCWNhc2UgTkFORF9FQ0NfUkVBRDoKIAkJV3JpdGVET0MoRE9DX0VDQ19SRVNFVCwgZG9jcHRyLCBFQ0NDb25mKTsKIAkJV3JpdGVET0MoRE9DX0VDQ19FTiwgZG9jcHRyLCBFQ0NDb25mKTsKQEAgLTkwMCwxMCArODkzLDEwIEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCiAJLyogUHJpbWUgdGhlIEVDQyBlbmdpbmUgKi8KLQlzd2l0Y2gobW9kZSkgeworCXN3aXRjaCAobW9kZSkgewogCWNhc2UgTkFORF9FQ0NfUkVBRDoKIAkJV3JpdGVET0MoRE9DX0VDQ19SRVNFVCwgZG9jcHRyLCBNcGx1c19FQ0NDb25mKTsKIAkJV3JpdGVET0MoRE9DX0VDQ19FTiwgZG9jcHRyLCBNcGx1c19FQ0NDb25mKTsKQEAgLTkxNiwxMiArOTA5LDExIEBACiB9CiAKIC8qIFRoaXMgY29kZSBpcyBvbmx5IGNhbGxlZCBvbiB3cml0ZSAqLwotc3RhdGljIGludCBkb2MyMDB4X2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LAotCQkJCSB1bnNpZ25lZCBjaGFyICplY2NfY29kZSkKK3N0YXRpYyBpbnQgZG9jMjAweF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdW5zaWduZWQgY2hhciAqZWNjX2NvZGUpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCWludCBpOwogCWludCBlbXB0eW1hdGNoID0gMTsKIApAQCAtOTYxLDcgKzk1Myw4IEBACiAJCSAgIG9mdGVuLiAgSXQgY291bGQgYmUgb3B0aW1pemVkIGF3YXkgYnkgZXhhbWluaW5nIHRoZSBkYXRhIGluCiAJCSAgIHRoZSB3cml0ZWJ1ZiByb3V0aW5lLCBhbmQgcmVtZW1iZXJpbmcgdGhlIHJlc3VsdC4gKi8KIAkJZm9yIChpID0gMDsgaSA8IDUxMjsgaSsrKSB7Ci0JCQlpZiAoZGF0W2ldID09IDB4ZmYpIGNvbnRpbnVlOworCQkJaWYgKGRhdFtpXSA9PSAweGZmKQorCQkJCWNvbnRpbnVlOwogCQkJZW1wdHltYXRjaCA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtOTY5LDE3ICs5NjIsMjAgQEAKIAkvKiBJZiBlbXB0eW1hdGNoIHN0aWxsID0xLCB3ZSBkbyBoYXZlIGFuIGFsbC0weGZmIGRhdGEgYnVmZmVyLgogCSAgIFJldHVybiBhbGwtMHhmZiBlY2MgdmFsdWUgaW5zdGVhZCBvZiB0aGUgY29tcHV0ZWQgb25lLCBzbwogCSAgIGl0J2xsIGxvb2sganVzdCBsaWtlIGEgZnJlc2hseS1lcmFzZWQgcGFnZS4gKi8KLQlpZiAoZW1wdHltYXRjaCkgbWVtc2V0KGVjY19jb2RlLCAweGZmLCA2KTsKKwlpZiAoZW1wdHltYXRjaCkKKwkJbWVtc2V0KGVjY19jb2RlLCAweGZmLCA2KTsKICNlbmRpZgogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvYzIwMHhfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKK3N0YXRpYyBpbnQgZG9jMjAweF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAorCQkJCXVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqaXNudWxsKQogewogCWludCBpLCByZXQgPSAwOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl1aW50OF90IGNhbGNfZWNjWzZdOwogCXZvbGF0aWxlIHVfY2hhciBkdW1teTsKIAlpbnQgZW1wdHltYXRjaCA9IDE7CiAKQEAgLTEwMTIsMTggKzEwMDgsMjAgQEAKIAkJICAgYWxsLTB4ZmYgZGF0YSBhbmQgc3RvcmVkIGVjYyBibG9jay4gIENoZWNrIHRoZSBzdG9yZWQgZWNjLiAqLwogCQlpZiAoZW1wdHltYXRjaCkgewogCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQkJCWlmIChyZWFkX2VjY1tpXSA9PSAweGZmKSBjb250aW51ZTsKKwkJCQlpZiAocmVhZF9lY2NbaV0gPT0gMHhmZikKKwkJCQkJY29udGludWU7CiAJCQkJZW1wdHltYXRjaCA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJLyogSWYgZW1wdHltYXRjaCBzdGlsbCA9MSwgY2hlY2sgdGhlIGRhdGEgYmxvY2suICovCiAJCWlmIChlbXB0eW1hdGNoKSB7Ci0JCS8qIE5vdGU6IHRoaXMgc29tZXdoYXQgZXhwZW5zaXZlIHRlc3Qgc2hvdWxkIG5vdCBiZSB0cmlnZ2VyZWQKLQkJICAgb2Z0ZW4uICBJdCBjb3VsZCBiZSBvcHRpbWl6ZWQgYXdheSBieSBleGFtaW5pbmcgdGhlIGRhdGEgaW4KLQkJICAgdGhlIHJlYWRidWYgcm91dGluZSwgYW5kIHJlbWVtYmVyaW5nIHRoZSByZXN1bHQuICovCisJCQkvKiBOb3RlOiB0aGlzIHNvbWV3aGF0IGV4cGVuc2l2ZSB0ZXN0IHNob3VsZCBub3QgYmUgdHJpZ2dlcmVkCisJCQkgICBvZnRlbi4gIEl0IGNvdWxkIGJlIG9wdGltaXplZCBhd2F5IGJ5IGV4YW1pbmluZyB0aGUgZGF0YSBpbgorCQkJICAgdGhlIHJlYWRidWYgcm91dGluZSwgYW5kIHJlbWVtYmVyaW5nIHRoZSByZXN1bHQuICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspIHsKLQkJCQlpZiAoZGF0W2ldID09IDB4ZmYpIGNvbnRpbnVlOworCQkJCWlmIChkYXRbaV0gPT0gMHhmZikKKwkJCQkJY29udGludWU7CiAJCQkJZW1wdHltYXRjaCA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMDMyLDcgKzEwMzAsOCBAQAogCQkgICBlcmFzZWQgYmxvY2ssIGluIHdoaWNoIGNhc2UgdGhlIEVDQyB3aWxsIG5vdCBjb21lIG91dCByaWdodC4KIAkJICAgV2UnbGwgc3VwcHJlc3MgdGhlIGVycm9yIGFuZCB0ZWxsIHRoZSBjYWxsZXIgZXZlcnl0aGluZydzCiAJCSAgIE9LLiAgQmVjYXVzZSBpdCBpcy4gKi8KLQkJaWYgKCFlbXB0eW1hdGNoKSByZXQgPSBkb2NfZWNjX2RlY29kZSAocnNfZGVjb2RlciwgZGF0LCBjYWxjX2VjYyk7CisJCWlmICghZW1wdHltYXRjaCkKKwkJCXJldCA9IGRvY19lY2NfZGVjb2RlKHJzX2RlY29kZXIsIGRhdCwgY2FsY19lY2MpOwogCQlpZiAocmV0ID4gMCkKIAkJCXByaW50ayhLRVJOX0VSUiAiZG9jMjAweF9jb3JyZWN0X2RhdGEgY29ycmVjdGVkICVkIGVycm9yc1xuIiwgcmV0KTsKIAl9CkBAIC0xMDU5LDExICsxMDU4LDEwIEBACiAgKiBzYWZlci4gIFRoZSBvbmx5IHByb2JsZW0gd2l0aCBpdCBpcyB0aGF0IGFueSBjb2RlIHRoYXQgcGFyc2VzIG9vYmZyZWUgbXVzdAogICogYmUgYWJsZSB0byBoYW5kbGUgb3V0LW9mLW9yZGVyIHNlZ21lbnRzLgogICovCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBkb2MyMDB4X29vYmluZm8gPSB7Ci0gICAgICAgIC51c2VlY2MgPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCi0gICAgICAgIC5lY2NieXRlcyA9IDYsCi0gICAgICAgIC5lY2Nwb3MgPSB7MCwgMSwgMiwgMywgNCwgNX0sCi0gICAgICAgIC5vb2JmcmVlID0geyB7OCwgOH0sIHs2LCAyfSB9CitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGRvYzIwMHhfb29iaW5mbyA9IHsKKwkuZWNjYnl0ZXMgPSA2LAorCS5lY2Nwb3MgPSB7MCwgMSwgMiwgMywgNCwgNX0sCisJLm9vYmZyZWUgPSB7ezgsIDh9LCB7NiwgMn19CiB9OwogCiAvKiBGaW5kIHRoZSAoSSlORlRMIE1lZGlhIEhlYWRlciwgYW5kIG9wdGlvbmFsbHkgYWxzbyB0aGUgbWlycm9yIG1lZGlhIGhlYWRlci4KQEAgLTEwNzIsOCArMTA3MCw3IEBACiAgICBlaXRoZXIgIkFOQU5EIiBvciAiQk5BTkQiLiAgSWYgZmluZG1pcnJvcj0xLCBhbHNvIGxvb2sgZm9yIHRoZSBtaXJyb3IgbWVkaWEKICAgIGhlYWRlci4gIFRoZSBwYWdlICNzIG9mIHRoZSBmb3VuZCBtZWRpYSBoZWFkZXJzIGFyZSBwbGFjZWQgaW4gbWgwX3BhZ2UgYW5kCiAgICBtaDFfcGFnZSBpbiB0aGUgRE9DIHByaXZhdGUgc3RydWN0dXJlLiAqLwotc3RhdGljIGludCBfX2luaXQgZmluZF9tZWRpYV9oZWFkZXJzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKmlkLCBpbnQgZmluZG1pcnJvcikKK3N0YXRpYyBpbnQgX19pbml0IGZpbmRfbWVkaWFfaGVhZGVycyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGNvbnN0IGNoYXIgKmlkLCBpbnQgZmluZG1pcnJvcikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKQEAgLTEwODIsMTcgKzEwNzksMTkgQEAKIAlzaXplX3QgcmV0bGVuOwogCiAJZm9yIChvZmZzID0gMDsgb2ZmcyA8IG10ZC0+c2l6ZTsgb2ZmcyArPSBtdGQtPmVyYXNlc2l6ZSkgewotCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBvZmZzLCBtdGQtPm9vYmJsb2NrLCAmcmV0bGVuLCBidWYpOwotCQlpZiAocmV0bGVuICE9IG10ZC0+b29iYmxvY2spIGNvbnRpbnVlOworCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBvZmZzLCBtdGQtPndyaXRlc2l6ZSwgJnJldGxlbiwgYnVmKTsKKwkJaWYgKHJldGxlbiAhPSBtdGQtPndyaXRlc2l6ZSkKKwkJCWNvbnRpbnVlOwogCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJFQ0MgZXJyb3Igc2Nhbm5pbmcgRE9DIGF0IDB4JXhcbiIsCi0JCQkJb2Zmcyk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJFQ0MgZXJyb3Igc2Nhbm5pbmcgRE9DIGF0IDB4JXhcbiIsIG9mZnMpOwogCQl9Ci0JCWlmIChtZW1jbXAoYnVmLCBpZCwgNikpIGNvbnRpbnVlOworCQlpZiAobWVtY21wKGJ1ZiwgaWQsIDYpKQorCQkJY29udGludWU7CiAJCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIERpc2tPbkNoaXAgJXMgTWVkaWEgSGVhZGVyIGF0IDB4JXhcbiIsIGlkLCBvZmZzKTsKIAkJaWYgKGRvYy0+bWgwX3BhZ2UgPT0gLTEpIHsKIAkJCWRvYy0+bWgwX3BhZ2UgPSBvZmZzID4+IHRoaXMtPnBhZ2Vfc2hpZnQ7Ci0JCQlpZiAoIWZpbmRtaXJyb3IpIHJldHVybiAxOworCQkJaWYgKCFmaW5kbWlycm9yKQorCQkJCXJldHVybiAxOwogCQkJY29udGludWU7CiAJCX0KIAkJZG9jLT5taDFfcGFnZSA9IG9mZnMgPj4gdGhpcy0+cGFnZV9zaGlmdDsKQEAgLTExMDUsOCArMTEwNCw4IEBACiAJLyogT25seSBvbmUgbWVkaWFoZWFkZXIgd2FzIGZvdW5kLiAgV2Ugd2FudCBidWYgdG8gY29udGFpbiBhCiAJICAgbWVkaWFoZWFkZXIgb24gcmV0dXJuLCBzbyB3ZSdsbCBoYXZlIHRvIHJlLXJlYWQgdGhlIG9uZSB3ZSBmb3VuZC4gKi8KIAlvZmZzID0gZG9jLT5taDBfcGFnZSA8PCB0aGlzLT5wYWdlX3NoaWZ0OwotCXJldCA9IG10ZC0+cmVhZChtdGQsIG9mZnMsIG10ZC0+b29iYmxvY2ssICZyZXRsZW4sIGJ1Zik7Ci0JaWYgKHJldGxlbiAhPSBtdGQtPm9vYmJsb2NrKSB7CisJcmV0ID0gbXRkLT5yZWFkKG10ZCwgb2ZmcywgbXRkLT53cml0ZXNpemUsICZyZXRsZW4sIGJ1Zik7CisJaWYgKHJldGxlbiAhPSBtdGQtPndyaXRlc2l6ZSkgewogCQkvKiBJbnNhbml0eS4gIEdpdmUgdXAuICovCiAJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBEaXNrT25DaGlwIE1lZGlhIEhlYWRlciBvbmNlLCBidXQgY2FuJ3QgcmVyZWFkIGl0Pz8/XG4iKTsKIAkJcmV0dXJuIDA7CkBAIC0xMTE0LDggKzExMTMsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgbmZ0bF9wYXJ0c2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMpCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgbmZ0bF9wYXJ0c2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwpAQCAtMTEyNywxMyArMTEyNSwxNCBAQAogCXVuc2lnbmVkIGJsb2NrcywgbWF4YmxvY2tzOwogCWludCBvZmZzLCBudW1oZWFkZXJzOwogCi0JYnVmID0ga21hbGxvYyhtdGQtPm9vYmJsb2NrLCBHRlBfS0VSTkVMKTsKKwlidWYgPSBrbWFsbG9jKG10ZC0+d3JpdGVzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewogCQlwcmludGsoS0VSTl9FUlIgIkRpc2tPbkNoaXAgbWVkaWFoZWFkZXIga21hbGxvYyBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghKG51bWhlYWRlcnM9ZmluZF9tZWRpYV9oZWFkZXJzKG10ZCwgYnVmLCAiQU5BTkQiLCAxKSkpIGdvdG8gb3V0OwotCW1oID0gKHN0cnVjdCBORlRMTWVkaWFIZWFkZXIgKikgYnVmOworCWlmICghKG51bWhlYWRlcnMgPSBmaW5kX21lZGlhX2hlYWRlcnMobXRkLCBidWYsICJBTkFORCIsIDEpKSkKKwkJZ290byBvdXQ7CisJbWggPSAoc3RydWN0IE5GVExNZWRpYUhlYWRlciAqKWJ1ZjsKIAogCW1oLT5OdW1FcmFzZVVuaXRzID0gbGUxNl90b19jcHUobWgtPk51bUVyYXNlVW5pdHMpOwogCW1oLT5GaXJzdFBoeXNpY2FsRVVOID0gbGUxNl90b19jcHUobWgtPkZpcnN0UGh5c2ljYWxFVU4pOwpAQCAtMTE1NSw4ICsxMTU0LDggQEAKIAkJLyogQXV0by1kZXRlcm1pbmUgVW5pdFNpemVGYWN0b3IuICBUaGUgY29uc3RyYWludHMgYXJlOgogCQkgICAtIFRoZXJlIGNhbiBiZSBhdCBtb3N0IDMyNzY4IHZpcnR1YWwgYmxvY2tzLgogCQkgICAtIFRoZXJlIGNhbiBiZSBhdCBtb3N0ICh2aXJ0dWFsIGJsb2NrIHNpemUgLSBwYWdlIHNpemUpCi0JCSAgICAgdmlydHVhbCBibG9ja3MgKGJlY2F1c2UgTWVkaWFIZWFkZXIrQkJUIG11c3QgZml0IGluIDEpLgotCQkqLworCQkgICB2aXJ0dWFsIGJsb2NrcyAoYmVjYXVzZSBNZWRpYUhlYWRlcitCQlQgbXVzdCBmaXQgaW4gMSkuCisJCSAqLwogCQltaC0+VW5pdFNpemVGYWN0b3IgPSAweGZmOwogCQl3aGlsZSAoYmxvY2tzID4gbWF4YmxvY2tzKSB7CiAJCQlibG9ja3MgPj49IDE7CkBAIC0xMjExLDE0ICsxMjEwLDEzIEBACiAJfQogCiAJcmV0ID0gbnVtcGFydHM7Ci1vdXQ6Cisgb3V0OgogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KIAogLyogVGhpcyBpcyBhIHN0cmlwcGVkLWRvd24gY29weSBvZiB0aGUgY29kZSBpbiBpbmZ0bG1vdW50LmMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBpbmZ0bF9wYXJ0c2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCQkgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzKQorc3RhdGljIGlubGluZSBpbnQgX19pbml0IGluZnRsX3BhcnRzY2FuKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7CkBAIC0xMjM1LDE1ICsxMjMzLDE2IEBACiAJaWYgKGluZnRsX2JidF93cml0ZSkKIAkJZW5kIC09IChJTkZUTF9CQlRfUkVTRVJWRURfQkxPQ0tTIDw8IHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQpOwogCi0JYnVmID0ga21hbGxvYyhtdGQtPm9vYmJsb2NrLCBHRlBfS0VSTkVMKTsKKwlidWYgPSBrbWFsbG9jKG10ZC0+d3JpdGVzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewogCQlwcmludGsoS0VSTl9FUlIgIkRpc2tPbkNoaXAgbWVkaWFoZWFkZXIga21hbGxvYyBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFmaW5kX21lZGlhX2hlYWRlcnMobXRkLCBidWYsICJCTkFORCIsIDApKSBnb3RvIG91dDsKKwlpZiAoIWZpbmRfbWVkaWFfaGVhZGVycyhtdGQsIGJ1ZiwgIkJOQU5EIiwgMCkpCisJCWdvdG8gb3V0OwogCWRvYy0+bWgxX3BhZ2UgPSBkb2MtPm1oMF9wYWdlICsgKDQwOTYgPj4gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JbWggPSAoc3RydWN0IElORlRMTWVkaWFIZWFkZXIgKikgYnVmOworCW1oID0gKHN0cnVjdCBJTkZUTE1lZGlhSGVhZGVyICopYnVmOwogCiAJbWgtPk5vT2ZCb290SW1hZ2VCbG9ja3MgPSBsZTMyX3RvX2NwdShtaC0+Tm9PZkJvb3RJbWFnZUJsb2Nrcyk7CiAJbWgtPk5vT2ZCaW5hcnlQYXJ0aXRpb25zID0gbGUzMl90b19jcHUobWgtPk5vT2ZCaW5hcnlQYXJ0aXRpb25zKTsKQEAgLTEzMTksOCArMTMxOCwxMCBAQAogCQlwYXJ0c1tudW1wYXJ0c10ub2Zmc2V0ID0gaXAtPmZpcnN0VW5pdCA8PCB2c2hpZnQ7CiAJCXBhcnRzW251bXBhcnRzXS5zaXplID0gKDEgKyBpcC0+bGFzdFVuaXQgLSBpcC0+Zmlyc3RVbml0KSA8PCB2c2hpZnQ7CiAJCW51bXBhcnRzKys7Ci0JCWlmIChpcC0+bGFzdFVuaXQgPiBsYXN0dnVuaXQpIGxhc3R2dW5pdCA9IGlwLT5sYXN0VW5pdDsKLQkJaWYgKGlwLT5mbGFncyAmIElORlRMX0xBU1QpIGJyZWFrOworCQlpZiAoaXAtPmxhc3RVbml0ID4gbGFzdHZ1bml0KQorCQkJbGFzdHZ1bml0ID0gaXAtPmxhc3RVbml0OworCQlpZiAoaXAtPmZsYWdzICYgSU5GVExfTEFTVCkKKwkJCWJyZWFrOwogCX0KIAlsYXN0dnVuaXQrKzsKIAlpZiAoKGxhc3R2dW5pdCA8PCB2c2hpZnQpIDwgZW5kKSB7CkBAIC0xMzMwLDcgKzEzMzEsNyBAQAogCQludW1wYXJ0cysrOwogCX0KIAlyZXQgPSBudW1wYXJ0czsKLW91dDoKKyBvdXQ6CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTM0MiwxMSArMTM0MywxMiBAQAogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0c1syXTsKIAotCW1lbXNldCgoY2hhciAqKSBwYXJ0cywgMCwgc2l6ZW9mKHBhcnRzKSk7CisJbWVtc2V0KChjaGFyICopcGFydHMsIDAsIHNpemVvZihwYXJ0cykpOwogCS8qIE9uIE5GVEwsIHdlIGhhdmUgdG8gZmluZCB0aGUgbWVkaWEgaGVhZGVycyBiZWZvcmUgd2UgY2FuIHJlYWQgdGhlCiAJICAgQkJUcywgc2luY2UgdGhleSdyZSBzdG9yZWQgaW4gdGhlIG1lZGlhIGhlYWRlciBlcmFzZWJsb2Nrcy4gKi8KIAludW1wYXJ0cyA9IG5mdGxfcGFydHNjYW4obXRkLCBwYXJ0cyk7Ci0JaWYgKCFudW1wYXJ0cykgcmV0dXJuIC1FSU87CisJaWYgKCFudW1wYXJ0cykKKwkJcmV0dXJuIC1FSU87CiAJdGhpcy0+YmJ0X3RkLT5vcHRpb25zID0gTkFORF9CQlRfQUJTUEFHRSB8IE5BTkRfQkJUXzhCSVQgfAogCQkJCU5BTkRfQkJUX1NBVkVDT05URU5UIHwgTkFORF9CQlRfV1JJVEUgfAogCQkJCU5BTkRfQkJUX1ZFUlNJT047CkBAIC0xMzkzLDggKzEzOTUsNyBAQAogCQl0aGlzLT5iYnRfdGQtPnBhZ2VzWzBdID0gMjsKIAkJdGhpcy0+YmJ0X21kID0gTlVMTDsKIAl9IGVsc2UgewotCQl0aGlzLT5iYnRfdGQtPm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF84QklUIHwKLQkJCQkJTkFORF9CQlRfVkVSU0lPTjsKKwkJdGhpcy0+YmJ0X3RkLT5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfOEJJVCB8IE5BTkRfQkJUX1ZFUlNJT047CiAJCWlmIChpbmZ0bF9iYnRfd3JpdGUpCiAJCQl0aGlzLT5iYnRfdGQtPm9wdGlvbnMgfD0gTkFORF9CQlRfV1JJVEU7CiAJCXRoaXMtPmJidF90ZC0+b2ZmcyA9IDg7CkBAIC0xNDA0LDggKzE0MDUsNyBAQAogCQl0aGlzLT5iYnRfdGQtPnJlc2VydmVkX2Jsb2NrX2NvZGUgPSAweDAxOwogCQl0aGlzLT5iYnRfdGQtPnBhdHRlcm4gPSAiTVNZU19CQlQiOwogCi0JCXRoaXMtPmJidF9tZC0+b3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUXzhCSVQgfAotCQkJCQlOQU5EX0JCVF9WRVJTSU9OOworCQl0aGlzLT5iYnRfbWQtPm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF84QklUIHwgTkFORF9CQlRfVkVSU0lPTjsKIAkJaWYgKGluZnRsX2JidF93cml0ZSkKIAkJCXRoaXMtPmJidF9tZC0+b3B0aW9ucyB8PSBOQU5EX0JCVF9XUklURTsKIAkJdGhpcy0+YmJ0X21kLT5vZmZzID0gODsKQEAgLTE0MjAsMTIgKzE0MjAsMTMgQEAKIAkgICBBdCBsZWFzdCBhcyBuYW5kX2JidC5jIGlzIGN1cnJlbnRseSB3cml0dGVuLiAqLwogCWlmICgocmV0ID0gbmFuZF9zY2FuX2JidChtdGQsIE5VTEwpKSkKIAkJcmV0dXJuIHJldDsKLQltZW1zZXQoKGNoYXIgKikgcGFydHMsIDAsIHNpemVvZihwYXJ0cykpOworCW1lbXNldCgoY2hhciAqKXBhcnRzLCAwLCBzaXplb2YocGFydHMpKTsKIAludW1wYXJ0cyA9IGluZnRsX3BhcnRzY2FuKG10ZCwgcGFydHMpOwogCS8qIEF0IGxlYXN0IGZvciBub3csIHJlcXVpcmUgdGhlIElORlRMIE1lZGlhIEhlYWRlci4gIFdlIGNvdWxkIHByb2JhYmx5CiAJICAgZG8gd2l0aG91dCBpdCBmb3Igbm9uLUlORlRMIHVzZSwgc2luY2UgYWxsIGl0IGdpdmVzIHVzIGlzCiAJICAgYXV0b3BhcnRpdGlvbmluZywgYnV0IEkgd2FudCB0byBnaXZlIGl0IG1vcmUgdGhvdWdodC4gKi8KLQlpZiAoIW51bXBhcnRzKSByZXR1cm4gLUVJTzsKKwlpZiAoIW51bXBhcnRzKQorCQlyZXR1cm4gLUVJTzsKIAlhZGRfbXRkX2RldmljZShtdGQpOwogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCWlmICghbm9fYXV0b3BhcnQpCkBAIC0xNDM5LDcgKzE0NDAsNiBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwogCi0JdGhpcy0+d3JpdGVfYnl0ZSA9IGRvYzIwMDBfd3JpdGVfYnl0ZTsKIAl0aGlzLT5yZWFkX2J5dGUgPSBkb2MyMDAwX3JlYWRfYnl0ZTsKIAl0aGlzLT53cml0ZV9idWYgPSBkb2MyMDAwX3dyaXRlYnVmOwogCXRoaXMtPnJlYWRfYnVmID0gZG9jMjAwMF9yZWFkYnVmOwpAQCAtMTQ1Nyw3ICsxNDU3LDYgQEAKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKIAotCXRoaXMtPndyaXRlX2J5dGUgPSBkb2MyMDAxX3dyaXRlX2J5dGU7CiAJdGhpcy0+cmVhZF9ieXRlID0gZG9jMjAwMV9yZWFkX2J5dGU7CiAJdGhpcy0+d3JpdGVfYnVmID0gZG9jMjAwMV93cml0ZWJ1ZjsKIAl0aGlzLT5yZWFkX2J1ZiA9IGRvYzIwMDFfcmVhZGJ1ZjsKQEAgLTE0ODksMTYgKzE0ODgsMTUgQEAKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKIAotCXRoaXMtPndyaXRlX2J5dGUgPSBOVUxMOwogCXRoaXMtPnJlYWRfYnl0ZSA9IGRvYzIwMDFwbHVzX3JlYWRfYnl0ZTsKIAl0aGlzLT53cml0ZV9idWYgPSBkb2MyMDAxcGx1c193cml0ZWJ1ZjsKIAl0aGlzLT5yZWFkX2J1ZiA9IGRvYzIwMDFwbHVzX3JlYWRidWY7CiAJdGhpcy0+dmVyaWZ5X2J1ZiA9IGRvYzIwMDFwbHVzX3ZlcmlmeWJ1ZjsKIAl0aGlzLT5zY2FuX2JidCA9IGluZnRsX3NjYW5fYmJ0OwotCXRoaXMtPmh3Y29udHJvbCA9IE5VTEw7CisJdGhpcy0+Y21kX2N0cmwgPSBOVUxMOwogCXRoaXMtPnNlbGVjdF9jaGlwID0gZG9jMjAwMXBsdXNfc2VsZWN0X2NoaXA7CiAJdGhpcy0+Y21kZnVuYyA9IGRvYzIwMDFwbHVzX2NvbW1hbmQ7Ci0JdGhpcy0+ZW5hYmxlX2h3ZWNjID0gZG9jMjAwMXBsdXNfZW5hYmxlX2h3ZWNjOworCXRoaXMtPmVjYy5od2N0bCA9IGRvYzIwMDFwbHVzX2VuYWJsZV9od2VjYzsKIAogCWRvYy0+Y2hpcHNfcGVyX2Zsb29yID0gMTsKIAltdGQtPm5hbWUgPSAiRGlza09uQ2hpcCBNaWxsZW5uaXVtIFBsdXMiOwpAQCAtMTUzNSwyMCArMTUzMywxNiBAQAogCXNhdmVfY29udHJvbCA9IFJlYWRET0ModmlydGFkciwgRE9DQ29udHJvbCk7CiAKIAkvKiBSZXNldCB0aGUgRGlza09uQ2hpcCBBU0lDICovCi0JV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JFU0VULAotCQkgdmlydGFkciwgRE9DQ29udHJvbCk7Ci0JV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JFU0VULAotCQkgdmlydGFkciwgRE9DQ29udHJvbCk7CisJV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JFU0VULCB2aXJ0YWRyLCBET0NDb250cm9sKTsKKwlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUkVTRVQsIHZpcnRhZHIsIERPQ0NvbnRyb2wpOwogCiAJLyogRW5hYmxlIHRoZSBEaXNrT25DaGlwIEFTSUMgKi8KLQlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfTk9STUFMLAotCQkgdmlydGFkciwgRE9DQ29udHJvbCk7Ci0JV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX05PUk1BTCwKLQkJIHZpcnRhZHIsIERPQ0NvbnRyb2wpOworCVdyaXRlRE9DKERPQ19NT0RFX0NMUl9FUlIgfCBET0NfTU9ERV9NRFdSRU4gfCBET0NfTU9ERV9OT1JNQUwsIHZpcnRhZHIsIERPQ0NvbnRyb2wpOworCVdyaXRlRE9DKERPQ19NT0RFX0NMUl9FUlIgfCBET0NfTU9ERV9NRFdSRU4gfCBET0NfTU9ERV9OT1JNQUwsIHZpcnRhZHIsIERPQ0NvbnRyb2wpOwogCiAJQ2hpcElEID0gUmVhZERPQyh2aXJ0YWRyLCBDaGlwSUQpOwogCi0Jc3dpdGNoKENoaXBJRCkgeworCXN3aXRjaCAoQ2hpcElEKSB7CiAJY2FzZSBET0NfQ2hpcElEX0RvYzJrOgogCQlyZWcgPSBEb0NfMmtfRUNDU3RhdHVzOwogCQlicmVhazsKQEAgLTE1NjQsMTUgKzE1NTgsMTMgQEAKIAkJCVJlYWRET0ModmlydGFkciwgTXBsdXNfUG93ZXIpOwogCiAJCS8qIFJlc2V0IHRoZSBNaWxsZW5uaXVtIFBsdXMgQVNJQyAqLwotCQl0bXAgPSBET0NfTU9ERV9SRVNFVCB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JTVF9MQVQgfAotCQkJRE9DX01PREVfQkRFQ1Q7CisJCXRtcCA9IERPQ19NT0RFX1JFU0VUIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUlNUX0xBVCB8IERPQ19NT0RFX0JERUNUOwogCQlXcml0ZURPQyh0bXAsIHZpcnRhZHIsIE1wbHVzX0RPQ0NvbnRyb2wpOwogCQlXcml0ZURPQyh+dG1wLCB2aXJ0YWRyLCBNcGx1c19DdHJsQ29uZmlybSk7CiAKIAkJbWRlbGF5KDEpOwogCQkvKiBFbmFibGUgdGhlIE1pbGxlbm5pdW0gUGx1cyBBU0lDICovCi0JCXRtcCA9IERPQ19NT0RFX05PUk1BTCB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JTVF9MQVQgfAotCQkJRE9DX01PREVfQkRFQ1Q7CisJCXRtcCA9IERPQ19NT0RFX05PUk1BTCB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JTVF9MQVQgfCBET0NfTU9ERV9CREVDVDsKIAkJV3JpdGVET0ModG1wLCB2aXJ0YWRyLCBNcGx1c19ET0NDb250cm9sKTsKIAkJV3JpdGVET0MofnRtcCwgdmlydGFkciwgTXBsdXNfQ3RybENvbmZpcm0pOwogCQltZGVsYXkoMSk7CkBAIC0xNTk2LDcgKzE1ODgsNyBAQAogCQlnb3RvIG5vdGZvdW5kOwogCX0KIAkvKiBDaGVjayB0aGUgVE9HR0xFIGJpdCBpbiB0aGUgRUNDIHJlZ2lzdGVyICovCi0JdG1wICA9IFJlYWRET0NfKHZpcnRhZHIsIHJlZykgJiBET0NfVE9HR0xFX0JJVDsKKwl0bXAgPSBSZWFkRE9DXyh2aXJ0YWRyLCByZWcpICYgRE9DX1RPR0dMRV9CSVQ7CiAJdG1wYiA9IFJlYWRET0NfKHZpcnRhZHIsIHJlZykgJiBET0NfVE9HR0xFX0JJVDsKIAl0bXBjID0gUmVhZERPQ18odmlydGFkciwgcmVnKSAmIERPQ19UT0dHTEVfQklUOwogCWlmICgodG1wID09IHRtcGIpIHx8ICh0bXAgIT0gdG1wYykpIHsKQEAgLTE2MjYsMTEgKzE2MTgsMTEgQEAKIAkJaWYgKENoaXBJRCA9PSBET0NfQ2hpcElEX0RvY01pbFBsdXMxNikgewogCQkJV3JpdGVET0Mofm5ld3ZhbCwgdmlydGFkciwgTXBsdXNfQWxpYXNSZXNvbHV0aW9uKTsKIAkJCW9sZHZhbCA9IFJlYWRET0MoZG9jLT52aXJ0YWRyLCBNcGx1c19BbGlhc1Jlc29sdXRpb24pOwotCQkJV3JpdGVET0MobmV3dmFsLCB2aXJ0YWRyLCBNcGx1c19BbGlhc1Jlc29sdXRpb24pOyAvLyByZXN0b3JlIGl0CisJCQlXcml0ZURPQyhuZXd2YWwsIHZpcnRhZHIsIE1wbHVzX0FsaWFzUmVzb2x1dGlvbik7CS8vIHJlc3RvcmUgaXQKIAkJfSBlbHNlIHsKIAkJCVdyaXRlRE9DKH5uZXd2YWwsIHZpcnRhZHIsIEFsaWFzUmVzb2x1dGlvbik7CiAJCQlvbGR2YWwgPSBSZWFkRE9DKGRvYy0+dmlydGFkciwgQWxpYXNSZXNvbHV0aW9uKTsKLQkJCVdyaXRlRE9DKG5ld3ZhbCwgdmlydGFkciwgQWxpYXNSZXNvbHV0aW9uKTsgLy8gcmVzdG9yZSBpdAorCQkJV3JpdGVET0MobmV3dmFsLCB2aXJ0YWRyLCBBbGlhc1Jlc29sdXRpb24pOwkvLyByZXN0b3JlIGl0CiAJCX0KIAkJbmV3dmFsID0gfm5ld3ZhbDsKIAkJaWYgKG9sZHZhbCA9PSBuZXd2YWwpIHsKQEAgLTE2NDIsMTAgKzE2MzQsOCBAQAogCXByaW50ayhLRVJOX05PVElDRSAiRGlza09uQ2hpcCBmb3VuZCBhdCAweCVseFxuIiwgcGh5c2Fkcik7CiAKIAlsZW4gPSBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArCi0JICAgICAgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApICsKLQkgICAgICBzaXplb2Yoc3RydWN0IGRvY19wcml2KSArCi0JICAgICAgKDIgKiBzaXplb2Yoc3RydWN0IG5hbmRfYmJ0X2Rlc2NyKSk7Ci0JbXRkID0gIGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwkgICAgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApICsgc2l6ZW9mKHN0cnVjdCBkb2NfcHJpdikgKyAoMiAqIHNpemVvZihzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IpKTsKKwltdGQgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdGQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJEaXNrT25DaGlwIGttYWxsb2MgKCVkIGJ5dGVzKSBmYWlsZWQhXG4iLCBsZW4pOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTY2MywxNyArMTY1MywxOSBAQAogCiAJbmFuZC0+cHJpdgkJPSBkb2M7CiAJbmFuZC0+c2VsZWN0X2NoaXAJPSBkb2MyMDB4X3NlbGVjdF9jaGlwOwotCW5hbmQtPmh3Y29udHJvbAkJPSBkb2MyMDB4X2h3Y29udHJvbDsKKwluYW5kLT5jbWRfY3RybAkJPSBkb2MyMDB4X2h3Y29udHJvbDsKIAluYW5kLT5kZXZfcmVhZHkJCT0gZG9jMjAweF9kZXZfcmVhZHk7CiAJbmFuZC0+d2FpdGZ1bmMJCT0gZG9jMjAweF93YWl0OwogCW5hbmQtPmJsb2NrX2JhZAkJPSBkb2MyMDB4X2Jsb2NrX2JhZDsKLQluYW5kLT5lbmFibGVfaHdlY2MJPSBkb2MyMDB4X2VuYWJsZV9od2VjYzsKLQluYW5kLT5jYWxjdWxhdGVfZWNjCT0gZG9jMjAweF9jYWxjdWxhdGVfZWNjOwotCW5hbmQtPmNvcnJlY3RfZGF0YQk9IGRvYzIwMHhfY29ycmVjdF9kYXRhOworCW5hbmQtPmVjYy5od2N0bAkJPSBkb2MyMDB4X2VuYWJsZV9od2VjYzsKKwluYW5kLT5lY2MuY2FsY3VsYXRlCT0gZG9jMjAweF9jYWxjdWxhdGVfZWNjOworCW5hbmQtPmVjYy5jb3JyZWN0CT0gZG9jMjAweF9jb3JyZWN0X2RhdGE7CiAKLQluYW5kLT5hdXRvb29iCQk9ICZkb2MyMDB4X29vYmluZm87Ci0JbmFuZC0+ZWNjbW9kZQkJPSBOQU5EX0VDQ19IVzZfNTEyOwotCW5hbmQtPm9wdGlvbnMJCT0gTkFORF9VU0VfRkxBU0hfQkJUIHwgTkFORF9IV0VDQ19TWU5EUk9NRTsKKwluYW5kLT5lY2MubGF5b3V0CT0gJmRvYzIwMHhfb29iaW5mbzsKKwluYW5kLT5lY2MubW9kZQkJPSBOQU5EX0VDQ19IV19TWU5EUk9NRTsKKwluYW5kLT5lY2Muc2l6ZQkJPSA1MTI7CisJbmFuZC0+ZWNjLmJ5dGVzCQk9IDY7CisJbmFuZC0+b3B0aW9ucwkJPSBOQU5EX1VTRV9GTEFTSF9CQlQ7CiAKIAlkb2MtPnBoeXNhZHIJCT0gcGh5c2FkcjsKIAlkb2MtPnZpcnRhZHIJCT0gdmlydGFkcjsKQEAgLTE3MDcsMTggKzE2OTksMTggQEAKIAlkb2NsaXN0ID0gbXRkOwogCXJldHVybiAwOwogCi1ub3Rmb3VuZDoKKyBub3Rmb3VuZDoKIAkvKiBQdXQgYmFjayB0aGUgY29udGVudHMgb2YgdGhlIERPQ0NvbnRyb2wgcmVnaXN0ZXIsIGluIGNhc2UgaXQncyBub3QKIAkgICBhY3R1YWxseSBhIERpc2tPbkNoaXAuICAqLwogCVdyaXRlRE9DKHNhdmVfY29udHJvbCwgdmlydGFkciwgRE9DQ29udHJvbCk7Ci1mYWlsOgorIGZhaWw6CiAJaW91bm1hcCh2aXJ0YWRyKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX25hbmRkb2Modm9pZCkKIHsKLSAJc3RydWN0IG10ZF9pbmZvICptdGQsICpuZXh0bXRkOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkLCAqbmV4dG10ZDsKIAlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kOwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jOwogCkBAIC0xNzQ3LDggKzE3MzksOCBAQAogCSAqIGdlbmVyYXRvciBwb2xpbm9taWFsIGRlZ3JlZSA9IDQKIAkgKi8KIAlyc19kZWNvZGVyID0gaW5pdF9ycygxMCwgMHg0MDksIEZDUiwgMSwgTlJPT1RTKTsKLSAJaWYgKCFyc19kZWNvZGVyKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIkRpc2tPbkNoaXA6IENvdWxkIG5vdCBjcmVhdGUgYSBSUyBkZWNvZGVyXG4iKTsKKwlpZiAoIXJzX2RlY29kZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEaXNrT25DaGlwOiBDb3VsZCBub3QgY3JlYXRlIGEgUlMgZGVjb2RlclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTc1OCw3ICsxNzUwLDcgQEAKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dGVycjsKIAl9IGVsc2UgewotCQlmb3IgKGk9MDsgKGRvY19sb2NhdGlvbnNbaV0gIT0gMHhmZmZmZmZmZik7IGkrKykgeworCQlmb3IgKGkgPSAwOyAoZG9jX2xvY2F0aW9uc1tpXSAhPSAweGZmZmZmZmZmKTsgaSsrKSB7CiAJCQlkb2NfcHJvYmUoZG9jX2xvY2F0aW9uc1tpXSk7CiAJCX0KIAl9CkBAIC0xNzcwLDcgKzE3NjIsNyBAQAogCQlnb3RvIG91dGVycjsKIAl9CiAJcmV0dXJuIDA7Ci1vdXRlcnI6Cisgb3V0ZXJyOgogCWZyZWVfcnMocnNfZGVjb2Rlcik7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZWRiNzMxMi5jIGIvZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKaW5kZXggOWIxZmQyZi4uNTE2YzBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGRyaXZlcnMvbXRkL25hbmQvZWRiNzMxMi5jCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMiBNYXJpdXMgR3L2Z2VyIChtYWdAc3lzZ28uZGUpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcml1cyBHcsO2Z2VyIChtYWdAc3lzZ28uZGUpCiAgKgogICogIERlcml2ZWQgZnJvbSBkcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKICAqICAgICAgIENvcHlyaWdodCAoYykgMjAwMSBUaG9tYXMgR2xlaXhuZXIgKGdsZWl4bmVyQGF1dHJvbml4LmRlKQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPiAvKiBmb3IgQ0xQUzcxMTFfVklSVF9CQVNFICovCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4JLyogZm9yIENMUFM3MTExX1ZJUlRfQkFTRSAqLwogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgogCkBAIC01NCw1MSArNTQsNDUgQEAKICAqLwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcDczMTJfZmlvX3BiYXNlID0gRVA3MzEyX0ZJT19QQkFTRTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKiBlcDczMTJfcHhkciA9ICh2b2lkIF9faW9tZW0gKikgRVA3MzEyX1BYRFI7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICogZXA3MzEyX3B4ZGRyID0gKHZvaWQgX19pb21lbSAqKSBFUDczMTJfUFhERFI7CitzdGF0aWMgdm9pZCBfX2lvbWVtICplcDczMTJfcHhkciA9ICh2b2lkIF9faW9tZW0gKilFUDczMTJfUFhEUjsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmVwNzMxMl9weGRkciA9ICh2b2lkIF9faW9tZW0gKilFUDczMTJfUFhERFI7CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIC8qCiAgKiBEZWZpbmUgc3RhdGljIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZQogICovCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9bXSA9IHsKLQl7IC5uYW1lID0gIkVQNzMxMiBOYW5kIEZsYXNoIiwKLQkJICAub2Zmc2V0ID0gMCwKLQkJICAuc2l6ZSA9IDgqMTAyNCoxMDI0IH0KKwl7Lm5hbWUgPSAiRVA3MzEyIE5hbmQgRmxhc2giLAorCSAub2Zmc2V0ID0gMCwKKwkgLnNpemUgPSA4ICogMTAyNCAqIDEwMjR9CiB9OworCiAjZGVmaW5lIE5VTV9QQVJUSVRJT05TIDEKIAogI2VuZGlmCiAKLQogLyoKICAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCisgKgorICoJTkFORF9OQ0U6IGJpdCAwIC0+IGJpdCA3CisgKglOQU5EX0NMRTogYml0IDEgLT4gYml0IDQKKyAqCU5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgNQogICovCi1zdGF0aWMgdm9pZCBlcDczMTJfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQorc3RhdGljIHZvaWQgZXA3MzEyX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCiB7Ci0Jc3dpdGNoKGNtZCkgeworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLQkJY2xwc193cml0ZWIoY2xwc19yZWFkYihlcDczMTJfcHhkcikgfCAweDEwLCBlcDczMTJfcHhkcik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgotCQljbHBzX3dyaXRlYihjbHBzX3JlYWRiKGVwNzMxMl9weGRyKSAmIH4weDEwLCBlcDczMTJfcHhkcik7Ci0JCWJyZWFrOworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl1bnNpZ25lZCBjaGFyIGJpdHM7CiAKLQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKLQkJY2xwc193cml0ZWIoY2xwc19yZWFkYihlcDczMTJfcHhkcikgfCAweDIwLCBlcDczMTJfcHhkcik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotCQljbHBzX3dyaXRlYihjbHBzX3JlYWRiKGVwNzMxMl9weGRyKSAmIH4weDIwLCBlcDczMTJfcHhkcik7Ci0JCWJyZWFrOworCQliaXRzID0gKGN0cmwgJiAoTkFORF9DTEUgfCBOQU5EX0FMRSkpIDw8IDM7CisJCWJpdHMgPSAoY3RybCAmIE5BTkRfTkNFKSA8PCA3OwogCi0JY2FzZSBOQU5EX0NUTF9TRVROQ0U6Ci0JCWNscHNfd3JpdGViKChjbHBzX3JlYWRiKGVwNzMxMl9weGRyKSB8IDB4ODApICYgfjB4NDAsIGVwNzMxMl9weGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCWNscHNfd3JpdGViKChjbHBzX3JlYWRiKGVwNzMxMl9weGRyKSB8IDB4ODApIHwgMHg0MCwgZXA3MzEyX3B4ZHIpOwotCQlicmVhazsKKwkJY2xwc193cml0ZWIoKGNscHNfcmVhZGIoZXA3MzEyX3B4ZHIpICAmIDB4QjApIHwgMHgxMCwKKwkJCSAgICBlcDczMTJfcHhkcik7CiAJfQorCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKIH0KIAogLyoKQEAgLTEwOCw2ICsxMDIsNyBAQAogewogCXJldHVybiAxOwogfQorCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAjZW5kaWYKQEAgLTExNSwxOCArMTEwLDE2IEBACiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGVwNzMxMl9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZXA3MzEyX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCWNvbnN0IGNoYXIgKnBhcnRfdHlwZSA9IDA7CiAJaW50IG10ZF9wYXJ0c19uYiA9IDA7CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gKm10ZF9wYXJ0cyA9IDA7Ci0Jdm9pZCBfX2lvbWVtICogZXA3MzEyX2Zpb19iYXNlOworCXZvaWQgX19pb21lbSAqZXA3MzEyX2Zpb19iYXNlOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JZXA3MzEyX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKwotCQkJICAgICBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksCi0JCQkgICAgIEdGUF9LRVJORUwpOworCWVwNzMxMl9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVwNzMxMl9tdGQpIHsKIAkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgRURCNzMxMiBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTM0LDIxICsxMjcsMjIgQEAKIAogCS8qIG1hcCBwaHlzaWNhbCBhZHJlc3MgKi8KIAllcDczMTJfZmlvX2Jhc2UgPSBpb3JlbWFwKGVwNzMxMl9maW9fcGJhc2UsIFNaXzFLKTsKLQlpZighZXA3MzEyX2Zpb19iYXNlKSB7CisJaWYgKCFlcDczMTJfZmlvX2Jhc2UpIHsKIAkJcHJpbnRrKCJpb3JlbWFwIEVEQjczMTIgTkFORCBmbGFzaCBmYWlsZWRcbiIpOwogCQlrZnJlZShlcDczMTJfbXRkKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmZXA3MzEyX210ZFsxXSk7CisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZlcDczMTJfbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSBlcDczMTJfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KGVwNzMxMl9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKIAogCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCiAJZXA3MzEyX210ZC0+cHJpdiA9IHRoaXM7CisJZXA3MzEyX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogU2V0IEdQSU8gUG9ydCBCIGNvbnRyb2wgcmVnaXN0ZXIgc28gdGhhdCB0aGUgcGlucyBhcmUgY29uZmlndXJlZApAQCAtMTU5LDIyICsxNTMsMjAgQEAKIAkvKiBpbnNlcnQgY2FsbGJhY2tzICovCiAJdGhpcy0+SU9fQUREUl9SID0gZXA3MzEyX2Zpb19iYXNlOwogCXRoaXMtPklPX0FERFJfVyA9IGVwNzMxMl9maW9fYmFzZTsKLQl0aGlzLT5od2NvbnRyb2wgPSBlcDczMTJfaHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gZXA3MzEyX2h3Y29udHJvbDsKIAl0aGlzLT5kZXZfcmVhZHkgPSBlcDczMTJfZGV2aWNlX3JlYWR5OwogCS8qIDE1IHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwogCXRoaXMtPmNoaXBfZGVsYXkgPSAxNTsKIAogCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4gKGVwNzMxMl9tdGQsIDEpKSB7CisJaWYgKG5hbmRfc2NhbihlcDczMTJfbXRkLCAxKSkgewogCQlpb3VubWFwKCh2b2lkICopZXA3MzEyX2Zpb19iYXNlKTsKLQkJa2ZyZWUgKGVwNzMxMl9tdGQpOworCQlrZnJlZShlcDczMTJfbXRkKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0KICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAllcDczMTJfbXRkLT5uYW1lID0gImVkYjczMTItbmFuZCI7Ci0JbXRkX3BhcnRzX25iID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoZXA3MzEyX210ZCwgcGFydF9wcm9iZXMsCi0JCQkJCSAgICAmbXRkX3BhcnRzLCAwKTsKKwltdGRfcGFydHNfbmIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhlcDczMTJfbXRkLCBwYXJ0X3Byb2JlcywgJm10ZF9wYXJ0cywgMCk7CiAJaWYgKG10ZF9wYXJ0c19uYiA+IDApCiAJCXBhcnRfdHlwZSA9ICJjb21tYW5kIGxpbmUiOwogCWVsc2UKQEAgLTE5MywyNCArMTg1LDIzIEBACiAJLyogUmV0dXJuIGhhcHB5ICovCiAJcmV0dXJuIDA7CiB9CisKIG1vZHVsZV9pbml0KGVwNzMxMl9pbml0KTsKIAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotc3RhdGljIHZvaWQgX19leGl0IGVwNzMxMl9jbGVhbnVwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGVwNzMxMl9jbGVhbnVwKHZvaWQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICZlcDczMTJfbXRkWzFdOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSZlcDczMTJfbXRkWzFdOwogCiAJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlIChhcDczMTJfbXRkKTsKLQotCS8qIEZyZWUgaW50ZXJuYWwgZGF0YSBidWZmZXIgKi8KLQlrZnJlZSAodGhpcy0+ZGF0YV9idWYpOworCW5hbmRfcmVsZWFzZShhcDczMTJfbXRkKTsKIAogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCi0Ja2ZyZWUgKGVwNzMxMl9tdGQpOworCWtmcmVlKGVwNzMxMl9tdGQpOwogfQorCiBtb2R1bGVfZXhpdChlcDczMTJfY2xlYW51cCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvaDE5MTAuYyBiL2RyaXZlcnMvbXRkL25hbmQvaDE5MTAuYwppbmRleCBmNjhmN2E5Li4yZDU4NWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2gxOTEwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9oMTkxMC5jCkBAIC00LDcgKzQsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwMyBKb3NodWEgV2lzZSAoam9zaHVhQGpvc2h1YXdpc2UuY29tKQogICoKICAqICBEZXJpdmVkIGZyb20gZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKLSAqICAgICAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJpdXMgR3L2Z2VyIChtYWdAc3lzZ28uZGUpCisgKiAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFyaXVzIEdyw7ZnZXIgKG1hZ0BzeXNnby5kZSkKICAqICAgICAgIENvcHlyaWdodCAoYykgMjAwMSBUaG9tYXMgR2xlaXhuZXIgKGdsZWl4bmVyQGF1dHJvbml4LmRlKQogICoKICAqICRJZDogaDE5MTAuYyx2IDEuNiAyMDA1LzExLzA3IDExOjE0OjMwIGdsZWl4bmVyIEV4cCAkCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+IC8qIGZvciBDTFBTNzExMV9WSVJUX0JBU0UgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgkvKiBmb3IgQ0xQUzcxMTFfVklSVF9CQVNFICovCiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaDE5MDAtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lwYXEuaD4KQEAgLTQ1LDQ3ICs0NSwyOSBAQAogICogRGVmaW5lIHN0YXRpYyBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2UKICAqLwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvW10gPSB7Ci0JeyBuYW1lOiAiaDE5MTAgTkFORCBGbGFzaCIsCi0JCSAgb2Zmc2V0OiAwLAotCQkgIHNpemU6IDE2KjEwMjQqMTAyNCB9CisgICAgICB7bmFtZToiaDE5MTAgTkFORCBGbGFzaCIsCisJICAgICAgb2Zmc2V0OjAsCisgICAgICBzaXplOjE2ICogMTAyNCAqIDEwMjR9CiB9OworCiAjZGVmaW5lIE5VTV9QQVJUSVRJT05TIDEKIAogI2VuZGlmCiAKLQogLyoKICAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCisgKgorICoJTkFORF9OQ0U6IGJpdCAwIC0gZG9uJ3QgY2FyZQorICoJTkFORF9DTEU6IGJpdCAxIC0gYWRkcmVzcyBiaXQgMgorICoJTkFORF9BTEU6IGJpdCAyIC0gYWRkcmVzcyBiaXQgMwogICovCi1zdGF0aWMgdm9pZCBoMTkxMF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCitzdGF0aWMgdm9pZCBoMTkxMF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkgICAgdW5zaWduZWQgaW50IGN0cmwpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCogdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopIChtdGQtPnByaXYpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQlzd2l0Y2goY21kKSB7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLQkJdGhpcy0+SU9fQUREUl9SIHw9ICgxIDw8IDIpOwotCQl0aGlzLT5JT19BRERSX1cgfD0gKDEgPDwgMik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgotCQl0aGlzLT5JT19BRERSX1IgJj0gfigxIDw8IDIpOwotCQl0aGlzLT5JT19BRERSX1cgJj0gfigxIDw8IDIpOwotCQlicmVhazsKLQotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotCQl0aGlzLT5JT19BRERSX1IgfD0gKDEgPDwgMyk7Ci0JCXRoaXMtPklPX0FERFJfVyB8PSAoMSA8PCAzKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJBTEU6Ci0JCXRoaXMtPklPX0FERFJfUiAmPSB+KDEgPDwgMyk7Ci0JCXRoaXMtPklPX0FERFJfVyAmPSB+KDEgPDwgMyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NUTF9TRVROQ0U6Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSTkNFOgotCQlicmVhazsKLQl9CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cgfCAoKGN0cmwgJiAweDYpIDw8IDEpKTsKIH0KIAogLyoKQEAgLTEwMSw3ICs4Myw3IEBACiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGgxOTEwX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBoMTkxMF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAljb25zdCBjaGFyICpwYXJ0X3R5cGUgPSAwOwpAQCAtMTE5LDI0ICsxMDEsMjMgQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQloMTkxMF9uYW5kX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKwotCQkJICAgICBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksCi0JCQkgICAgIEdGUF9LRVJORUwpOworCWgxOTEwX25hbmRfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoMTkxMF9uYW5kX210ZCkgewogCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBoMTkxMCBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7Ci0JCWlvdW5tYXAgKCh2b2lkICopIG5hbmRhZGRyKTsKKwkJaW91bm1hcCgodm9pZCAqKW5hbmRhZGRyKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmaDE5MTBfbmFuZF9tdGRbMV0pOworCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSgmaDE5MTBfbmFuZF9tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIGgxOTEwX25hbmRfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KGgxOTEwX25hbmRfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CiAKIAkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLwogCWgxOTEwX25hbmRfbXRkLT5wcml2ID0gdGhpczsKKwloMTkxMF9uYW5kX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogRW5hYmxlIFZQRU4KQEAgLTE0NiwzMSArMTI3LDI4IEBACiAJLyogaW5zZXJ0IGNhbGxiYWNrcyAqLwogCXRoaXMtPklPX0FERFJfUiA9IG5hbmRhZGRyOwogCXRoaXMtPklPX0FERFJfVyA9IG5hbmRhZGRyOwotCXRoaXMtPmh3Y29udHJvbCA9IGgxOTEwX2h3Y29udHJvbDsKKwl0aGlzLT5jbWRfY3RybCA9IGgxOTEwX2h3Y29udHJvbDsKIAl0aGlzLT5kZXZfcmVhZHkgPSBOVUxMOwkvKiB1bmtub3duIHdoZXRoZXIgdGhhdCB3YXMgY29ycmVjdCBvciBub3Qgc28gd2Ugd2lsbCBqdXN0IGRvIGl0IGxpa2UgdGhpcyAqLwogCS8qIDE1IHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwogCXRoaXMtPmNoaXBfZGVsYXkgPSA1MDsKLQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CiAJdGhpcy0+b3B0aW9ucyA9IE5BTkRfTk9fQVVUT0lOQ1I7CiAKIAkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAobmFuZF9zY2FuIChoMTkxMF9uYW5kX210ZCwgMSkpIHsKKwlpZiAobmFuZF9zY2FuKGgxOTEwX25hbmRfbXRkLCAxKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIk5vIE5BTkQgZGV2aWNlIC0gcmV0dXJuaW5nIC1FTlhJT1xuIik7Ci0JCWtmcmVlIChoMTkxMF9uYW5kX210ZCk7Ci0JCWlvdW5tYXAgKCh2b2lkICopIG5hbmRhZGRyKTsKKwkJa2ZyZWUoaDE5MTBfbmFuZF9tdGQpOworCQlpb3VubWFwKCh2b2lkICopbmFuZGFkZHIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KLQogI2lmZGVmIENPTkZJR19NVERfQ01ETElORV9QQVJUUwotCW10ZF9wYXJ0c19uYiA9IHBhcnNlX2NtZGxpbmVfcGFydGl0aW9ucyhoMTkxMF9uYW5kX210ZCwgJm10ZF9wYXJ0cywKLQkJCQkJCSJoMTkxMC1uYW5kIik7CisJbXRkX3BhcnRzX25iID0gcGFyc2VfY21kbGluZV9wYXJ0aXRpb25zKGgxOTEwX25hbmRfbXRkLCAmbXRkX3BhcnRzLCAiaDE5MTAtbmFuZCIpOwogCWlmIChtdGRfcGFydHNfbmIgPiAwKQotCSAgcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CisJCXBhcnRfdHlwZSA9ICJjb21tYW5kIGxpbmUiOwogCWVsc2UKLQkgIG10ZF9wYXJ0c19uYiA9IDA7CisJCW10ZF9wYXJ0c19uYiA9IDA7CiAjZW5kaWYKLQlpZiAobXRkX3BhcnRzX25iID09IDApCi0JeworCWlmIChtdGRfcGFydHNfbmIgPT0gMCkgewogCQltdGRfcGFydHMgPSBwYXJ0aXRpb25faW5mbzsKIAkJbXRkX3BhcnRzX25iID0gTlVNX1BBUlRJVElPTlM7CiAJCXBhcnRfdHlwZSA9ICJzdGF0aWMiOwpAQCAtMTgzLDI0ICsxNjEsMjYgQEAKIAkvKiBSZXR1cm4gaGFwcHkgKi8KIAlyZXR1cm4gMDsKIH0KKwogbW9kdWxlX2luaXQoaDE5MTBfaW5pdCk7CiAKIC8qCiAgKiBDbGVhbiB1cCByb3V0aW5lCiAgKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBoMTkxMF9jbGVhbnVwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGgxOTEwX2NsZWFudXAodm9pZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgJmgxOTEwX25hbmRfbXRkWzFdOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSZoMTkxMF9uYW5kX210ZFsxXTsKIAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwotCW5hbmRfcmVsZWFzZSAoaDE5MTBfbmFuZF9tdGQpOworCW5hbmRfcmVsZWFzZShoMTkxMF9uYW5kX210ZCk7CiAKIAkvKiBSZWxlYXNlIGlvIHJlc291cmNlICovCi0JaW91bm1hcCAoKHZvaWQgKikgdGhpcy0+SU9fQUREUl9XKTsKKwlpb3VubWFwKCh2b2lkICopdGhpcy0+SU9fQUREUl9XKTsKIAogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCi0Ja2ZyZWUgKGgxOTEwX25hbmRfbXRkKTsKKwlrZnJlZShoMTkxMF9uYW5kX210ZCk7CiB9CisKIG1vZHVsZV9leGl0KGgxOTEwX2NsZWFudXApOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCA5NWU5NmZhLi4yNzA4M2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTEwLDY3ICsxMCwzMSBAQAogICoJaHR0cDovL3d3dy5saW51eC1tdGQuaW5mcmFkZWFkLm9yZy90ZWNoL25hbmQuaHRtbAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20pCi0gKiAJCSAgMjAwMiBUaG9tYXMgR2xlaXhuZXIgKHRnbHhAbGludXRyb25peC5kZSkKKyAqCQkgIDIwMDItMjAwNiBUaG9tYXMgR2xlaXhuZXIgKHRnbHhAbGludXRyb25peC5kZSkKICAqCi0gKiAgMDItMDgtMjAwNCAgdGdseDogc3VwcG9ydCBmb3Igc3RyYW5nZSBjaGlwcywgd2hpY2ggY2Fubm90IGF1dG8gaW5jcmVtZW50Ci0gKgkJcGFnZXMgb24gcmVhZCAvIHJlYWRfb29iCi0gKgotICogIDAzLTE3LTIwMDQgIHRnbHg6IENoZWNrIHJlYWR5IGJlZm9yZSBhdXRvIGluY3JlbWVudCBjaGVjay4gU2ltb24gQmF5ZXMKLSAqCQlwb2ludGVkIHRoaXMgb3V0LCBhcyBoZSBtYXJrZWQgYW4gYXV0byBpbmNyZW1lbnQgY2FwYWJsZSBjaGlwCi0gKgkJYXMgTk9BVVRPSU5DUiBpbiB0aGUgYm9hcmQgZHJpdmVyLgotICoJCU1ha2UgcmVhZHMgb3ZlciBibG9jayBib3VuZGFyaWVzIHdvcmsgdG9vCi0gKgotICogIDA0LTE0LTIwMDQJdGdseDogZmlyc3Qgd29ya2luZyB2ZXJzaW9uIGZvciAyayBwYWdlIHNpemUgY2hpcHMKLSAqCi0gKiAgMDUtMTktMjAwNCAgdGdseDogQmFzaWMgc3VwcG9ydCBmb3IgUmVuZXNhcyBBRy1BTkQgY2hpcHMKLSAqCi0gKiAgMDktMjQtMjAwNCAgdGdseDogYWRkIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGNvbnRyb2xsZXJzIChlLmcuIEVDQykgc2hhcmVkCi0gKgkJYW1vbmcgbXVsdGlwbGUgaW5kZXBlbmRlbmQgZGV2aWNlcy4gU3VnZ2VzdGlvbnMgYW5kIGluaXRpYWwgcGF0Y2gKLSAqCQlmcm9tIEJlbiBEb29rcyA8YmVuLW10ZEBmbHVmZi5vcmc+Ci0gKgotICogIDEyLTA1LTIwMDQJZG1hcmxpbjogYWRkIHdvcmthcm91bmQgZm9yIFJlbmVzYXMgQUctQU5EIGNoaXBzICJkaXN0dXJiIiBpc3N1ZS4KLSAqCQlCYXNpY2FsbHksIGFueSBibG9jayBub3QgcmV3cml0dGVuIG1heSBsb3NlIGRhdGEgd2hlbiBzdXJyb3VuZGluZyBibG9ja3MKLSAqCQlhcmUgcmV3cml0dGVuIG1hbnkgdGltZXMuICBKRkZTMiBlbnN1cmVzIHRoaXMgZG9lc24ndCBoYXBwZW4gZm9yIGJsb2NrcwotICoJCWl0IHVzZXMsIGJ1dCB0aGUgQmFkIEJsb2NrIFRhYmxlKHMpIG1heSBub3QgYmUgcmV3cml0dGVuLiAgVG8gZW5zdXJlIHRoZXkKLSAqCQlkbyBub3QgbG9zZSBkYXRhLCBmb3JjZSB0aGVtIHRvIGJlIHJld3JpdHRlbiB3aGVuIHNvbWUgb2YgdGhlIHN1cnJvdW5kaW5nCi0gKgkJYmxvY2tzIGFyZSBlcmFzZWQuICBSYXRoZXIgdGhhbiB0cmFja2luZyBhIHNwZWNpZmljIG5lYXJieSBibG9jayAod2hpY2gKLSAqCQljb3VsZCBpdHNlbGYgZ28gYmFkKSwgdXNlIGEgcGFnZSBhZGRyZXNzICdtYXNrJyB0byBzZWxlY3Qgc2V2ZXJhbCBibG9ja3MKLSAqCQlpbiB0aGUgc2FtZSBhcmVhLCBhbmQgcmV3cml0ZSB0aGUgQkJUIHdoZW4gYW55IG9mIHRoZW0gYXJlIGVyYXNlZC4KLSAqCi0gKiAgMDEtMDMtMjAwNQlkbWFybGluOiBhZGRlZCBzdXBwb3J0IGZvciB0aGUgZGV2aWNlIHJlY292ZXJ5IGNvbW1hbmQgc2VxdWVuY2UgZm9yIFJlbmVzYXMKLSAqCQlBRy1BTkQgY2hpcHMuICBJZiB0aGVyZSB3YXMgYSBzdWRkZW4gbG9zcyBvZiBwb3dlciBkdXJpbmcgYW4gZXJhc2Ugb3BlcmF0aW9uLAotICogCQlhICJkZXZpY2UgcmVjb3ZlcnkiIG9wZXJhdGlvbiBtdXN0IGJlIHBlcmZvcm1lZCB3aGVuIHBvd2VyIGlzIHJlc3RvcmVkCi0gKiAJCXRvIGVuc3VyZSBjb3JyZWN0IG9wZXJhdGlvbi4KLSAqCi0gKiAgMDEtMjAtMjAwNQlkbWFybGluOiBhZGRlZCBzdXBwb3J0IGZvciBvcHRpb25hbCBoYXJkd2FyZSBzcGVjaWZpYyBjYWxsYmFjayByb3V0aW5lIHRvCi0gKgkJcGVyZm9ybSBleHRyYSBlcnJvciBzdGF0dXMgY2hlY2tzIG9uIGVyYXNlIGFuZCB3cml0ZSBmYWlsdXJlcy4gIFRoaXMgcmVxdWlyZWQKLSAqCQlhZGRpbmcgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBuYW5kX3JlYWRfZWNjLgotICoKLSAqIDA4LTIwLTIwMDUJdndvb2w6IHN1c3BlbmQvcmVzdW1lIGFkZGVkCi0gKgotICogQ3JlZGl0czoKKyAqICBDcmVkaXRzOgogICoJRGF2aWQgV29vZGhvdXNlIGZvciBhZGRpbmcgbXVsdGljaGlwIHN1cHBvcnQKICAqCiAgKglBbGVwaCBPbmUgTHRkLiBhbmQgVG9ieSBDaHVyY2hpbGwgTHRkLiBmb3Igc3VwcG9ydGluZyB0aGUKICAqCXJld29yayBmb3IgMksgcGFnZSBzaXplIGNoaXBzCiAgKgotICogVE9ETzoKKyAqICBUT0RPOgogICoJRW5hYmxlIGNhY2hlZCBwcm9ncmFtbWluZyBmb3IgMmsgcGFnZSBzaXplIGNoaXBzCiAgKglDaGVjaywgaWYgbXRkLT5lY2N0eXBlIHNob3VsZCBiZSBzZXQgdG8gTVREX0VDQ19IVwogICoJaWYgd2UgaGF2ZSBIVyBlY2Mgc3VwcG9ydC4KICAqCVRoZSBBRy1BTkQgY2hpcHMgaGF2ZSBuaWNlIGZlYXR1cmVzIGZvciBzcGVlZCBpbXByb3ZlbWVudCwKICAqCXdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gUmVhZCAvIHByb2dyYW0gNCBwYWdlcyBpbiBvbmUgZ28uCiAgKgotICogJElkOiBuYW5kX2Jhc2UuYyx2IDEuMTUwIDIwMDUvMDkvMTUgMTM6NTg6NDggdndvb2wgRXhwICQKLSAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC04OCw3NSArNTIsNDYgQEAKICNlbmRpZgogCiAvKiBEZWZpbmUgZGVmYXVsdCBvb2IgcGxhY2VtZW50IHNjaGVtZXMgZm9yIGxhcmdlIGFuZCBzbWFsbCBwYWdlIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG5hbmRfb29iXzggPSB7Ci0JLnVzZWVjYyA9IE1URF9OQU5ERUNDX0FVVE9QTEFDRSwKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9vb2JfOCA9IHsKIAkuZWNjYnl0ZXMgPSAzLAogCS5lY2Nwb3MgPSB7MCwgMSwgMn0sCi0JLm9vYmZyZWUgPSB7IHszLCAyfSwgezYsIDJ9IH0KKwkub29iZnJlZSA9IHsKKwkJey5vZmZzZXQgPSAzLAorCQkgLmxlbmd0aCA9IDJ9LAorCQl7Lm9mZnNldCA9IDYsCisJCSAubGVuZ3RoID0gMn19CiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBuYW5kX29vYl8xNiA9IHsKLQkudXNlZWNjID0gTVREX05BTkRFQ0NfQVVUT1BMQUNFLAorc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX29vYl8xNiA9IHsKIAkuZWNjYnl0ZXMgPSA2LAogCS5lY2Nwb3MgPSB7MCwgMSwgMiwgMywgNiwgN30sCi0JLm9vYmZyZWUgPSB7IHs4LCA4fSB9CisJLm9vYmZyZWUgPSB7CisJCXsub2Zmc2V0ID0gOCwKKwkJIC4gbGVuZ3RoID0gOH19CiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBuYW5kX29vYl82NCA9IHsKLQkudXNlZWNjID0gTVREX05BTkRFQ0NfQVVUT1BMQUNFLAorc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX29vYl82NCA9IHsKIAkuZWNjYnl0ZXMgPSAyNCwKIAkuZWNjcG9zID0gewotCQk0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsCi0JCTQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwKLQkJNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzfSwKLQkub29iZnJlZSA9IHsgezIsIDM4fSB9CisJCSAgIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywKKwkJICAgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LAorCQkgICA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjN9LAorCS5vb2JmcmVlID0geworCQl7Lm9mZnNldCA9IDIsCisJCSAubGVuZ3RoID0gMzh9fQogfTsKIAotLyogVGhpcyBpcyB1c2VkIGZvciBwYWRkaW5nIHB1cnBvc2VzIGluIG5hbmRfd3JpdGVfb29iICovCi1zdGF0aWMgdV9jaGFyIGZmY2hhcnNbXSA9IHsKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi19Oworc3RhdGljIGludCBuYW5kX2dldF9kZXZpY2Uoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkgICBpbnQgbmV3X3N0YXRlKTsKKworc3RhdGljIGludCBuYW5kX2RvX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAorCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CiAKIC8qCi0gKiBOQU5EIGxvdy1sZXZlbCBNVEQgaW50ZXJmYWNlIGZ1bmN0aW9ucworICogRm9yIGRldmljZXMgd2hpY2ggZGlzcGxheSBldmVyeSBmYXJ0IGluIHRoZSBzeXN0ZW0gb24gYSBzZXBlcmF0ZSBMRUQuIElzCisgKiBjb21waWxlZCBhd2F5IHdoZW4gTEVEIHN1cHBvcnQgaXMgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyB2b2lkIG5hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7Ci1zdGF0aWMgdm9pZCBuYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7Ci1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pOwotCi1zdGF0aWMgaW50IG5hbmRfcmVhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1Zik7Ci1zdGF0aWMgaW50IG5hbmRfcmVhZF9lY2MgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKLQkJCSAgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYsIHVfY2hhciAqIGVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKLXN0YXRpYyBpbnQgbmFuZF9yZWFkX29vYiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1Zik7Ci1zdGF0aWMgaW50IG5hbmRfd3JpdGUgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmKTsKLXN0YXRpYyBpbnQgbmFuZF93cml0ZV9lY2MgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0JCQkgICBzaXplX3QgKiByZXRsZW4sIGNvbnN0IHVfY2hhciAqIGJ1ZiwgdV9jaGFyICogZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBuYW5kX3dyaXRlX29vYiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7Ci1zdGF0aWMgaW50IG5hbmRfd3JpdGV2IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JCQl1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqIHJldGxlbik7Ci1zdGF0aWMgaW50IG5hbmRfd3JpdGV2X2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLAotCQkJdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBuYW5kX2VyYXNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKTsKLXN0YXRpYyB2b2lkIG5hbmRfc3luYyAoc3RydWN0IG10ZF9pbmZvICptdGQpOwotCi0vKiBTb21lIGludGVybmFsIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBuYW5kX3dyaXRlX3BhZ2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgcGFnZSwgdV9jaGFyICpvb2JfYnVmLAotCQlzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwsIGludCBtb2RlKTsKLSNpZmRlZiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFCi1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X3BhZ2VzIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHBhZ2UsIGludCBudW1wYWdlcywKLQl1X2NoYXIgKm9vYl9idWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCwgaW50IGNoaXBuciwgaW50IG9vYm1vZGUpOwotI2Vsc2UKLSNkZWZpbmUgbmFuZF92ZXJpZnlfcGFnZXMoLi4uKSAoMCkKLSNlbmRpZgotCi1zdGF0aWMgaW50IG5hbmRfZ2V0X2RldmljZSAoc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBuZXdfc3RhdGUpOworREVGSU5FX0xFRF9UUklHR0VSKG5hbmRfbGVkX3RyaWdnZXIpOwogCiAvKioKICAqIG5hbmRfcmVsZWFzZV9kZXZpY2UgLSBbR0VORVJJQ10gcmVsZWFzZSBjaGlwCkBAIC0xNjQsMjcgKzk5LDE5IEBACiAgKgogICogRGVzZWxlY3QsIHJlbGVhc2UgY2hpcCBsb2NrIGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UKICAqLwotc3RhdGljIHZvaWQgbmFuZF9yZWxlYXNlX2RldmljZSAoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgdm9pZCBuYW5kX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAogCS8qIERlLXNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKIAotCWlmICh0aGlzLT5jb250cm9sbGVyKSB7Ci0JCS8qIFJlbGVhc2UgdGhlIGNvbnRyb2xsZXIgYW5kIHRoZSBjaGlwICovCi0JCXNwaW5fbG9jaygmdGhpcy0+Y29udHJvbGxlci0+bG9jayk7Ci0JCXRoaXMtPmNvbnRyb2xsZXItPmFjdGl2ZSA9IE5VTEw7Ci0JCXRoaXMtPnN0YXRlID0gRkxfUkVBRFk7Ci0JCXdha2VfdXAoJnRoaXMtPmNvbnRyb2xsZXItPndxKTsKLQkJc3Bpbl91bmxvY2soJnRoaXMtPmNvbnRyb2xsZXItPmxvY2spOwotCX0gZWxzZSB7Ci0JCS8qIFJlbGVhc2UgdGhlIGNoaXAgKi8KLQkJc3Bpbl9sb2NrKCZ0aGlzLT5jaGlwX2xvY2spOwotCQl0aGlzLT5zdGF0ZSA9IEZMX1JFQURZOwotCQl3YWtlX3VwKCZ0aGlzLT53cSk7Ci0JCXNwaW5fdW5sb2NrKCZ0aGlzLT5jaGlwX2xvY2spOwotCX0KKwkvKiBSZWxlYXNlIHRoZSBjb250cm9sbGVyIGFuZCB0aGUgY2hpcCAqLworCXNwaW5fbG9jaygmY2hpcC0+Y29udHJvbGxlci0+bG9jayk7CisJY2hpcC0+Y29udHJvbGxlci0+YWN0aXZlID0gTlVMTDsKKwljaGlwLT5zdGF0ZSA9IEZMX1JFQURZOworCXdha2VfdXAoJmNoaXAtPmNvbnRyb2xsZXItPndxKTsKKwlzcGluX3VubG9jaygmY2hpcC0+Y29udHJvbGxlci0+bG9jayk7CiB9CiAKIC8qKgpAQCAtMTkzLDIzICsxMjAsMTAgQEAKICAqCiAgKiBEZWZhdWx0IHJlYWQgZnVuY3Rpb24gZm9yIDhiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgdV9jaGFyIG5hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorc3RhdGljIHVpbnQ4X3QgbmFuZF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlyZXR1cm4gcmVhZGIodGhpcy0+SU9fQUREUl9SKTsKLX0KLQotLyoqCi0gKiBuYW5kX3dyaXRlX2J5dGUgLSBbREVGQVVMVF0gd3JpdGUgb25lIGJ5dGUgdG8gdGhlIGNoaXAKLSAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAYnl0ZToJcG9pbnRlciB0byBkYXRhIGJ5dGUgdG8gd3JpdGUKLSAqCi0gKiBEZWZhdWx0IHdyaXRlIGZ1bmN0aW9uIGZvciA4aXQgYnVzd2l0aAotICovCi1zdGF0aWMgdm9pZCBuYW5kX3dyaXRlX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBieXRlKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jd3JpdGViKGJ5dGUsIHRoaXMtPklPX0FERFJfVyk7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlyZXR1cm4gcmVhZGIoY2hpcC0+SU9fQUREUl9SKTsKIH0KIAogLyoqCkBAIC0yMTksMjQgKzEzMywxMCBAQAogICogRGVmYXVsdCByZWFkIGZ1bmN0aW9uIGZvciAxNmJpdCBidXN3aXRoIHdpdGgKICAqIGVuZGlhbmVzcyBjb252ZXJzaW9uCiAgKi8KLXN0YXRpYyB1X2NoYXIgbmFuZF9yZWFkX2J5dGUxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3N0YXRpYyB1aW50OF90IG5hbmRfcmVhZF9ieXRlMTYoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlyZXR1cm4gKHVfY2hhcikgY3B1X3RvX2xlMTYocmVhZHcodGhpcy0+SU9fQUREUl9SKSk7Ci19Ci0KLS8qKgotICogbmFuZF93cml0ZV9ieXRlMTYgLSBbREVGQVVMVF0gd3JpdGUgb25lIGJ5dGUgZW5kaWFuZXNzIGF3YXJlIHRvIHRoZSBjaGlwCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQGJ5dGU6CXBvaW50ZXIgdG8gZGF0YSBieXRlIHRvIHdyaXRlCi0gKgotICogRGVmYXVsdCB3cml0ZSBmdW5jdGlvbiBmb3IgMTZiaXQgYnVzd2l0aCB3aXRoCi0gKiBlbmRpYW5lc3MgY29udmVyc2lvbgotICovCi1zdGF0aWMgdm9pZCBuYW5kX3dyaXRlX2J5dGUxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyIGJ5dGUpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl3cml0ZXcobGUxNl90b19jcHUoKHUxNikgYnl0ZSksIHRoaXMtPklPX0FERFJfVyk7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlyZXR1cm4gKHVpbnQ4X3QpIGNwdV90b19sZTE2KHJlYWR3KGNoaXAtPklPX0FERFJfUikpOwogfQogCiAvKioKQEAgLTI0OCwyMiArMTQ4LDggQEAKICAqLwogc3RhdGljIHUxNiBuYW5kX3JlYWRfd29yZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXJldHVybiByZWFkdyh0aGlzLT5JT19BRERSX1IpOwotfQotCi0vKioKLSAqIG5hbmRfd3JpdGVfd29yZCAtIFtERUZBVUxUXSB3cml0ZSBvbmUgd29yZCB0byB0aGUgY2hpcAotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB3b3JkOglkYXRhIHdvcmQgdG8gd3JpdGUKLSAqCi0gKiBEZWZhdWx0IHdyaXRlIGZ1bmN0aW9uIGZvciAxNmJpdCBidXN3aXRoIHdpdGhvdXQKLSAqIGVuZGlhbmVzcyBjb252ZXJzaW9uCi0gKi8KLXN0YXRpYyB2b2lkIG5hbmRfd3JpdGVfd29yZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdTE2IHdvcmQpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl3cml0ZXcod29yZCwgdGhpcy0+SU9fQUREUl9XKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXJldHVybiByZWFkdyhjaGlwLT5JT19BRERSX1IpOwogfQogCiAvKioKQEAgLTI3MywxNSArMTU5LDE1IEBACiAgKgogICogRGVmYXVsdCBzZWxlY3QgZnVuY3Rpb24gZm9yIDEgY2hpcCBkZXZpY2VzLgogICovCi1zdGF0aWMgdm9pZCBuYW5kX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3N0YXRpYyB2b2lkIG5hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwbnIpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzd2l0Y2goY2hpcCkgeworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKwlzd2l0Y2ggKGNoaXBucikgewogCWNhc2UgLTE6Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUk5DRSk7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfTk9ORSwgMCB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCQlicmVhazsKIAljYXNlIDA6Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVE5DRSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTI5NywxMyArMTgzLDEzIEBACiAgKgogICogRGVmYXVsdCB3cml0ZSBmdW5jdGlvbiBmb3IgOGJpdCBidXN3aXRoCiAgKi8KLXN0YXRpYyB2b2lkIG5hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIG5hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCXdyaXRlYihidWZbaV0sIHRoaXMtPklPX0FERFJfVyk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQl3cml0ZWIoYnVmW2ldLCBjaGlwLT5JT19BRERSX1cpOwogfQogCiAvKioKQEAgLTMxNCwxMyArMjAwLDEzIEBACiAgKgogICogRGVmYXVsdCByZWFkIGZ1bmN0aW9uIGZvciA4Yml0IGJ1c3dpdGgKICAqLwotc3RhdGljIHZvaWQgbmFuZF9yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBuYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCWJ1ZltpXSA9IHJlYWRiKHRoaXMtPklPX0FERFJfUik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlidWZbaV0gPSByZWFkYihjaGlwLT5JT19BRERSX1IpOwogfQogCiAvKioKQEAgLTMzMSwxNSArMjE3LDE0IEBACiAgKgogICogRGVmYXVsdCB2ZXJpZnkgZnVuY3Rpb24gZm9yIDhiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgaW50IG5hbmRfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKQogewogCWludCBpOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCWZvciAoaT0wOyBpPGxlbjsgaSsrKQotCQlpZiAoYnVmW2ldICE9IHJlYWRiKHRoaXMtPklPX0FERFJfUikpCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoYnVmW2ldICE9IHJlYWRiKGNoaXAtPklPX0FERFJfUikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQogCXJldHVybiAwOwogfQogCkBAIC0zNTEsMTUgKzIzNiwxNSBAQAogICoKICAqIERlZmF1bHQgd3JpdGUgZnVuY3Rpb24gZm9yIDE2Yml0IGJ1c3dpdGgKICAqLwotc3RhdGljIHZvaWQgbmFuZF93cml0ZV9idWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX2J1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCXUxNiAqcCA9ICh1MTYgKikgYnVmOwogCWxlbiA+Pj0gMTsKIAotCWZvciAoaT0wOyBpPGxlbjsgaSsrKQotCQl3cml0ZXcocFtpXSwgdGhpcy0+SU9fQUREUl9XKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXdyaXRldyhwW2ldLCBjaGlwLT5JT19BRERSX1cpOwogCiB9CiAKQEAgLTM3MSwxNSArMjU2LDE1IEBACiAgKgogICogRGVmYXVsdCByZWFkIGZ1bmN0aW9uIGZvciAxNmJpdCBidXN3aXRoCiAgKi8KLXN0YXRpYyB2b2lkIG5hbmRfcmVhZF9idWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBuYW5kX3JlYWRfYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJdTE2ICpwID0gKHUxNiAqKSBidWY7CiAJbGVuID4+PSAxOwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCXBbaV0gPSByZWFkdyh0aGlzLT5JT19BRERSX1IpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJcFtpXSA9IHJlYWR3KGNoaXAtPklPX0FERFJfUik7CiB9CiAKIC8qKgpAQCAtMzkwLDE1ICsyNzUsMTUgQEAKICAqCiAgKiBEZWZhdWx0IHZlcmlmeSBmdW5jdGlvbiBmb3IgMTZiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X2J1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyBpbnQgbmFuZF92ZXJpZnlfYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJdTE2ICpwID0gKHUxNiAqKSBidWY7CiAJbGVuID4+PSAxOwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCWlmIChwW2ldICE9IHJlYWR3KHRoaXMtPklPX0FERFJfUikpCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAocFtpXSAhPSByZWFkdyhjaGlwLT5JT19BRERSX1IpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKQEAgLTQxNSwzOCArMzAwLDM3IEBACiBzdGF0aWMgaW50IG5hbmRfYmxvY2tfYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgZ2V0Y2hpcCkKIHsKIAlpbnQgcGFnZSwgY2hpcG5yLCByZXMgPSAwOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1MTYgYmFkOwogCiAJaWYgKGdldGNoaXApIHsKLQkJcGFnZSA9IChpbnQpKG9mcyA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQkJY2hpcG5yID0gKGludCkob2ZzID4+IHRoaXMtPmNoaXBfc2hpZnQpOworCQlwYWdlID0gKGludCkob2ZzID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOworCQljaGlwbnIgPSAoaW50KShvZnMgPj4gY2hpcC0+Y2hpcF9zaGlmdCk7CiAKLQkJLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9SRUFESU5HKTsKKwkJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfUkVBRElORyk7CiAKIAkJLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKIAl9IGVsc2UKLQkJcGFnZSA9IChpbnQpIG9mczsKKwkJcGFnZSA9IChpbnQpb2ZzOwogCi0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSB7Ci0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgdGhpcy0+YmFkYmxvY2twb3MgJiAweEZFLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCQliYWQgPSBjcHVfdG9fbGUxNih0aGlzLT5yZWFkX3dvcmQobXRkKSk7Ci0JCWlmICh0aGlzLT5iYWRibG9ja3BvcyAmIDB4MSkKKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpIHsKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURPT0IsIGNoaXAtPmJhZGJsb2NrcG9zICYgMHhGRSwKKwkJCSAgICAgIHBhZ2UgJiBjaGlwLT5wYWdlbWFzayk7CisJCWJhZCA9IGNwdV90b19sZTE2KGNoaXAtPnJlYWRfd29yZChtdGQpKTsKKwkJaWYgKGNoaXAtPmJhZGJsb2NrcG9zICYgMHgxKQogCQkJYmFkID4+PSA4OwogCQlpZiAoKGJhZCAmIDB4RkYpICE9IDB4ZmYpCiAJCQlyZXMgPSAxOwogCX0gZWxzZSB7Ci0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgdGhpcy0+YmFkYmxvY2twb3MsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7Ci0JCWlmICh0aGlzLT5yZWFkX2J5dGUobXRkKSAhPSAweGZmKQorCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgY2hpcC0+YmFkYmxvY2twb3MsCisJCQkgICAgICBwYWdlICYgY2hpcC0+cGFnZW1hc2spOworCQlpZiAoY2hpcC0+cmVhZF9ieXRlKG10ZCkgIT0gMHhmZikKIAkJCXJlcyA9IDE7CiAJfQogCi0JaWYgKGdldGNoaXApIHsKLQkJLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLworCWlmIChnZXRjaGlwKQogCQluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7Ci0JfQogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTQ2MSwyMyArMzQ1LDMzIEBACiAqLwogc3RhdGljIGludCBuYW5kX2RlZmF1bHRfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXVfY2hhciBidWZbMl0gPSB7MCwgMH07Ci0Jc2l6ZV90CXJldGxlbjsKLQlpbnQgYmxvY2s7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwl1aW50OF90IGJ1ZlsyXSA9IHsgMCwgMCB9OworCWludCBibG9jaywgcmV0OwogCiAJLyogR2V0IGJsb2NrIG51bWJlciAqLwotCWJsb2NrID0gKChpbnQpIG9mcykgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0OwotCWlmICh0aGlzLT5iYnQpCi0JCXRoaXMtPmJidFtibG9jayA+PiAyXSB8PSAweDAxIDw8ICgoYmxvY2sgJiAweDAzKSA8PCAxKTsKKwlibG9jayA9ICgoaW50KW9mcykgPj4gY2hpcC0+YmJ0X2VyYXNlX3NoaWZ0OworCWlmIChjaGlwLT5iYnQpCisJCWNoaXAtPmJidFtibG9jayA+PiAyXSB8PSAweDAxIDw8ICgoYmxvY2sgJiAweDAzKSA8PCAxKTsKIAogCS8qIERvIHdlIGhhdmUgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgPyAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9VU0VfRkxBU0hfQkJUKQotCQlyZXR1cm4gbmFuZF91cGRhdGVfYmJ0IChtdGQsIG9mcyk7CisJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1VTRV9GTEFTSF9CQlQpCisJCXJldCA9IG5hbmRfdXBkYXRlX2JidChtdGQsIG9mcyk7CisJZWxzZSB7CisJCS8qIFdlIHdyaXRlIHR3byBieXRlcywgc28gd2UgZG9udCBoYXZlIHRvIG1lc3Mgd2l0aCAxNiBiaXQKKwkJICogYWNjZXNzCisJCSAqLworCQlvZnMgKz0gbXRkLT5vb2JzaXplOworCQljaGlwLT5vcHMubGVuID0gMjsKKwkJY2hpcC0+b3BzLmRhdGJ1ZiA9IE5VTEw7CisJCWNoaXAtPm9wcy5vb2JidWYgPSBidWY7CisJCWNoaXAtPm9wcy5vb2JvZmZzID0gY2hpcC0+YmFkYmxvY2twb3MgJiB+MHgwMTsKIAotCS8qIFdlIHdyaXRlIHR3byBieXRlcywgc28gd2UgZG9udCBoYXZlIHRvIG1lc3Mgd2l0aCAxNiBiaXQgYWNjZXNzICovCi0Jb2ZzICs9IG10ZC0+b29ic2l6ZSArICh0aGlzLT5iYWRibG9ja3BvcyAmIH4weDAxKTsKLQlyZXR1cm4gbmFuZF93cml0ZV9vb2IgKG10ZCwgb2ZzICwgMiwgJnJldGxlbiwgYnVmKTsKKwkJcmV0ID0gbmFuZF9kb193cml0ZV9vb2IobXRkLCBvZnMsICZjaGlwLT5vcHMpOworCX0KKwlpZiAoIXJldCkKKwkJbXRkLT5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC00ODcsMTIgKzM4MSwxMiBAQAogICoKICAqIFRoZSBmdW5jdGlvbiBleHBlY3RzLCB0aGF0IHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBzZWxlY3RlZAogICovCi1zdGF0aWMgaW50IG5hbmRfY2hlY2tfd3AgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorc3RhdGljIGludCBuYW5kX2NoZWNrX3dwKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAkvKiBDaGVjayB0aGUgV1AgYml0ICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7Ci0JcmV0dXJuICh0aGlzLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1dQKSA/IDAgOiAxOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7CisJcmV0dXJuIChjaGlwLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1dQKSA/IDAgOiAxOwogfQogCiAvKioKQEAgLTUwNSwzMiArMzk5LDMxIEBACiAgKiBDaGVjaywgaWYgdGhlIGJsb2NrIGlzIGJhZC4gRWl0aGVyIGJ5IHJlYWRpbmcgdGhlIGJhZCBibG9jayB0YWJsZSBvcgogICogY2FsbGluZyBvZiB0aGUgc2NhbiBmdW5jdGlvbi4KICAqLwotc3RhdGljIGludCBuYW5kX2Jsb2NrX2NoZWNrYmFkIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgaW50IGdldGNoaXAsIGludCBhbGxvd2JidCkKK3N0YXRpYyBpbnQgbmFuZF9ibG9ja19jaGVja2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgaW50IGdldGNoaXAsCisJCQkgICAgICAgaW50IGFsbG93YmJ0KQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCWlmICghdGhpcy0+YmJ0KQotCQlyZXR1cm4gdGhpcy0+YmxvY2tfYmFkKG10ZCwgb2ZzLCBnZXRjaGlwKTsKKwlpZiAoIWNoaXAtPmJidCkKKwkJcmV0dXJuIGNoaXAtPmJsb2NrX2JhZChtdGQsIG9mcywgZ2V0Y2hpcCk7CiAKIAkvKiBSZXR1cm4gaW5mbyBmcm9tIHRoZSB0YWJsZSAqLwotCXJldHVybiBuYW5kX2lzYmFkX2JidCAobXRkLCBvZnMsIGFsbG93YmJ0KTsKKwlyZXR1cm4gbmFuZF9pc2JhZF9iYnQobXRkLCBvZnMsIGFsbG93YmJ0KTsKIH0KIAotREVGSU5FX0xFRF9UUklHR0VSKG5hbmRfbGVkX3RyaWdnZXIpOwotCiAvKgogICogV2FpdCBmb3IgdGhlIHJlYWR5IHBpbiwgYWZ0ZXIgYSBjb21tYW5kCiAgKiBUaGUgdGltZW91dCBpcyBjYXRjaGVkIGxhdGVyLgogICovCiBzdGF0aWMgdm9pZCBuYW5kX3dhaXRfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl1bnNpZ25lZCBsb25nCXRpbWVvID0gamlmZmllcyArIDI7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvID0gamlmZmllcyArIDI7CiAKIAlsZWRfdHJpZ2dlcl9ldmVudChuYW5kX2xlZF90cmlnZ2VyLCBMRURfRlVMTCk7CiAJLyogd2FpdCB1bnRpbCBjb21tYW5kIGlzIHByb2Nlc3NlZCBvciB0aW1lb3V0IG9jY3VyZXMgKi8KIAlkbyB7Ci0JCWlmICh0aGlzLT5kZXZfcmVhZHkobXRkKSkKKwkJaWYgKGNoaXAtPmRldl9yZWFkeShtdGQpKQogCQkJYnJlYWs7CiAJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lbykpOwpAQCAtNTQ3LDIxICs0NDAsMjEgQEAKICAqIFNlbmQgY29tbWFuZCB0byBOQU5EIGRldmljZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBzbWFsbCBwYWdlCiAgKiBkZXZpY2VzICgyNTYvNTEyIEJ5dGVzIHBlciBwYWdlKQogICovCi1zdGF0aWMgdm9pZCBuYW5kX2NvbW1hbmQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQorc3RhdGljIHZvaWQgbmFuZF9jb21tYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwKKwkJCSBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQogewotCXJlZ2lzdGVyIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJcmVnaXN0ZXIgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlpbnQgY3RybCA9IE5BTkRfQ1RSTF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFOwogCi0JLyogQmVnaW4gY29tbWFuZCBsYXRjaCBjeWNsZSAqLwotCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7CiAJLyoKIAkgKiBXcml0ZSBvdXQgdGhlIGNvbW1hbmQgdG8gdGhlIGRldmljZS4KIAkgKi8KIAlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9TRVFJTikgewogCQlpbnQgcmVhZGNtZDsKIAotCQlpZiAoY29sdW1uID49IG10ZC0+b29iYmxvY2spIHsKKwkJaWYgKGNvbHVtbiA+PSBtdGQtPndyaXRlc2l6ZSkgewogCQkJLyogT09CIGFyZWEgKi8KLQkJCWNvbHVtbiAtPSBtdGQtPm9vYmJsb2NrOworCQkJY29sdW1uIC09IG10ZC0+d3JpdGVzaXplOwogCQkJcmVhZGNtZCA9IE5BTkRfQ01EX1JFQURPT0I7CiAJCX0gZWxzZSBpZiAoY29sdW1uIDwgMjU2KSB7CiAJCQkvKiBGaXJzdCAyNTYgYnl0ZXMgLS0+IFJFQUQwICovCkBAIC01NzAsMzggKzQ2MywzNyBAQAogCQkJY29sdW1uIC09IDI1NjsKIAkJCXJlYWRjbWQgPSBOQU5EX0NNRF9SRUFEMTsKIAkJfQotCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgcmVhZGNtZCk7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcmVhZGNtZCwgY3RybCk7CisJCWN0cmwgJj0gfk5BTkRfQ1RSTF9DSEFOR0U7CiAJfQotCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjb21tYW5kKTsKKwljaGlwLT5jbWRfY3RybChtdGQsIGNvbW1hbmQsIGN0cmwpOwogCi0JLyogU2V0IEFMRSBhbmQgY2xlYXIgQ0xFIHRvIHN0YXJ0IGFkZHJlc3MgY3ljbGUgKi8KLQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOwotCi0JaWYgKGNvbHVtbiAhPSAtMSB8fCBwYWdlX2FkZHIgIT0gLTEpIHsKLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQUxFKTsKLQotCQkvKiBTZXJpYWxseSBpbnB1dCBhZGRyZXNzICovCi0JCWlmIChjb2x1bW4gIT0gLTEpIHsKLQkJCS8qIEFkanVzdCBjb2x1bW5zIGZvciAxNiBiaXQgYnVzd2lkdGggKi8KLQkJCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKLQkJCQljb2x1bW4gPj49IDE7Ci0JCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgY29sdW1uKTsKLQkJfQotCQlpZiAocGFnZV9hZGRyICE9IC0xKSB7Ci0JCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVuc2lnbmVkIGNoYXIpIChwYWdlX2FkZHIgJiAweGZmKSk7Ci0JCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVuc2lnbmVkIGNoYXIpICgocGFnZV9hZGRyID4+IDgpICYgMHhmZikpOwotCQkJLyogT25lIG1vcmUgYWRkcmVzcyBjeWNsZSBmb3IgZGV2aWNlcyA+IDMyTWlCICovCi0JCQlpZiAodGhpcy0+Y2hpcHNpemUgPiAoMzIgPDwgMjApKQotCQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCAodW5zaWduZWQgY2hhcikgKChwYWdlX2FkZHIgPj4gMTYpICYgMHgwZikpOwotCQl9Ci0JCS8qIExhdGNoIGluIGFkZHJlc3MgKi8KLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQUxFKTsKKwkvKgorCSAqIEFkZHJlc3MgY3ljbGUsIHdoZW4gbmVjZXNzYXJ5CisJICovCisJY3RybCA9IE5BTkRfQ1RSTF9BTEUgfCBOQU5EX0NUUkxfQ0hBTkdFOworCS8qIFNlcmlhbGx5IGlucHV0IGFkZHJlc3MgKi8KKwlpZiAoY29sdW1uICE9IC0xKSB7CisJCS8qIEFkanVzdCBjb2x1bW5zIGZvciAxNiBiaXQgYnVzd2lkdGggKi8KKwkJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJY29sdW1uID4+PSAxOworCQljaGlwLT5jbWRfY3RybChtdGQsIGNvbHVtbiwgY3RybCk7CisJCWN0cmwgJj0gfk5BTkRfQ1RSTF9DSEFOR0U7CiAJfQorCWlmIChwYWdlX2FkZHIgIT0gLTEpIHsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBwYWdlX2FkZHIsIGN0cmwpOworCQljdHJsICY9IH5OQU5EX0NUUkxfQ0hBTkdFOworCQljaGlwLT5jbWRfY3RybChtdGQsIHBhZ2VfYWRkciA+PiA4LCBjdHJsKTsKKwkJLyogT25lIG1vcmUgYWRkcmVzcyBjeWNsZSBmb3IgZGV2aWNlcyA+IDMyTWlCICovCisJCWlmIChjaGlwLT5jaGlwc2l6ZSA+ICgzMiA8PCAyMCkpCisJCQljaGlwLT5jbWRfY3RybChtdGQsIHBhZ2VfYWRkciA+PiAxNiwgY3RybCk7CisJfQorCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfTk9ORSwgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCS8qCiAJICogcHJvZ3JhbSBhbmQgZXJhc2UgaGF2ZSB0aGVpciBvd24gYnVzeSBoYW5kbGVycwogCSAqIHN0YXR1cyBhbmQgc2VxdWVudGlhbCBpbiBuZWVkcyBubyBkZWxheQotCSovCisJICovCiAJc3dpdGNoIChjb21tYW5kKSB7CiAKIAljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgpAQCAtNjEyLDI5ICs1MDQsMzAgQEAKIAkJcmV0dXJuOwogCiAJY2FzZSBOQU5EX0NNRF9SRVNFVDoKLQkJaWYgKHRoaXMtPmRldl9yZWFkeSkKKwkJaWYgKGNoaXAtPmRldl9yZWFkeSkKIAkJCWJyZWFrOwotCQl1ZGVsYXkodGhpcy0+Y2hpcF9kZWxheSk7Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7Ci0JCXRoaXMtPndyaXRlX2J5dGUobXRkLCBOQU5EX0NNRF9TVEFUVVMpOwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOwotCQl3aGlsZSAoICEodGhpcy0+cmVhZF9ieXRlKG10ZCkgJiBOQU5EX1NUQVRVU19SRUFEWSkpOworCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfU1RBVFVTLAorCQkJICAgICAgIE5BTkRfQ1RSTF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLAorCQkJICAgICAgIE5BTkRfQ01EX05PTkUsIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CisJCXdoaWxlICghKGNoaXAtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpKSA7CiAJCXJldHVybjsKIAotCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCisJCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCiAJZGVmYXVsdDoKIAkJLyoKIAkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGJ1c3kgcGluLCB3ZSBhcHBseSB0aGUgZ2l2ZW4KIAkJICogY29tbWFuZCBkZWxheQotCQkqLwotCQlpZiAoIXRoaXMtPmRldl9yZWFkeSkgewotCQkJdWRlbGF5ICh0aGlzLT5jaGlwX2RlbGF5KTsKKwkJICovCisJCWlmICghY2hpcC0+ZGV2X3JlYWR5KSB7CisJCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4KIAkgKiBhbnkgY2FzZSBvbiBhbnkgbWFjaGluZS4gKi8KLQluZGVsYXkgKDEwMCk7CisJbmRlbGF5KDEwMCk7CiAKIAluYW5kX3dhaXRfcmVhZHkobXRkKTsKIH0KQEAgLTY0Niw1MCArNTM5LDQ5IEBACiAgKiBAY29sdW1uOgl0aGUgY29sdW1uIGFkZHJlc3MgZm9yIHRoaXMgY29tbWFuZCwgLTEgaWYgbm9uZQogICogQHBhZ2VfYWRkcjoJdGhlIHBhZ2UgYWRkcmVzcyBmb3IgdGhpcyBjb21tYW5kLCAtMSBpZiBub25lCiAgKgotICogU2VuZCBjb21tYW5kIHRvIE5BTkQgZGV2aWNlLiBUaGlzIGlzIHRoZSB2ZXJzaW9uIGZvciB0aGUgbmV3IGxhcmdlIHBhZ2UgZGV2aWNlcwotICogV2UgZG9udCBoYXZlIHRoZSBzZXBlcmF0ZSByZWdpb25zIGFzIHdlIGhhdmUgaW4gdGhlIHNtYWxsIHBhZ2UgZGV2aWNlcy4KLSAqIFdlIG11c3QgZW11bGF0ZSBOQU5EX0NNRF9SRUFET09CIHRvIGtlZXAgdGhlIGNvZGUgY29tcGF0aWJsZS4KKyAqIFNlbmQgY29tbWFuZCB0byBOQU5EIGRldmljZS4gVGhpcyBpcyB0aGUgdmVyc2lvbiBmb3IgdGhlIG5ldyBsYXJnZSBwYWdlCisgKiBkZXZpY2VzIFdlIGRvbnQgaGF2ZSB0aGUgc2VwYXJhdGUgcmVnaW9ucyBhcyB3ZSBoYXZlIGluIHRoZSBzbWFsbCBwYWdlCisgKiBkZXZpY2VzLiAgV2UgbXVzdCBlbXVsYXRlIE5BTkRfQ01EX1JFQURPT0IgdG8ga2VlcCB0aGUgY29kZSBjb21wYXRpYmxlLgogICoKICAqLwotc3RhdGljIHZvaWQgbmFuZF9jb21tYW5kX2xwIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3N0YXRpYyB2b2lkIG5hbmRfY29tbWFuZF9scChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgaW50IGNvbW1hbmQsCisJCQkgICAgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKIHsKLQlyZWdpc3RlciBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXJlZ2lzdGVyIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKIAkvKiBFbXVsYXRlIE5BTkRfQ01EX1JFQURPT0IgKi8KIAlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFET09CKSB7Ci0JCWNvbHVtbiArPSBtdGQtPm9vYmJsb2NrOworCQljb2x1bW4gKz0gbXRkLT53cml0ZXNpemU7CiAJCWNvbW1hbmQgPSBOQU5EX0NNRF9SRUFEMDsKIAl9CiAKLQotCS8qIEJlZ2luIGNvbW1hbmQgbGF0Y2ggY3ljbGUgKi8KLQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCS8qIFdyaXRlIG91dCB0aGUgY29tbWFuZCB0byB0aGUgZGV2aWNlLiAqLwotCXRoaXMtPndyaXRlX2J5dGUobXRkLCAoY29tbWFuZCAmIDB4ZmYpKTsKLQkvKiBFbmQgY29tbWFuZCBsYXRjaCBjeWNsZSAqLwotCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkNMRSk7CisJLyogQ29tbWFuZCBsYXRjaCBjeWNsZSAqLworCWNoaXAtPmNtZF9jdHJsKG10ZCwgY29tbWFuZCAmIDB4ZmYsCisJCSAgICAgICBOQU5EX05DRSB8IE5BTkRfQ0xFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAKIAlpZiAoY29sdW1uICE9IC0xIHx8IHBhZ2VfYWRkciAhPSAtMSkgewotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRBTEUpOworCQlpbnQgY3RybCA9IE5BTkRfQ1RSTF9DSEFOR0UgfCBOQU5EX05DRSB8IE5BTkRfQUxFOwogCiAJCS8qIFNlcmlhbGx5IGlucHV0IGFkZHJlc3MgKi8KIAkJaWYgKGNvbHVtbiAhPSAtMSkgewogCQkJLyogQWRqdXN0IGNvbHVtbnMgZm9yIDE2IGJpdCBidXN3aWR0aCAqLwotCQkJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQogCQkJCWNvbHVtbiA+Pj0gMTsKLQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjb2x1bW4gJiAweGZmKTsKLQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjb2x1bW4gPj4gOCk7CisJCQljaGlwLT5jbWRfY3RybChtdGQsIGNvbHVtbiwgY3RybCk7CisJCQljdHJsICY9IH5OQU5EX0NUUkxfQ0hBTkdFOworCQkJY2hpcC0+Y21kX2N0cmwobXRkLCBjb2x1bW4gPj4gOCwgY3RybCk7CiAJCX0KIAkJaWYgKHBhZ2VfYWRkciAhPSAtMSkgewotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAocGFnZV9hZGRyICYgMHhmZikpOwotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpKTsKKwkJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcGFnZV9hZGRyLCBjdHJsKTsKKwkJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcGFnZV9hZGRyID4+IDgsCisJCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9BTEUpOwogCQkJLyogT25lIG1vcmUgYWRkcmVzcyBjeWNsZSBmb3IgZGV2aWNlcyA+IDEyOE1pQiAqLwotCQkJaWYgKHRoaXMtPmNoaXBzaXplID4gKDEyOCA8PCAyMCkpCi0JCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiAxNikgJiAweGZmKSk7CisJCQlpZiAoY2hpcC0+Y2hpcHNpemUgPiAoMTI4IDw8IDIwKSkKKwkJCQljaGlwLT5jbWRfY3RybChtdGQsIHBhZ2VfYWRkciA+PiAxNiwKKwkJCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9BTEUpOwogCQl9Ci0JCS8qIExhdGNoIGluIGFkZHJlc3MgKi8KLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQUxFKTsKIAl9CisJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLCBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCiAJLyoKIAkgKiBwcm9ncmFtIGFuZCBlcmFzZSBoYXZlIHRoZWlyIG93biBidXN5IGhhbmRsZXJzCkBAIC03MDIsNTUgKzU5NCw2MiBAQAogCWNhc2UgTkFORF9DTURfRVJBU0UxOgogCWNhc2UgTkFORF9DTURfRVJBU0UyOgogCWNhc2UgTkFORF9DTURfU0VRSU46CisJY2FzZSBOQU5EX0NNRF9STkRJTjoKIAljYXNlIE5BTkRfQ01EX1NUQVRVUzoKIAljYXNlIE5BTkRfQ01EX0RFUExFVEUxOgogCQlyZXR1cm47CiAKLQkvKgotCSAqIHJlYWQgZXJyb3Igc3RhdHVzIGNvbW1hbmRzIHJlcXVpcmUgb25seSBhIHNob3J0IGRlbGF5Ci0JICovCisJCS8qCisJCSAqIHJlYWQgZXJyb3Igc3RhdHVzIGNvbW1hbmRzIHJlcXVpcmUgb25seSBhIHNob3J0IGRlbGF5CisJCSAqLwogCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SOgogCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SMDoKIAljYXNlIE5BTkRfQ01EX1NUQVRVU19FUlJPUjE6CiAJY2FzZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IyOgogCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SMzoKLQkJdWRlbGF5KHRoaXMtPmNoaXBfZGVsYXkpOworCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CiAJCXJldHVybjsKIAogCWNhc2UgTkFORF9DTURfUkVTRVQ6Ci0JCWlmICh0aGlzLT5kZXZfcmVhZHkpCisJCWlmIChjaGlwLT5kZXZfcmVhZHkpCiAJCQlicmVhazsKLQkJdWRlbGF5KHRoaXMtPmNoaXBfZGVsYXkpOwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgTkFORF9DTURfU1RBVFVTKTsKLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKLQkJd2hpbGUgKCAhKHRoaXMtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpKTsKKwkJdWRlbGF5KGNoaXAtPmNoaXBfZGVsYXkpOworCQljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX1NUQVRVUywKKwkJCSAgICAgICBOQU5EX05DRSB8IE5BTkRfQ0xFIHwgTkFORF9DVFJMX0NIQU5HRSk7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfTk9ORSwKKwkJCSAgICAgICBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQl3aGlsZSAoIShjaGlwLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1JFQURZKSkgOworCQlyZXR1cm47CisKKwljYXNlIE5BTkRfQ01EX1JORE9VVDoKKwkJLyogTm8gcmVhZHkgLyBidXN5IGNoZWNrIG5lY2Vzc2FyeSAqLworCQljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX1JORE9VVFNUQVJULAorCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLAorCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAJCXJldHVybjsKIAogCWNhc2UgTkFORF9DTURfUkVBRDA6Ci0JCS8qIEJlZ2luIGNvbW1hbmQgbGF0Y2ggY3ljbGUgKi8KLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQ0xFKTsKLQkJLyogV3JpdGUgb3V0IHRoZSBzdGFydCByZWFkIGNvbW1hbmQgKi8KLQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsIE5BTkRfQ01EX1JFQURTVEFSVCk7Ci0JCS8qIEVuZCBjb21tYW5kIGxhdGNoIGN5Y2xlICovCi0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkNMRSk7Ci0JCS8qIEZhbGwgdGhyb3VnaCBpbnRvIHJlYWR5IGNoZWNrICovCisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfUkVBRFNUQVJULAorCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLAorCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAKLQkvKiBUaGlzIGFwcGxpZXMgdG8gcmVhZCBjb21tYW5kcyAqLworCQkvKiBUaGlzIGFwcGxpZXMgdG8gcmVhZCBjb21tYW5kcyAqLwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIElmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBidXN5IHBpbiwgd2UgYXBwbHkgdGhlIGdpdmVuCiAJCSAqIGNvbW1hbmQgZGVsYXkKLQkJKi8KLQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpIHsKLQkJCXVkZWxheSAodGhpcy0+Y2hpcF9kZWxheSk7CisJCSAqLworCQlpZiAoIWNoaXAtPmRldl9yZWFkeSkgeworCQkJdWRlbGF5KGNoaXAtPmNoaXBfZGVsYXkpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCiAJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4KIAkgKiBhbnkgY2FzZSBvbiBhbnkgbWFjaGluZS4gKi8KLQluZGVsYXkgKDEwMCk7CisJbmRlbGF5KDEwMCk7CiAKIAluYW5kX3dhaXRfcmVhZHkobXRkKTsKIH0KQEAgLTc2MywzNCArNjYyLDI4IEBACiAgKgogICogR2V0IHRoZSBkZXZpY2UgYW5kIGxvY2sgaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MKICAqLwotc3RhdGljIGludCBuYW5kX2dldF9kZXZpY2UgKHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbmV3X3N0YXRlKQorc3RhdGljIGludAorbmFuZF9nZXRfZGV2aWNlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbmV3X3N0YXRlKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKmFjdGl2ZTsKLQlzcGlubG9ja190ICpsb2NrOwotCXdhaXRfcXVldWVfaGVhZF90ICp3cTsKLQlERUNMQVJFX1dBSVRRVUVVRSAod2FpdCwgY3VycmVudCk7Ci0KLQlsb2NrID0gKHRoaXMtPmNvbnRyb2xsZXIpID8gJnRoaXMtPmNvbnRyb2xsZXItPmxvY2sgOiAmdGhpcy0+Y2hpcF9sb2NrOwotCXdxID0gKHRoaXMtPmNvbnRyb2xsZXIpID8gJnRoaXMtPmNvbnRyb2xsZXItPndxIDogJnRoaXMtPndxOwotcmV0cnk6Ci0JYWN0aXZlID0gdGhpczsKKwlzcGlubG9ja190ICpsb2NrID0gJmNoaXAtPmNvbnRyb2xsZXItPmxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxID0gJmNoaXAtPmNvbnRyb2xsZXItPndxOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworIHJldHJ5OgogCXNwaW5fbG9jayhsb2NrKTsKIAogCS8qIEhhcmR3YXJlIGNvbnRyb2xsZXIgc2hhcmVkIGFtb25nIGluZGVwZW5kZW5kIGRldmljZXMgKi8KLQlpZiAodGhpcy0+Y29udHJvbGxlcikgewotCQlpZiAodGhpcy0+Y29udHJvbGxlci0+YWN0aXZlKQotCQkJYWN0aXZlID0gdGhpcy0+Y29udHJvbGxlci0+YWN0aXZlOwotCQllbHNlCi0JCQl0aGlzLT5jb250cm9sbGVyLT5hY3RpdmUgPSB0aGlzOwotCX0KLQlpZiAoYWN0aXZlID09IHRoaXMgJiYgdGhpcy0+c3RhdGUgPT0gRkxfUkVBRFkpIHsKLQkJdGhpcy0+c3RhdGUgPSBuZXdfc3RhdGU7CisJLyogSGFyZHdhcmUgY29udHJvbGxlciBzaGFyZWQgYW1vbmcgaW5kZXBlbmRlbmQgZGV2aWNlcyAqLworCWlmICghY2hpcC0+Y29udHJvbGxlci0+YWN0aXZlKQorCQljaGlwLT5jb250cm9sbGVyLT5hY3RpdmUgPSBjaGlwOworCisJaWYgKGNoaXAtPmNvbnRyb2xsZXItPmFjdGl2ZSA9PSBjaGlwICYmIGNoaXAtPnN0YXRlID09IEZMX1JFQURZKSB7CisJCWNoaXAtPnN0YXRlID0gbmV3X3N0YXRlOwogCQlzcGluX3VubG9jayhsb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChuZXdfc3RhdGUgPT0gRkxfUE1fU1VTUEVOREVEKSB7CiAJCXNwaW5fdW5sb2NrKGxvY2spOwotCQlyZXR1cm4gKHRoaXMtPnN0YXRlID09IEZMX1BNX1NVU1BFTkRFRCkgPyAwIDogLUVBR0FJTjsKKwkJcmV0dXJuIChjaGlwLT5zdGF0ZSA9PSBGTF9QTV9TVVNQRU5ERUQpID8gMCA6IC1FQUdBSU47CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAlhZGRfd2FpdF9xdWV1ZSh3cSwgJndhaXQpOwpAQCAtODA0LDI2NSArNjk3LDM3MSBAQAogICogbmFuZF93YWl0IC0gW0RFRkFVTFRdICB3YWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGRvbmUKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdGhpczoJTkFORCBjaGlwIHN0cnVjdHVyZQotICogQHN0YXRlOglzdGF0ZSB0byBzZWxlY3QgdGhlIG1heC4gdGltZW91dCB2YWx1ZQogICoKICAqIFdhaXQgZm9yIGNvbW1hbmQgZG9uZS4gVGhpcyBhcHBsaWVzIHRvIGVyYXNlIGFuZCBwcm9ncmFtIG9ubHkKICAqIEVyYXNlIGNhbiB0YWtlIHVwIHRvIDQwMG1zIGFuZCBwcm9ncmFtIHVwIHRvIDIwbXMgYWNjb3JkaW5nIHRvCiAgKiBnZW5lcmFsIE5BTkQgYW5kIFNtYXJ0TWVkaWEgc3BlY3MKICAqCiAqLwotc3RhdGljIGludCBuYW5kX3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgbmFuZF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQogewogCi0JdW5zaWduZWQgbG9uZwl0aW1lbyA9IGppZmZpZXM7Ci0JaW50CXN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHRpbWVvID0gamlmZmllczsKKwlpbnQgc3RhdHVzLCBzdGF0ZSA9IGNoaXAtPnN0YXRlOwogCiAJaWYgKHN0YXRlID09IEZMX0VSQVNJTkcpCi0JCSB0aW1lbyArPSAoSFogKiA0MDApIC8gMTAwMDsKKwkJdGltZW8gKz0gKEhaICogNDAwKSAvIDEwMDA7CiAJZWxzZQotCQkgdGltZW8gKz0gKEhaICogMjApIC8gMTAwMDsKKwkJdGltZW8gKz0gKEhaICogMjApIC8gMTAwMDsKIAogCWxlZF90cmlnZ2VyX2V2ZW50KG5hbmRfbGVkX3RyaWdnZXIsIExFRF9GVUxMKTsKIAogCS8qIEFwcGx5IHRoaXMgc2hvcnQgZGVsYXkgYWx3YXlzIHRvIGVuc3VyZSB0aGF0IHdlIGRvIHdhaXQgdFdCIGluCiAJICogYW55IGNhc2Ugb24gYW55IG1hY2hpbmUuICovCi0JbmRlbGF5ICgxMDApOworCW5kZWxheSgxMDApOwogCi0JaWYgKChzdGF0ZSA9PSBGTF9FUkFTSU5HKSAmJiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSVNfQU5EKSkKLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVNfTVVMVEksIC0xLCAtMSk7CisJaWYgKChzdGF0ZSA9PSBGTF9FUkFTSU5HKSAmJiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfSVNfQU5EKSkKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NUQVRVU19NVUxUSSwgLTEsIC0xKTsKIAllbHNlCi0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfU1RBVFVTLCAtMSwgLTEpOworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU1RBVFVTLCAtMSwgLTEpOwogCiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvKSkgewotCQkvKiBDaGVjaywgaWYgd2Ugd2VyZSBpbnRlcnJ1cHRlZCAqLwotCQlpZiAodGhpcy0+c3RhdGUgIT0gc3RhdGUpCi0JCQlyZXR1cm4gMDsKLQotCQlpZiAodGhpcy0+ZGV2X3JlYWR5KSB7Ci0JCQlpZiAodGhpcy0+ZGV2X3JlYWR5KG10ZCkpCisJCWlmIChjaGlwLT5kZXZfcmVhZHkpIHsKKwkJCWlmIChjaGlwLT5kZXZfcmVhZHkobXRkKSkKIAkJCQlicmVhazsKIAkJfSBlbHNlIHsKLQkJCWlmICh0aGlzLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1JFQURZKQorCQkJaWYgKGNoaXAtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpCiAJCQkJYnJlYWs7CiAJCX0KIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWxlZF90cmlnZ2VyX2V2ZW50KG5hbmRfbGVkX3RyaWdnZXIsIExFRF9PRkYpOwogCi0Jc3RhdHVzID0gKGludCkgdGhpcy0+cmVhZF9ieXRlKG10ZCk7CisJc3RhdHVzID0gKGludCljaGlwLT5yZWFkX2J5dGUobXRkKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAvKioKLSAqIG5hbmRfd3JpdGVfcGFnZSAtIFtHRU5FUklDXSB3cml0ZSBvbmUgcGFnZQotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB0aGlzOglOQU5EIGNoaXAgc3RydWN0dXJlCi0gKiBAcGFnZTogCXN0YXJ0cGFnZSBpbnNpZGUgdGhlIGNoaXAsIG11c3QgYmUgY2FsbGVkIHdpdGggKHBhZ2UgJiB0aGlzLT5wYWdlbWFzaykKLSAqIEBvb2JfYnVmOglvdXQgb2YgYmFuZCBkYXRhIGJ1ZmZlcgotICogQG9vYnNlbDoJb3V0IG9mIGJhbmQgc2VsZWN0dGlvbiBzdHJ1Y3RyZQotICogQGNhY2hlZDoJMSA9IGVuYWJsZSBjYWNoZWQgcHJvZ3JhbW1pbmcgaWYgc3VwcG9ydGVkIGJ5IGNoaXAKLSAqCi0gKiBOYW5kX3BhZ2VfcHJvZ3JhbSBmdW5jdGlvbiBpcyB1c2VkIGZvciB3cml0ZSBhbmQgd3JpdGV2ICEKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcHJvZ3JhbSBhIGZ1bGwgcGFnZSBvZiBkYXRhCi0gKiBJZiB5b3UgY2FsbCBpdCB3aXRoIGEgbm9uIHBhZ2UgYWxpZ25lZCBidWZmZXIsIHlvdSdyZSBsb3N0IDopCi0gKgotICogQ2FjaGVkIHByb2dyYW1taW5nIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICogbmFuZF9yZWFkX3BhZ2VfcmF3IC0gW0ludGVybl0gcmVhZCByYXcgcGFnZSBkYXRhIHdpdGhvdXQgZWNjCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKICAqLwotc3RhdGljIGludCBuYW5kX3dyaXRlX3BhZ2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgcGFnZSwKLQl1X2NoYXIgKm9vYl9idWYsICBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwsIGludCBjYWNoZWQpCitzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCSAgICAgIHVpbnQ4X3QgKmJ1ZikKIHsKLQlpbnQgCWksIHN0YXR1czsKLQl1X2NoYXIJZWNjX2NvZGVbMzJdOwotCWludAllY2Ntb2RlID0gb29ic2VsLT51c2VlY2MgPyB0aGlzLT5lY2Ntb2RlIDogTkFORF9FQ0NfTk9ORTsKLQlpbnQgIAkqb29iX2NvbmZpZyA9IG9vYnNlbC0+ZWNjcG9zOwotCWludAlkYXRpZHggPSAwLCBlY2NpZHggPSAwLCBlY2NzdGVwcyA9IHRoaXMtPmVjY3N0ZXBzOwotCWludAllY2NieXRlcyA9IDA7CisJY2hpcC0+cmVhZF9idWYobXRkLCBidWYsIG10ZC0+d3JpdGVzaXplKTsKKwljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7CisJcmV0dXJuIDA7Cit9CiAKLQkvKiBGSVhNRTogRW5hYmxlIGNhY2hlZCBwcm9ncmFtbWluZyAqLwotCWNhY2hlZCA9IDA7CisvKioKKyAqIG5hbmRfcmVhZF9wYWdlX3N3ZWNjIC0ge1JFUExBQ0FCTEVdIHNvZnR3YXJlIGVjYyBiYXNlZCBwYWdlIHJlYWQgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICovCitzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX3N3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCXVpbnQ4X3QgKmJ1ZikKK3sKKwlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJdWludDhfdCAqcCA9IGJ1ZjsKKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmJ1ZmZlcnMuZWNjY2FsYzsKKwl1aW50OF90ICplY2NfY29kZSA9IGNoaXAtPmJ1ZmZlcnMuZWNjY29kZTsKKwlpbnQgKmVjY3BvcyA9IGNoaXAtPmVjYy5sYXlvdXQtPmVjY3BvczsKIAotCS8qIFNlbmQgY29tbWFuZCB0byBiZWdpbiBhdXRvIHBhZ2UgcHJvZ3JhbW1pbmcgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NFUUlOLCAweDAwLCBwYWdlKTsKKwluYW5kX3JlYWRfcGFnZV9yYXcobXRkLCBjaGlwLCBidWYpOwogCi0JLyogV3JpdGUgb3V0IGNvbXBsZXRlIHBhZ2Ugb2YgZGF0YSwgdGFrZSBjYXJlIG9mIGVjY21vZGUgKi8KLQlzd2l0Y2ggKGVjY21vZGUpIHsKLQkvKiBObyBlY2MsIHdyaXRlIGFsbCAqLwotCWNhc2UgTkFORF9FQ0NfTk9ORToKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIldyaXRpbmcgZGF0YSB3aXRob3V0IEVDQyB0byBOQU5ELUZMQVNIIGlzIG5vdCByZWNvbW1lbmRlZFxuIik7Ci0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIHRoaXMtPmRhdGFfcG9pLCBtdGQtPm9vYmJsb2NrKTsKLQkJYnJlYWs7CisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsICZlY2NfY2FsY1tpXSk7CiAKLQkvKiBTb2Z0d2FyZSBlY2MgMy8yNTYsIHdyaXRlIGFsbCAqLwotCWNhc2UgTkFORF9FQ0NfU09GVDoKLQkJZm9yICg7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tKSB7Ci0JCQl0aGlzLT5jYWxjdWxhdGVfZWNjKG10ZCwgJnRoaXMtPmRhdGFfcG9pW2RhdGlkeF0sIGVjY19jb2RlKTsKLQkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIGVjY2lkeCsrKQotCQkJCW9vYl9idWZbb29iX2NvbmZpZ1tlY2NpZHhdXSA9IGVjY19jb2RlW2ldOwotCQkJZGF0aWR4ICs9IHRoaXMtPmVjY3NpemU7Ci0JCX0KLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgdGhpcy0+ZGF0YV9wb2ksIG10ZC0+b29iYmxvY2spOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllY2NieXRlcyA9IHRoaXMtPmVjY2J5dGVzOwotCQlmb3IgKDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0pIHsKLQkJCS8qIGVuYWJsZSBoYXJkd2FyZSBlY2MgbG9naWMgZm9yIHdyaXRlICovCi0JCQl0aGlzLT5lbmFibGVfaHdlY2MobXRkLCBOQU5EX0VDQ19XUklURSk7Ci0JCQl0aGlzLT53cml0ZV9idWYobXRkLCAmdGhpcy0+ZGF0YV9wb2lbZGF0aWR4XSwgdGhpcy0+ZWNjc2l6ZSk7Ci0JCQl0aGlzLT5jYWxjdWxhdGVfZWNjKG10ZCwgJnRoaXMtPmRhdGFfcG9pW2RhdGlkeF0sIGVjY19jb2RlKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBlY2NieXRlczsgaSsrLCBlY2NpZHgrKykKLQkJCQlvb2JfYnVmW29vYl9jb25maWdbZWNjaWR4XV0gPSBlY2NfY29kZVtpXTsKLQkJCS8qIElmIHRoZSBoYXJkd2FyZSBlY2MgcHJvdmlkZXMgc3luZHJvbWVzIHRoZW4KLQkJCSAqIHRoZSBlY2MgY29kZSBtdXN0IGJlIHdyaXR0ZW4gaW1taWRpYXRlbHkgYWZ0ZXIKLQkJCSAqIHRoZSBkYXRhIGJ5dGVzICh3b3JkcykgKi8KLQkJCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9IV0VDQ19TWU5EUk9NRSkKLQkJCQl0aGlzLT53cml0ZV9idWYobXRkLCBlY2NfY29kZSwgZWNjYnl0ZXMpOwotCQkJZGF0aWR4ICs9IHRoaXMtPmVjY3NpemU7Ci0JCX0KLQkJYnJlYWs7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5lY2MudG90YWw7IGkrKykKKwkJZWNjX2NvZGVbaV0gPSBjaGlwLT5vb2JfcG9pW2VjY3Bvc1tpXV07CiAKLQkvKiBXcml0ZSBvdXQgT09CIGRhdGEgKi8KLQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSFdFQ0NfU1lORFJPTUUpCi0JCXRoaXMtPndyaXRlX2J1ZihtdGQsICZvb2JfYnVmW29vYnNlbC0+ZWNjYnl0ZXNdLCBtdGQtPm9vYnNpemUgLSBvb2JzZWwtPmVjY2J5dGVzKTsKLQllbHNlCi0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIG9vYl9idWYsIG10ZC0+b29ic2l6ZSk7CisJZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJcCA9IGJ1ZjsKIAotCS8qIFNlbmQgY29tbWFuZCB0byBhY3R1YWxseSBwcm9ncmFtIHRoZSBkYXRhICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBjYWNoZWQgPyBOQU5EX0NNRF9DQUNIRURQUk9HIDogTkFORF9DTURfUEFHRVBST0csIC0xLCAtMSk7CisJZm9yIChpID0gMCA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJaW50IHN0YXQ7CiAKLQlpZiAoIWNhY2hlZCkgewotCQkvKiBjYWxsIHdhaXQgcmVhZHkgZnVuY3Rpb24gKi8KLQkJc3RhdHVzID0gdGhpcy0+d2FpdGZ1bmMgKG10ZCwgdGhpcywgRkxfV1JJVElORyk7Ci0KLQkJLyogU2VlIGlmIG9wZXJhdGlvbiBmYWlsZWQgYW5kIGFkZGl0aW9uYWwgc3RhdHVzIGNoZWNrcyBhcmUgYXZhaWxhYmxlICovCi0JCWlmICgoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgJiYgKHRoaXMtPmVycnN0YXQpKSB7Ci0JCQlzdGF0dXMgPSB0aGlzLT5lcnJzdGF0KG10ZCwgdGhpcywgRkxfV1JJVElORywgc3RhdHVzLCBwYWdlKTsKLQkJfQotCi0JCS8qIFNlZSBpZiBkZXZpY2UgdGhpbmtzIGl0IHN1Y2NlZWRlZCAqLwotCQlpZiAoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgewotCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICIlczogIiAiRmFpbGVkIHdyaXRlLCBwYWdlIDB4JTA4eCwgIiwgX19GVU5DVElPTl9fLCBwYWdlKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogRklYTUU6IEltcGxlbWVudCBjYWNoZWQgcHJvZ3JhbW1pbmcgISAqLwotCQkvKiB3YWl0IHVudGlsIGNhY2hlIGlzIHJlYWR5Ki8KLQkJLy8gc3RhdHVzID0gdGhpcy0+d2FpdGZ1bmMgKG10ZCwgdGhpcywgRkxfQ0FDSEVEUlBHKTsKKwkJc3RhdCA9IGNoaXAtPmVjYy5jb3JyZWN0KG10ZCwgcCwgJmVjY19jb2RlW2ldLCAmZWNjX2NhbGNbaV0pOworCQlpZiAoc3RhdCA9PSAtMSkKKwkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQllbHNlCisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gc3RhdDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFCiAvKioKLSAqIG5hbmRfdmVyaWZ5X3BhZ2VzIC0gW0dFTkVSSUNdIHZlcmlmeSB0aGUgY2hpcCBjb250ZW50cyBhZnRlciBhIHdyaXRlCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRoaXM6CU5BTkQgY2hpcCBzdHJ1Y3R1cmUKLSAqIEBwYWdlOiAJc3RhcnRwYWdlIGluc2lkZSB0aGUgY2hpcCwgbXVzdCBiZSBjYWxsZWQgd2l0aCAocGFnZSAmIHRoaXMtPnBhZ2VtYXNrKQotICogQG51bXBhZ2VzOgludW1iZXIgb2YgcGFnZXMgdG8gdmVyaWZ5Ci0gKiBAb29iX2J1ZjoJb3V0IG9mIGJhbmQgZGF0YSBidWZmZXIKLSAqIEBvb2JzZWw6CW91dCBvZiBiYW5kIHNlbGVjdHRpb24gc3RydWN0cmUKLSAqIEBjaGlwbnI6CW51bWJlciBvZiB0aGUgY3VycmVudCBjaGlwCi0gKiBAb29ibW9kZToJMSA9IGZ1bGwgYnVmZmVyIHZlcmlmeSwgMCA9IGVjYyBvbmx5CisgKiBuYW5kX3JlYWRfcGFnZV9od2VjYyAtIHtSRVBMQUNBQkxFXSBoYXJkd2FyZSBlY2MgYmFzZWQgcGFnZSByZWFkIGZ1bmN0aW9uCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKICAqCi0gKiBUaGUgTkFORCBkZXZpY2UgYXNzdW1lcyB0aGF0IGl0IGlzIGFsd2F5cyB3cml0aW5nIHRvIGEgY2xlYW5seSBlcmFzZWQgcGFnZS4KLSAqIEhlbmNlLCBpdCBwZXJmb3JtcyBpdHMgaW50ZXJuYWwgd3JpdGUgdmVyaWZpY2F0aW9uIG9ubHkgb24gYml0cyB0aGF0Ci0gKiB0cmFuc2l0aW9uZWQgZnJvbSAxIHRvIDAuIFRoZSBkZXZpY2UgZG9lcyBOT1QgdmVyaWZ5IHRoZSB3aG9sZSBwYWdlIG9uIGEKLSAqIGJ5dGUgYnkgYnl0ZSBiYXNpcy4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcGFnZSB3YXMgbm90IGNvbXBsZXRlbHkgZXJhc2VkCi0gKiBvciB0aGUgcGFnZSBpcyBiZWNvbWluZyB1bnVzYWJsZSBkdWUgdG8gd2Vhci4gVGhlIHJlYWQgd2l0aCBFQ0Mgd291bGQgY2F0Y2gKLSAqIHRoZSBlcnJvciBsYXRlciB3aGVuIHRoZSBFQ0MgcGFnZSBjaGVjayBmYWlscywgYnV0IHdlIHdvdWxkIHJhdGhlciBjYXRjaAotICogaXQgZWFybHkgaW4gdGhlIHBhZ2Ugd3JpdGUgc3RhZ2UuIEJldHRlciB0byB3cml0ZSBubyBkYXRhIHRoYW4gaW52YWxpZCBkYXRhLgorICogTm90IGZvciBzeW5kcm9tZSBjYWxjdWxhdGluZyBlY2MgY29udHJvbGxlcnMgd2hpY2ggbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dAogICovCi1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X3BhZ2VzIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHBhZ2UsIGludCBudW1wYWdlcywKLQl1X2NoYXIgKm9vYl9idWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCwgaW50IGNoaXBuciwgaW50IG9vYm1vZGUpCitzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCXVpbnQ4X3QgKmJ1ZikKIHsKLQlpbnQgCWksIGosIGRhdGlkeCA9IDAsIG9vYm9mcyA9IDAsIHJlcyA9IC1FSU87Ci0JaW50CWVjY3N0ZXBzID0gdGhpcy0+ZWNjc3RlcHM7Ci0JaW50CWh3ZWNjYnl0ZXM7Ci0JdV9jaGFyIAlvb2JkYXRhWzY0XTsKKwlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJdWludDhfdCAqcCA9IGJ1ZjsKKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmJ1ZmZlcnMuZWNjY2FsYzsKKwl1aW50OF90ICplY2NfY29kZSA9IGNoaXAtPmJ1ZmZlcnMuZWNjY29kZTsKKwlpbnQgKmVjY3BvcyA9IGNoaXAtPmVjYy5sYXlvdXQtPmVjY3BvczsKIAotCWh3ZWNjYnl0ZXMgPSAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSFdFQ0NfU1lORFJPTUUpID8gKG9vYnNlbC0+ZWNjYnl0ZXMgLyBlY2NzdGVwcykgOiAwOworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJY2hpcC0+ZWNjLmh3Y3RsKG10ZCwgTkFORF9FQ0NfUkVBRCk7CisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7CisJCWNoaXAtPmVjYy5jYWxjdWxhdGUobXRkLCBwLCAmZWNjX2NhbGNbaV0pOworCX0KKwljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7CiAKLQkvKiBTZW5kIGNvbW1hbmQgdG8gcmVhZCBiYWNrIHRoZSBmaXJzdCBwYWdlICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFEMCwgMCwgcGFnZSk7CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPmVjYy50b3RhbDsgaSsrKQorCQllY2NfY29kZVtpXSA9IGNoaXAtPm9vYl9wb2lbZWNjcG9zW2ldXTsKIAotCWZvcig7OykgewotCQlmb3IgKGogPSAwOyBqIDwgZWNjc3RlcHM7IGorKykgewotCQkJLyogTG9vcCB0aHJvdWdoIGFuZCB2ZXJpZnkgdGhlIGRhdGEgKi8KLQkJCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgJnRoaXMtPmRhdGFfcG9pW2RhdGlkeF0sIG10ZC0+ZWNjc2l6ZSkpIHsKLQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiAiICJGYWlsZWQgd3JpdGUgdmVyaWZ5LCBwYWdlIDB4JTA4eCAiLCBfX0ZVTkNUSU9OX18sIHBhZ2UpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJZGF0aWR4ICs9IG10ZC0+ZWNjc2l6ZTsKLQkJCS8qIEhhdmUgd2UgYSBodyBnZW5lcmF0b3IgbGF5b3V0ID8gKi8KLQkJCWlmICghaHdlY2NieXRlcykKLQkJCQljb250aW51ZTsKLQkJCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgJnRoaXMtPm9vYl9idWZbb29ib2ZzXSwgaHdlY2NieXRlcykpIHsKLQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiAiICJGYWlsZWQgd3JpdGUgdmVyaWZ5LCBwYWdlIDB4JTA4eCAiLCBfX0ZVTkNUSU9OX18sIHBhZ2UpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJb29ib2ZzICs9IGh3ZWNjYnl0ZXM7CisJZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJcCA9IGJ1ZjsKKworCWZvciAoaSA9IDAgOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7CisJCWludCBzdGF0OworCisJCXN0YXQgPSBjaGlwLT5lY2MuY29ycmVjdChtdGQsIHAsICZlY2NfY29kZVtpXSwgJmVjY19jYWxjW2ldKTsKKwkJaWYgKHN0YXQgPT0gLTEpCisJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKKwkJZWxzZQorCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IHN0YXQ7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIG5hbmRfcmVhZF9wYWdlX3N5bmRyb21lIC0ge1JFUExBQ0FCTEVdIGhhcmR3YXJlIGVjYyBzeW5kcm9tIGJhc2VkIHBhZ2UgcmVhZAorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKgorICogVGhlIGh3IGdlbmVyYXRvciBjYWxjdWxhdGVzIHRoZSBlcnJvciBzeW5kcm9tZSBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcgorICogd2UgbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dCBhbmQgaGFuZGxpbmcuCisgKi8KK3N0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2Vfc3luZHJvbWUoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJICAgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXVpbnQ4X3QgKm9vYiA9IGNoaXAtPm9vYl9wb2k7CisKKwlmb3IgKGkgPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7CisJCWludCBzdGF0OworCisJCWNoaXAtPmVjYy5od2N0bChtdGQsIE5BTkRfRUNDX1JFQUQpOworCQljaGlwLT5yZWFkX2J1ZihtdGQsIHAsIGVjY3NpemUpOworCisJCWlmIChjaGlwLT5lY2MucHJlcGFkKSB7CisJCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnByZXBhZCk7CisJCQlvb2IgKz0gY2hpcC0+ZWNjLnByZXBhZDsKIAkJfQogCi0JCS8qIGNoZWNrLCBpZiB3ZSBtdXN0IGNvbXBhcmUgYWxsIGRhdGEgb3IgaWYgd2UganVzdCBoYXZlIHRvCi0JCSAqIGNvbXBhcmUgdGhlIGVjYyBieXRlcwotCQkgKi8KLQkJaWYgKG9vYm1vZGUpIHsKLQkJCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgJm9vYl9idWZbb29ib2ZzXSwgbXRkLT5vb2JzaXplIC0gaHdlY2NieXRlcyAqIGVjY3N0ZXBzKSkgewotCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAiJXM6ICIgIkZhaWxlZCB3cml0ZSB2ZXJpZnksIHBhZ2UgMHglMDh4ICIsIF9fRlVOQ1RJT05fXywgcGFnZSk7Ci0JCQkJZ290byBvdXQ7CisJCWNoaXAtPmVjYy5od2N0bChtdGQsIE5BTkRfRUNDX1JFQURTWU4pOworCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgZWNjYnl0ZXMpOworCQlzdGF0ID0gY2hpcC0+ZWNjLmNvcnJlY3QobXRkLCBwLCBvb2IsIE5VTEwpOworCisJCWlmIChzdGF0ID09IC0xKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCWVsc2UKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0OworCisJCW9vYiArPSBlY2NieXRlczsKKworCQlpZiAoY2hpcC0+ZWNjLnBvc3RwYWQpIHsKKwkJCWNoaXAtPnJlYWRfYnVmKG10ZCwgb29iLCBjaGlwLT5lY2MucG9zdHBhZCk7CisJCQlvb2IgKz0gY2hpcC0+ZWNjLnBvc3RwYWQ7CisJCX0KKwl9CisKKwkvKiBDYWxjdWxhdGUgcmVtYWluaW5nIG9vYiBieXRlcyAqLworCWkgPSBtdGQtPm9vYnNpemUgLSAob29iIC0gY2hpcC0+b29iX3BvaSk7CisJaWYgKGkpCisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgb29iLCBpKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG5hbmRfdHJhbnNmZXJfb29iIC0gW0ludGVybmFsXSBUcmFuc2ZlciBvb2IgdG8gY2xpZW50IGJ1ZmZlcgorICogQGNoaXA6CW5hbmQgY2hpcCBzdHJ1Y3R1cmUKKyAqIEBvcHM6CW9vYiBvcHMgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB1aW50OF90ICpuYW5kX3RyYW5zZmVyX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50OF90ICpvb2IsCisJCQkJICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlzaXplX3QgbGVuID0gb3BzLT5vb2JsZW47CisKKwlzd2l0Y2gob3BzLT5tb2RlKSB7CisKKwljYXNlIE1URF9PT0JfUExBQ0U6CisJY2FzZSBNVERfT09CX1JBVzoKKwkJbWVtY3B5KG9vYiwgY2hpcC0+b29iX3BvaSArIG9wcy0+b29ib2ZmcywgbGVuKTsKKwkJcmV0dXJuIG9vYiArIGxlbjsKKworCWNhc2UgTVREX09PQl9BVVRPOiB7CisJCXN0cnVjdCBuYW5kX29vYmZyZWUgKmZyZWUgPSBjaGlwLT5lY2MubGF5b3V0LT5vb2JmcmVlOworCQl1aW50MzJfdCBib2ZmcyA9IDAsIHJvZmZzID0gb3BzLT5vb2JvZmZzOworCQlzaXplX3QgYnl0ZXMgPSAwOworCisJCWZvcig7IGZyZWUtPmxlbmd0aCAmJiBsZW47IGZyZWUrKywgbGVuIC09IGJ5dGVzKSB7CisJCQkvKiBSZWFkIHJlcXVlc3Qgbm90IGZyb20gb2Zmc2V0IDAgPyAqLworCQkJaWYgKHVubGlrZWx5KHJvZmZzKSkgeworCQkJCWlmIChyb2ZmcyA+PSBmcmVlLT5sZW5ndGgpIHsKKwkJCQkJcm9mZnMgLT0gZnJlZS0+bGVuZ3RoOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYm9mZnMgPSBmcmVlLT5vZmZzZXQgKyByb2ZmczsKKwkJCQlieXRlcyA9IG1pbl90KHNpemVfdCwgbGVuLAorCQkJCQkgICAgICAoZnJlZS0+bGVuZ3RoIC0gcm9mZnMpKTsKKwkJCQlyb2ZmcyA9IDA7CisJCQl9IGVsc2UgeworCQkJCWJ5dGVzID0gbWluX3Qoc2l6ZV90LCBsZW4sIGZyZWUtPmxlbmd0aCk7CisJCQkJYm9mZnMgPSBmcmVlLT5vZmZzZXQ7CisJCQl9CisJCQltZW1jcHkob29iLCBjaGlwLT5vb2JfcG9pICsgYm9mZnMsIGJ5dGVzKTsKKwkJCW9vYiArPSBieXRlczsKKwkJfQorCQlyZXR1cm4gb29iOworCX0KKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogbmFuZF9kb19yZWFkX29wcyAtIFtJbnRlcm5hbF0gUmVhZCBkYXRhIHdpdGggRUNDCisgKgorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCisgKgorICogSW50ZXJuYWwgZnVuY3Rpb24uIENhbGxlZCB3aXRoIGNoaXAgaGVsZC4KKyAqLworc3RhdGljIGludCBuYW5kX2RvX3JlYWRfb3BzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlpbnQgY2hpcG5yLCBwYWdlLCByZWFscGFnZSwgY29sLCBieXRlcywgYWxpZ25lZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBtdGRfZWNjX3N0YXRzIHN0YXRzOworCWludCBibGtjaGVjayA9ICgxIDw8IChjaGlwLT5waHlzX2VyYXNlX3NoaWZ0IC0gY2hpcC0+cGFnZV9zaGlmdCkpIC0gMTsKKwlpbnQgc25kY21kID0gMTsKKwlpbnQgcmV0ID0gMDsKKwl1aW50MzJfdCByZWFkbGVuID0gb3BzLT5sZW47CisJdWludDhfdCAqYnVmcG9pLCAqb29iLCAqYnVmOworCisJc3RhdHMgPSBtdGQtPmVjY19zdGF0czsKKworCWNoaXBuciA9IChpbnQpKGZyb20gPj4gY2hpcC0+Y2hpcF9zaGlmdCk7CisJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCisJcmVhbHBhZ2UgPSAoaW50KShmcm9tID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOworCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOworCisJY29sID0gKGludCkoZnJvbSAmIChtdGQtPndyaXRlc2l6ZSAtIDEpKTsKKwljaGlwLT5vb2JfcG9pID0gY2hpcC0+YnVmZmVycy5vb2JyYnVmOworCisJYnVmID0gb3BzLT5kYXRidWY7CisJb29iID0gb3BzLT5vb2JidWY7CisKKwl3aGlsZSgxKSB7CisJCWJ5dGVzID0gbWluKG10ZC0+d3JpdGVzaXplIC0gY29sLCByZWFkbGVuKTsKKwkJYWxpZ25lZCA9IChieXRlcyA9PSBtdGQtPndyaXRlc2l6ZSk7CisKKwkJLyogSXMgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgYnVmZmVyID8gKi8KKwkJaWYgKHJlYWxwYWdlICE9IGNoaXAtPnBhZ2VidWYgfHwgb29iKSB7CisJCQlidWZwb2kgPSBhbGlnbmVkID8gYnVmIDogY2hpcC0+YnVmZmVycy5kYXRhYnVmOworCisJCQlpZiAobGlrZWx5KHNuZGNtZCkpIHsKKwkJCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIDB4MDAsIHBhZ2UpOworCQkJCXNuZGNtZCA9IDA7CisJCQl9CisKKwkJCS8qIE5vdyByZWFkIHRoZSBwYWdlIGludG8gdGhlIGJ1ZmZlciAqLworCQkJcmV0ID0gY2hpcC0+ZWNjLnJlYWRfcGFnZShtdGQsIGNoaXAsIGJ1ZnBvaSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlicmVhazsKKworCQkJLyogVHJhbnNmZXIgbm90IGFsaWduZWQgZGF0YSAqLworCQkJaWYgKCFhbGlnbmVkKSB7CisJCQkJY2hpcC0+cGFnZWJ1ZiA9IHJlYWxwYWdlOworCQkJCW1lbWNweShidWYsIGNoaXAtPmJ1ZmZlcnMuZGF0YWJ1ZiArIGNvbCwgYnl0ZXMpOworCQkJfQorCisJCQlidWYgKz0gYnl0ZXM7CisKKwkJCWlmICh1bmxpa2VseShvb2IpKSB7CisJCQkJLyogUmF3IG1vZGUgZG9lcyBkYXRhOm9vYjpkYXRhOm9vYiAqLworCQkJCWlmIChvcHMtPm1vZGUgIT0gTVREX09PQl9SQVcpCisJCQkJCW9vYiA9IG5hbmRfdHJhbnNmZXJfb29iKGNoaXAsIG9vYiwgb3BzKTsKKwkJCQllbHNlCisJCQkJCWJ1ZiA9IG5hbmRfdHJhbnNmZXJfb29iKGNoaXAsIGJ1Ziwgb3BzKTsKKwkJCX0KKworCQkJaWYgKCEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfTk9fUkVBRFJEWSkpIHsKKwkJCQkvKgorCQkJCSAqIEFwcGx5IGRlbGF5IG9yIHdhaXQgZm9yIHJlYWR5L2J1c3kgcGluLiBEbworCQkJCSAqIHRoaXMgYmVmb3JlIHRoZSBBVVRPSU5DUiBjaGVjaywgc28gbm8KKwkJCQkgKiBwcm9ibGVtcyBhcmlzZSBpZiBhIGNoaXAgd2hpY2ggZG9lcyBhdXRvCisJCQkJICogaW5jcmVtZW50IGlzIG1hcmtlZCBhcyBOT0FVVE9JTkNSIGJ5IHRoZQorCQkJCSAqIGJvYXJkIGRyaXZlci4KKwkJCQkgKi8KKwkJCQlpZiAoIWNoaXAtPmRldl9yZWFkeSkKKwkJCQkJdWRlbGF5KGNoaXAtPmNoaXBfZGVsYXkpOworCQkJCWVsc2UKKwkJCQkJbmFuZF93YWl0X3JlYWR5KG10ZCk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQkvKiBSZWFkIGFsd2F5cywgZWxzZSBhdXRvaW5jcmVtZW50IGZhaWxzICovCi0JCQl0aGlzLT5yZWFkX2J1ZihtdGQsIG9vYmRhdGEsIG10ZC0+b29ic2l6ZSAtIGh3ZWNjYnl0ZXMgKiBlY2NzdGVwcyk7Ci0KLQkJCWlmIChvb2JzZWwtPnVzZWVjYyAhPSBNVERfTkFOREVDQ19PRkYgJiYgIWh3ZWNjYnl0ZXMpIHsKLQkJCQlpbnQgZWNjY250ID0gb29ic2VsLT5lY2NieXRlczsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCBlY2NjbnQ7IGkrKykgewotCQkJCQlpbnQgaWR4ID0gb29ic2VsLT5lY2Nwb3NbaV07Ci0JCQkJCWlmIChvb2JkYXRhW2lkeF0gIT0gb29iX2J1Zltvb2JvZnMgKyBpZHhdICkgewotCQkJCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsCi0JCQkJCSAgICAgICAJIiVzOiBGYWlsZWQgRUNDIHdyaXRlICIKLQkJCQkJCSJ2ZXJpZnksIHBhZ2UgMHglMDh4LCAiICIlNmkgYnl0ZXMgd2VyZSBzdWNjZXNmdWxcbiIsIF9fRlVOQ1RJT05fXywgcGFnZSwgaSk7Ci0JCQkJCQlnb3RvIG91dDsKLQkJCQkJfQotCQkJCX0KLQkJCX0KKwkJCW1lbWNweShidWYsIGNoaXAtPmJ1ZmZlcnMuZGF0YWJ1ZiArIGNvbCwgYnl0ZXMpOworCQkJYnVmICs9IGJ5dGVzOwogCQl9Ci0JCW9vYm9mcyArPSBtdGQtPm9vYnNpemUgLSBod2VjY2J5dGVzICogZWNjc3RlcHM7Ci0JCXBhZ2UrKzsKLQkJbnVtcGFnZXMtLTsKIAotCQkvKiBBcHBseSBkZWxheSBvciB3YWl0IGZvciByZWFkeS9idXN5IHBpbgotCQkgKiBEbyB0aGlzIGJlZm9yZSB0aGUgQVVUT0lOQ1IgY2hlY2ssIHNvIG5vIHByb2JsZW1zCi0JCSAqIGFyaXNlIGlmIGEgY2hpcCB3aGljaCBkb2VzIGF1dG8gaW5jcmVtZW50Ci0JCSAqIGlzIG1hcmtlZCBhcyBOT0FVVE9JTkNSIGJ5IHRoZSBib2FyZCBkcml2ZXIuCi0JCSAqIERvIHRoaXMgYWxzbyBiZWZvcmUgcmV0dXJuaW5nLCBzbyB0aGUgY2hpcCBpcwotCQkgKiByZWFkeSBmb3IgdGhlIG5leHQgY29tbWFuZC4KLQkJKi8KLQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpCi0JCQl1ZGVsYXkgKHRoaXMtPmNoaXBfZGVsYXkpOwotCQllbHNlCi0JCQluYW5kX3dhaXRfcmVhZHkobXRkKTsKKwkJcmVhZGxlbiAtPSBieXRlczsKIAotCQkvKiBBbGwgZG9uZSwgcmV0dXJuIGhhcHB5ICovCi0JCWlmICghbnVtcGFnZXMpCi0JCQlyZXR1cm4gMDsKKwkJaWYgKCFyZWFkbGVuKQorCQkJYnJlYWs7CiAKKwkJLyogRm9yIHN1YnNlcXVlbnQgcmVhZHMgYWxpZ24gdG8gcGFnZSBib3VuZGFyeS4gKi8KKwkJY29sID0gMDsKKwkJLyogSW5jcmVtZW50IHBhZ2UgYWRkcmVzcyAqLworCQlyZWFscGFnZSsrOwogCi0JCS8qIENoZWNrLCBpZiB0aGUgY2hpcCBzdXBwb3J0cyBhdXRvIHBhZ2UgaW5jcmVtZW50ICovCi0JCWlmICghTkFORF9DQU5BVVRPSU5DUih0aGlzKSkKLQkJCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRDAsIDB4MDAsIHBhZ2UpOworCQlwYWdlID0gcmVhbHBhZ2UgJiBjaGlwLT5wYWdlbWFzazsKKwkJLyogQ2hlY2ssIGlmIHdlIGNyb3NzIGEgY2hpcCBib3VuZGFyeSAqLworCQlpZiAoIXBhZ2UpIHsKKwkJCWNoaXBucisrOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJCX0KKworCQkvKiBDaGVjaywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgYXV0byBwYWdlIGluY3JlbWVudAorCQkgKiBvciBpZiB3ZSBoYXZlIGhpdCBhIGJsb2NrIGJvdW5kYXJ5LgorCQkgKi8KKwkJaWYgKCFOQU5EX0NBTkFVVE9JTkNSKGNoaXApIHx8ICEocGFnZSAmIGJsa2NoZWNrKSkKKwkJCXNuZGNtZCA9IDE7CiAJfQotCS8qCi0JICogVGVybWluYXRlIHRoZSByZWFkIGNvbW1hbmQuIFdlIGNvbWUgaGVyZSBpbiBjYXNlIG9mIGFuIGVycm9yCi0JICogU28gd2UgbXVzdCBpc3N1ZSBhIHJlc2V0IGNvbW1hbmQuCi0JICovCi1vdXQ6Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRVNFVCwgLTEsIC0xKTsKLQlyZXR1cm4gcmVzOworCisJb3BzLT5yZXRsZW4gPSBvcHMtPmxlbiAtIChzaXplX3QpIHJlYWRsZW47CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG10ZC0+ZWNjX3N0YXRzLmZhaWxlZCAtIHN0YXRzLmZhaWxlZCkKKwkJcmV0dXJuIC1FQkFETVNHOworCisJcmV0dXJuICBtdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgLSBzdGF0cy5jb3JyZWN0ZWQgPyAtRVVDTEVBTiA6IDA7CiB9Ci0jZW5kaWYKIAogLyoqCiAgKiBuYW5kX3JlYWQgLSBbTVREIEludGVyZmFjZV0gTVREIGNvbXBhYmlsaXR5IGZ1bmN0aW9uIGZvciBuYW5kX2RvX3JlYWRfZWNjCkBAIC0xMDcyLDk3NCArMTA3MSw3NDEgQEAKICAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiByZWFkIGJ5dGVzCiAgKiBAYnVmOgl0aGUgZGF0YWJ1ZmZlciB0byBwdXQgZGF0YQogICoKLSAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIG5hbmRfZG9fcmVhZF9lY2Mgd2l0aCBvb2IgYnVmZmVyIGFuZCBvb2JzZWwgPSBOVUxMCi0gKiBhbmQgZmxhZ3MgPSAweGZmCisgKiBHZXQgaG9sZCBvZiB0aGUgY2hpcCBhbmQgY2FsbCBuYW5kX2RvX3JlYWQKICAqLwotc3RhdGljIGludCBuYW5kX3JlYWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYpCitzdGF0aWMgaW50IG5hbmRfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJCSAgICAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1ZikKIHsKLQlyZXR1cm4gbmFuZF9kb19yZWFkX2VjYyAobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmLCBOVUxMLCAmbXRkLT5vb2JpbmZvLCAweGZmKTsKLX0KLQotCi0vKioKLSAqIG5hbmRfcmVhZF9lY2MgLSBbTVREIEludGVyZmFjZV0gTVREIGNvbXBhYmlsaXR5IGZ1bmN0aW9uIGZvciBuYW5kX2RvX3JlYWRfZWNjCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byByZWFkCi0gKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcwotICogQGJ1ZjoJdGhlIGRhdGFidWZmZXIgdG8gcHV0IGRhdGEKLSAqIEBvb2JfYnVmOglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlcgotICogQG9vYnNlbDoJb29iIHNlbGVjdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBjYWxscyBuYW5kX2RvX3JlYWRfZWNjIHdpdGggZmxhZ3MgPSAweGZmCi0gKi8KLXN0YXRpYyBpbnQgbmFuZF9yZWFkX2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkJICBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZiwgdV9jaGFyICogb29iX2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQotewotCS8qIHVzZSB1c2Vyc3BhY2Ugc3VwcGxpZWQgb29iaW5mbywgaWYgemVybyAqLwotCWlmIChvb2JzZWwgPT0gTlVMTCkKLQkJb29ic2VsID0gJm10ZC0+b29iaW5mbzsKLQlyZXR1cm4gbmFuZF9kb19yZWFkX2VjYyhtdGQsIGZyb20sIGxlbiwgcmV0bGVuLCBidWYsIG9vYl9idWYsIG9vYnNlbCwgMHhmZik7Ci19Ci0KLQotLyoqCi0gKiBuYW5kX2RvX3JlYWRfZWNjIC0gW01URCBJbnRlcmZhY2VdIFJlYWQgZGF0YSB3aXRoIEVDQwotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAotICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKLSAqIEBidWY6CXRoZSBkYXRhYnVmZmVyIHRvIHB1dCBkYXRhCi0gKiBAb29iX2J1ZjoJZmlsZXN5c3RlbSBzdXBwbGllZCBvb2IgZGF0YSBidWZmZXIgKGNhbiBiZSBOVUxMKQotICogQG9vYnNlbDoJb29iIHNlbGVjdGlvbiBzdHJ1Y3R1cmUKLSAqIEBmbGFnczoJZmxhZyB0byBpbmRpY2F0ZSBpZiBuYW5kX2dldF9kZXZpY2UvbmFuZF9yZWxlYXNlX2RldmljZSBzaG91bGQgYmUgcHJlZm9ybWVkCi0gKgkJYW5kIGhvdyBtYW55IGNvcnJlY3RlZCBlcnJvciBiaXRzIGFyZSBhY2NlcHRhYmxlOgotICoJCSAgYml0cyAwLi43IC0gbnVtYmVyIG9mIHRvbGVyYWJsZSBlcnJvcnMKLSAqCQkgIGJpdCAgOCAgICAtIDAgPT0gZG8gbm90IGdldC9yZWxlYXNlIGNoaXAsIDEgPT0gZ2V0L3JlbGVhc2UgY2hpcAotICoKLSAqIE5BTkQgcmVhZCB3aXRoIEVDQwotICovCi1pbnQgbmFuZF9kb19yZWFkX2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkJICAgICBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZiwgdV9jaGFyICogb29iX2J1ZiwKLQkJCSAgICAgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsLCBpbnQgZmxhZ3MpCi17Ci0KLQlpbnQgaSwgaiwgY29sLCByZWFscGFnZSwgcGFnZSwgZW5kLCBlY2MsIGNoaXBuciwgc25kY21kID0gMTsKLQlpbnQgcmVhZCA9IDAsIG9vYiA9IDAsIGVjY19zdGF0dXMgPSAwLCBlY2NfZmFpbGVkID0gMDsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXVfY2hhciAqZGF0YV9wb2ksICpvb2JfZGF0YSA9IG9vYl9idWY7Ci0JdV9jaGFyIGVjY19jYWxjWzMyXTsKLQl1X2NoYXIgZWNjX2NvZGVbMzJdOwotICAgICAgICBpbnQgZWNjbW9kZSwgZWNjc3RlcHM7Ci0JaW50CSpvb2JfY29uZmlnLCBkYXRpZHg7Ci0JaW50CWJsb2NrY2hlY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKSAtIDE7Ci0JaW50CWVjY2J5dGVzOwotCWludAljb21wYXJlZWNjID0gMTsKLQlpbnQJb29icmVhZGxlbjsKLQotCi0JREVCVUcgKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX3JlYWRfZWNjOiBmcm9tID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgZnJvbSwgKGludCkgbGVuKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXQ7CiAKIAkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCi0JaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9lY2M6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7Ci0JCSpyZXRsZW4gPSAwOworCWlmICgoZnJvbSArIGxlbikgPiBtdGQtPnNpemUpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CiAKLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQlpZiAoZmxhZ3MgJiBOQU5EX0dFVF9ERVZJQ0UpCi0JCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9SRUFESU5HKTsKKwluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9SRUFESU5HKTsKIAotCS8qIEF1dG9wbGFjZSBvZiBvb2IgZGF0YSA/IFVzZSB0aGUgZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lICovCi0JaWYgKG9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSkKLQkJb29ic2VsID0gdGhpcy0+YXV0b29vYjsKKwljaGlwLT5vcHMubGVuID0gbGVuOworCWNoaXAtPm9wcy5kYXRidWYgPSBidWY7CisJY2hpcC0+b3BzLm9vYmJ1ZiA9IE5VTEw7CiAKLQllY2Ntb2RlID0gb29ic2VsLT51c2VlY2MgPyB0aGlzLT5lY2Ntb2RlIDogTkFORF9FQ0NfTk9ORTsKLQlvb2JfY29uZmlnID0gb29ic2VsLT5lY2Nwb3M7CisJcmV0ID0gbmFuZF9kb19yZWFkX29wcyhtdGQsIGZyb20sICZjaGlwLT5vcHMpOwogCi0JLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCWNoaXBuciA9IChpbnQpKGZyb20gPj4gdGhpcy0+Y2hpcF9zaGlmdCk7Ci0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAotCS8qIEZpcnN0IHdlIGNhbGN1bGF0ZSB0aGUgc3RhcnRpbmcgcGFnZSAqLwotCXJlYWxwYWdlID0gKGludCkgKGZyb20gPj4gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JcGFnZSA9IHJlYWxwYWdlICYgdGhpcy0+cGFnZW1hc2s7Ci0KLQkvKiBHZXQgcmF3IHN0YXJ0aW5nIGNvbHVtbiAqLwotCWNvbCA9IGZyb20gJiAobXRkLT5vb2JibG9jayAtIDEpOwotCi0JZW5kID0gbXRkLT5vb2JibG9jazsKLQllY2MgPSB0aGlzLT5lY2NzaXplOwotCWVjY2J5dGVzID0gdGhpcy0+ZWNjYnl0ZXM7Ci0KLQlpZiAoKGVjY21vZGUgPT0gTkFORF9FQ0NfTk9ORSkgfHwgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0hXRUNDX1NZTkRST01FKSkKLQkJY29tcGFyZWVjYyA9IDA7Ci0KLQlvb2JyZWFkbGVuID0gbXRkLT5vb2JzaXplOwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9IV0VDQ19TWU5EUk9NRSkKLQkJb29icmVhZGxlbiAtPSBvb2JzZWwtPmVjY2J5dGVzOwotCi0JLyogTG9vcCB1bnRpbCBhbGwgZGF0YSByZWFkICovCi0Jd2hpbGUgKHJlYWQgPCBsZW4pIHsKLQotCQlpbnQgYWxpZ25lZCA9ICghY29sICYmIChsZW4gLSByZWFkKSA+PSBlbmQpOwotCQkvKgotCQkgKiBJZiB0aGUgcmVhZCBpcyBub3QgcGFnZSBhbGlnbmVkLCB3ZSBoYXZlIHRvIHJlYWQgaW50byBkYXRhIGJ1ZmZlcgotCQkgKiBkdWUgdG8gZWNjLCBlbHNlIHdlIHJlYWQgaW50byByZXR1cm4gYnVmZmVyIGRpcmVjdAotCQkgKi8KLQkJaWYgKGFsaWduZWQpCi0JCQlkYXRhX3BvaSA9ICZidWZbcmVhZF07Ci0JCWVsc2UKLQkJCWRhdGFfcG9pID0gdGhpcy0+ZGF0YV9idWY7Ci0KLQkJLyogQ2hlY2ssIGlmIHdlIGhhdmUgdGhpcyBwYWdlIGluIHRoZSBidWZmZXIKLQkJICoKLQkJICogRklYTUU6IE1ha2UgaXQgd29yayB3aGVuIHdlIG11c3QgcHJvdmlkZSBvb2IgZGF0YSB0b28sCi0JCSAqIGNoZWNrIHRoZSB1c2FnZSBvZiBkYXRhX2J1ZiBvb2IgZmllbGQKLQkJICovCi0JCWlmIChyZWFscGFnZSA9PSB0aGlzLT5wYWdlYnVmICYmICFvb2JfYnVmKSB7Ci0JCQkvKiBhbGlnbmVkIHJlYWQgPyAqLwotCQkJaWYgKGFsaWduZWQpCi0JCQkJbWVtY3B5IChkYXRhX3BvaSwgdGhpcy0+ZGF0YV9idWYsIGVuZCk7Ci0JCQlnb3RvIHJlYWRkYXRhOwotCQl9Ci0KLQkJLyogQ2hlY2ssIGlmIHdlIG11c3Qgc2VuZCB0aGUgcmVhZCBjb21tYW5kICovCi0JCWlmIChzbmRjbWQpIHsKLQkJCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRDAsIDB4MDAsIHBhZ2UpOwotCQkJc25kY21kID0gMDsKLQkJfQotCi0JCS8qIGdldCBvb2IgYXJlYSwgaWYgd2UgaGF2ZSBubyBvb2IgYnVmZmVyIGZyb20gZnMtZHJpdmVyICovCi0JCWlmICghb29iX2J1ZiB8fCBvb2JzZWwtPnVzZWVjYyA9PSBNVERfTkFOREVDQ19BVVRPUExBQ0UgfHwKLQkJCW9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTF9VU1IpCi0JCQlvb2JfZGF0YSA9ICZ0aGlzLT5kYXRhX2J1ZltlbmRdOwotCi0JCWVjY3N0ZXBzID0gdGhpcy0+ZWNjc3RlcHM7Ci0KLQkJc3dpdGNoIChlY2Ntb2RlKSB7Ci0JCWNhc2UgTkFORF9FQ0NfTk9ORTogewkvKiBObyBFQ0MsIFJlYWQgaW4gYSBwYWdlICovCi0JCQlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0d2hpbmdlID0gMDsKLQkJCWlmICgobGFzdHdoaW5nZSAvIEhaKSAhPSAoamlmZmllcyAvIEhaKSkgewotCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJSZWFkaW5nIGRhdGEgZnJvbSBOQU5EIEZMQVNIIHdpdGhvdXQgRUNDIGlzIG5vdCByZWNvbW1lbmRlZFxuIik7Ci0JCQkJbGFzdHdoaW5nZSA9IGppZmZpZXM7Ci0JCQl9Ci0JCQl0aGlzLT5yZWFkX2J1ZihtdGQsIGRhdGFfcG9pLCBlbmQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljYXNlIE5BTkRfRUNDX1NPRlQ6CS8qIFNvZnR3YXJlIEVDQyAzLzI1NjogUmVhZCBpbiBhIHBhZ2UgKyBvb2IgZGF0YSAqLwotCQkJdGhpcy0+cmVhZF9idWYobXRkLCBkYXRhX3BvaSwgZW5kKTsKLQkJCWZvciAoaSA9IDAsIGRhdGlkeCA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpKz0zLCBkYXRpZHggKz0gZWNjKQotCQkJCXRoaXMtPmNhbGN1bGF0ZV9lY2MobXRkLCAmZGF0YV9wb2lbZGF0aWR4XSwgJmVjY19jYWxjW2ldKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlmb3IgKGkgPSAwLCBkYXRpZHggPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSs9ZWNjYnl0ZXMsIGRhdGlkeCArPSBlY2MpIHsKLQkJCQl0aGlzLT5lbmFibGVfaHdlY2MobXRkLCBOQU5EX0VDQ19SRUFEKTsKLQkJCQl0aGlzLT5yZWFkX2J1ZihtdGQsICZkYXRhX3BvaVtkYXRpZHhdLCBlY2MpOwotCi0JCQkJLyogSFcgZWNjIHdpdGggc3luZHJvbWUgY2FsY3VsYXRpb24gbXVzdCByZWFkIHRoZQotCQkJCSAqIHN5bmRyb21lIGZyb20gZmxhc2ggaW1taWRpYXRlbHkgYWZ0ZXIgdGhlIGRhdGEgKi8KLQkJCQlpZiAoIWNvbXBhcmVlY2MpIHsKLQkJCQkJLyogU29tZSBodyBlY2MgZ2VuZXJhdG9ycyBuZWVkIHRvIGtub3cgd2hlbiB0aGUKLQkJCQkJICogc3luZHJvbWUgaXMgcmVhZCBmcm9tIGZsYXNoICovCi0JCQkJCXRoaXMtPmVuYWJsZV9od2VjYyhtdGQsIE5BTkRfRUNDX1JFQURTWU4pOwotCQkJCQl0aGlzLT5yZWFkX2J1ZihtdGQsICZvb2JfZGF0YVtpXSwgZWNjYnl0ZXMpOwotCQkJCQkvKiBXZSBjYWxjIGVycm9yIGNvcnJlY3Rpb24gZGlyZWN0bHksIGl0IGNoZWNrcyB0aGUgaHcKLQkJCQkJICogZ2VuZXJhdG9yIGZvciBhbiBlcnJvciwgcmVhZHMgYmFjayB0aGUgc3luZHJvbWUgYW5kCi0JCQkJCSAqIGRvZXMgdGhlIGVycm9yIGNvcnJlY3Rpb24gb24gdGhlIGZseSAqLwotCQkJCQllY2Nfc3RhdHVzID0gdGhpcy0+Y29ycmVjdF9kYXRhKG10ZCwgJmRhdGFfcG9pW2RhdGlkeF0sICZvb2JfZGF0YVtpXSwgJmVjY19jb2RlW2ldKTsKLQkJCQkJaWYgKChlY2Nfc3RhdHVzID09IC0xKSB8fCAoZWNjX3N0YXR1cyA+IChmbGFncyAmJiAweGZmKSkpIHsKLQkJCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX2VjYzogIgotCQkJCQkJCSJGYWlsZWQgRUNDIHJlYWQsIHBhZ2UgMHglMDh4IG9uIGNoaXAgJWRcbiIsIHBhZ2UsIGNoaXBucik7Ci0JCQkJCQllY2NfZmFpbGVkKys7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQl0aGlzLT5jYWxjdWxhdGVfZWNjKG10ZCwgJmRhdGFfcG9pW2RhdGlkeF0sICZlY2NfY2FsY1tpXSk7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiByZWFkIG9vYmRhdGEgKi8KLQkJdGhpcy0+cmVhZF9idWYobXRkLCAmb29iX2RhdGFbbXRkLT5vb2JzaXplIC0gb29icmVhZGxlbl0sIG9vYnJlYWRsZW4pOwotCi0JCS8qIFNraXAgRUNDIGNoZWNrLCBpZiBub3QgcmVxdWVzdGVkIChFQ0NfTk9ORSBvciBIV19FQ0Mgd2l0aCBzeW5kcm9tZXMpICovCi0JCWlmICghY29tcGFyZWVjYykKLQkJCWdvdG8gcmVhZG9vYjsKLQotCQkvKiBQaWNrIHRoZSBFQ0MgYnl0ZXMgb3V0IG9mIHRoZSBvb2IgZGF0YSAqLwotCQlmb3IgKGogPSAwOyBqIDwgb29ic2VsLT5lY2NieXRlczsgaisrKQotCQkJZWNjX2NvZGVbal0gPSBvb2JfZGF0YVtvb2JfY29uZmlnW2pdXTsKLQotCQkvKiBjb3JyZWN0IGRhdGEsIGlmIG5lY2NlY2FyeSAqLwotCQlmb3IgKGkgPSAwLCBqID0gMCwgZGF0aWR4ID0gMDsgaSA8IHRoaXMtPmVjY3N0ZXBzOyBpKyssIGRhdGlkeCArPSBlY2MpIHsKLQkJCWVjY19zdGF0dXMgPSB0aGlzLT5jb3JyZWN0X2RhdGEobXRkLCAmZGF0YV9wb2lbZGF0aWR4XSwgJmVjY19jb2RlW2pdLCAmZWNjX2NhbGNbal0pOwotCi0JCQkvKiBHZXQgbmV4dCBjaHVuayBvZiBlY2MgYnl0ZXMgKi8KLQkJCWogKz0gZWNjYnl0ZXM7Ci0KLQkJCS8qIENoZWNrLCBpZiB3ZSBoYXZlIGEgZnMgc3VwcGxpZWQgb29iLWJ1ZmZlciwKLQkJCSAqIFRoaXMgaXMgdGhlIGxlZ2FjeSBtb2RlLiBVc2VkIGJ5IFlBRkZTMQotCQkJICogU2hvdWxkIGdvIGF3YXkgc29tZSBkYXkKLQkJCSAqLwotCQkJaWYgKG9vYl9idWYgJiYgb29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfUExBQ0UpIHsKLQkJCQlpbnQgKnAgPSAoaW50ICopKCZvb2JfZGF0YVttdGQtPm9vYnNpemVdKTsKLQkJCQlwW2ldID0gZWNjX3N0YXR1czsKLQkJCX0KLQotCQkJaWYgKChlY2Nfc3RhdHVzID09IC0xKSB8fCAoZWNjX3N0YXR1cyA+IChmbGFncyAmJiAweGZmKSkpIHsKLQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9lY2M6ICIgIkZhaWxlZCBFQ0MgcmVhZCwgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOwotCQkJCWVjY19mYWlsZWQrKzsKLQkJCX0KLQkJfQotCi0JcmVhZG9vYjoKLQkJLyogY2hlY2ssIGlmIHdlIGhhdmUgYSBmcyBzdXBwbGllZCBvb2ItYnVmZmVyICovCi0JCWlmIChvb2JfYnVmKSB7Ci0JCQkvKiB3aXRob3V0IGF1dG9wbGFjZS4gTGVnYWN5IG1vZGUgdXNlZCBieSBZQUZGUzEgKi8KLQkJCXN3aXRjaChvb2JzZWwtPnVzZWVjYykgewotCQkJY2FzZSBNVERfTkFOREVDQ19BVVRPUExBQ0U6Ci0JCQljYXNlIE1URF9OQU5ERUNDX0FVVE9QTF9VU1I6Ci0JCQkJLyogV2FsayB0aHJvdWdoIHRoZSBhdXRvcGxhY2UgY2h1bmtzICovCi0JCQkJZm9yIChpID0gMDsgb29ic2VsLT5vb2JmcmVlW2ldWzFdOyBpKyspIHsKLQkJCQkJaW50IGZyb20gPSBvb2JzZWwtPm9vYmZyZWVbaV1bMF07Ci0JCQkJCWludCBudW0gPSBvb2JzZWwtPm9vYmZyZWVbaV1bMV07Ci0JCQkJCW1lbWNweSgmb29iX2J1Zltvb2JdLCAmb29iX2RhdGFbZnJvbV0sIG51bSk7Ci0JCQkJCW9vYiArPSBudW07Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBNVERfTkFOREVDQ19QTEFDRToKLQkJCQkvKiBZQUZGUzEgbGVnYWN5IG1vZGUgKi8KLQkJCQlvb2JfZGF0YSArPSB0aGlzLT5lY2NzdGVwcyAqIHNpemVvZiAoaW50KTsKLQkJCWRlZmF1bHQ6Ci0JCQkJb29iX2RhdGEgKz0gbXRkLT5vb2JzaXplOwotCQkJfQotCQl9Ci0JcmVhZGRhdGE6Ci0JCS8qIFBhcnRpYWwgcGFnZSByZWFkLCB0cmFuc2ZlciBkYXRhIGludG8gZnMgYnVmZmVyICovCi0JCWlmICghYWxpZ25lZCkgewotCQkJZm9yIChqID0gY29sOyBqIDwgZW5kICYmIHJlYWQgPCBsZW47IGorKykKLQkJCQlidWZbcmVhZCsrXSA9IGRhdGFfcG9pW2pdOwotCQkJdGhpcy0+cGFnZWJ1ZiA9IHJlYWxwYWdlOwotCQl9IGVsc2UKLQkJCXJlYWQgKz0gbXRkLT5vb2JibG9jazsKLQotCQkvKiBBcHBseSBkZWxheSBvciB3YWl0IGZvciByZWFkeS9idXN5IHBpbgotCQkgKiBEbyB0aGlzIGJlZm9yZSB0aGUgQVVUT0lOQ1IgY2hlY2ssIHNvIG5vIHByb2JsZW1zCi0JCSAqIGFyaXNlIGlmIGEgY2hpcCB3aGljaCBkb2VzIGF1dG8gaW5jcmVtZW50Ci0JCSAqIGlzIG1hcmtlZCBhcyBOT0FVVE9JTkNSIGJ5IHRoZSBib2FyZCBkcml2ZXIuCi0JCSovCi0JCWlmICghdGhpcy0+ZGV2X3JlYWR5KQotCQkJdWRlbGF5ICh0aGlzLT5jaGlwX2RlbGF5KTsKLQkJZWxzZQotCQkJbmFuZF93YWl0X3JlYWR5KG10ZCk7Ci0KLQkJaWYgKHJlYWQgPT0gbGVuKQotCQkJYnJlYWs7Ci0KLQkJLyogRm9yIHN1YnNlcXVlbnQgcmVhZHMgYWxpZ24gdG8gcGFnZSBib3VuZGFyeS4gKi8KLQkJY29sID0gMDsKLQkJLyogSW5jcmVtZW50IHBhZ2UgYWRkcmVzcyAqLwotCQlyZWFscGFnZSsrOwotCi0JCXBhZ2UgPSByZWFscGFnZSAmIHRoaXMtPnBhZ2VtYXNrOwotCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCi0JCWlmICghcGFnZSkgewotCQkJY2hpcG5yKys7Ci0JCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKLQkJfQotCQkvKiBDaGVjaywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgYXV0byBwYWdlIGluY3JlbWVudAotCQkgKiBvciBpZiB3ZSBoYXZlIGhpdCBhIGJsb2NrIGJvdW5kYXJ5LgotCQkqLwotCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IodGhpcykgfHwgIShwYWdlICYgYmxvY2tjaGVjaykpCi0JCQlzbmRjbWQgPSAxOwotCX0KLQotCS8qIERlc2VsZWN0IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KLQlpZiAoZmxhZ3MgJiBOQU5EX0dFVF9ERVZJQ0UpCi0JCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKLQotCS8qCi0JICogUmV0dXJuIHN1Y2Nlc3MsIGlmIG5vIEVDQyBmYWlsdXJlcywgZWxzZSAtRUJBRE1TRwotCSAqIGZzIGRyaXZlciB3aWxsIHRha2UgY2FyZSBvZiB0aGF0LCBiZWNhdXNlCi0JICogcmV0bGVuID09IGRlc2lyZWQgbGVuIGFuZCByZXN1bHQgPT0gLUVCQURNU0cKLQkgKi8KLQkqcmV0bGVuID0gcmVhZDsKLQlyZXR1cm4gZWNjX2ZhaWxlZCA/IC1FQkFETVNHIDogMDsKKwkqcmV0bGVuID0gY2hpcC0+b3BzLnJldGxlbjsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIG5hbmRfcmVhZF9vb2IgLSBbTVREIEludGVyZmFjZV0gTkFORCByZWFkIG91dC1vZi1iYW5kCisgKiBuYW5kX3JlYWRfb29iX3N0ZCAtIFtSRVBMQUNBQkxFXSB0aGUgbW9zdCBjb21tb24gT09CIGRhdGEgcmVhZCBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAorICogQHNuZGNtZDoJZmxhZyB3aGV0aGVyIHRvIGlzc3VlIHJlYWQgY29tbWFuZCBvciBub3QKKyAqLworc3RhdGljIGludCBuYW5kX3JlYWRfb29iX3N0ZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCSAgICAgaW50IHBhZ2UsIGludCBzbmRjbWQpCit7CisJaWYgKHNuZGNtZCkgeworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgMCwgcGFnZSk7CisJCXNuZGNtZCA9IDA7CisJfQorCWNoaXAtPnJlYWRfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKKwlyZXR1cm4gc25kY21kOworfQorCisvKioKKyAqIG5hbmRfcmVhZF9vb2Jfc3luZHJvbWUgLSBbUkVQTEFDQUJMRV0gT09CIGRhdGEgcmVhZCBmdW5jdGlvbiBmb3IgSFcgRUNDCisgKgkJCSAgICB3aXRoIHN5bmRyb21lcworICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAorICogQHNuZGNtZDoJZmxhZyB3aGV0aGVyIHRvIGlzc3VlIHJlYWQgY29tbWFuZCBvciBub3QKKyAqLworc3RhdGljIGludCBuYW5kX3JlYWRfb29iX3N5bmRyb21lKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgaW50IHBhZ2UsIGludCBzbmRjbWQpCit7CisJdWludDhfdCAqYnVmID0gY2hpcC0+b29iX3BvaTsKKwlpbnQgbGVuZ3RoID0gbXRkLT5vb2JzaXplOworCWludCBjaHVuayA9IGNoaXAtPmVjYy5ieXRlcyArIGNoaXAtPmVjYy5wcmVwYWQgKyBjaGlwLT5lY2MucG9zdHBhZDsKKwlpbnQgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCXVpbnQ4X3QgKmJ1ZnBvaSA9IGJ1ZjsKKwlpbnQgaSwgdG9yZWFkLCBzbmRybmQgPSAwLCBwb3M7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIGNoaXAtPmVjYy5zaXplLCBwYWdlKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+ZWNjLnN0ZXBzOyBpKyspIHsKKwkJaWYgKHNuZHJuZCkgeworCQkJcG9zID0gZWNjc2l6ZSArIGkgKiAoZWNjc2l6ZSArIGNodW5rKTsKKwkJCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMikKKwkJCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUk5ET1VULCBwb3MsIC0xKTsKKwkJCWVsc2UKKwkJCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIHBvcywgcGFnZSk7CisJCX0gZWxzZQorCQkJc25kcm5kID0gMTsKKwkJdG9yZWFkID0gbWluX3QoaW50LCBsZW5ndGgsIGNodW5rKTsKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBidWZwb2ksIHRvcmVhZCk7CisJCWJ1ZnBvaSArPSB0b3JlYWQ7CisJCWxlbmd0aCAtPSB0b3JlYWQ7CisJfQorCWlmIChsZW5ndGggPiAwKQorCQljaGlwLT5yZWFkX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuZ3RoKTsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIG5hbmRfd3JpdGVfb29iX3N0ZCAtIFtSRVBMQUNBQkxFXSB0aGUgbW9zdCBjb21tb24gT09CIGRhdGEgd3JpdGUgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHdyaXRlCisgKi8KK3N0YXRpYyBpbnQgbmFuZF93cml0ZV9vb2Jfc3RkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJICAgICAgaW50IHBhZ2UpCit7CisJaW50IHN0YXR1cyA9IDA7CisJY29uc3QgdWludDhfdCAqYnVmID0gY2hpcC0+b29iX3BvaTsKKwlpbnQgbGVuZ3RoID0gbXRkLT5vb2JzaXplOworCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NFUUlOLCBtdGQtPndyaXRlc2l6ZSwgcGFnZSk7CisJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmLCBsZW5ndGgpOworCS8qIFNlbmQgY29tbWFuZCB0byBwcm9ncmFtIHRoZSBPT0IgZGF0YSAqLworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKKworCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIG5hbmRfd3JpdGVfb29iX3N5bmRyb21lIC0gW1JFUExBQ0FCTEVdIE9PQiBkYXRhIHdyaXRlIGZ1bmN0aW9uIGZvciBIVyBFQ0MKKyAqCQkJICAgICB3aXRoIHN5bmRyb21lIC0gb25seSBmb3IgbGFyZ2UgcGFnZSBmbGFzaCAhCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byB3cml0ZQorICovCitzdGF0aWMgaW50IG5hbmRfd3JpdGVfb29iX3N5bmRyb21lKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCSAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBwYWdlKQoreworCWludCBjaHVuayA9IGNoaXAtPmVjYy5ieXRlcyArIGNoaXAtPmVjYy5wcmVwYWQgKyBjaGlwLT5lY2MucG9zdHBhZDsKKwlpbnQgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplLCBsZW5ndGggPSBtdGQtPm9vYnNpemU7CisJaW50IGksIGxlbiwgcG9zLCBzdGF0dXMgPSAwLCBzbmRjbWQgPSAwLCBzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwljb25zdCB1aW50OF90ICpidWZwb2kgPSBjaGlwLT5vb2JfcG9pOworCisJLyoKKwkgKiBkYXRhLWVjYy1kYXRhLWVjYyAuLi4gZWNjLW9vYgorCSAqIG9yCisJICogZGF0YS1wYWQtZWNjLXBhZC1kYXRhLXBhZCAuLi4uIGVjYy1wYWQtb29iCisJICovCisJaWYgKCFjaGlwLT5lY2MucHJlcGFkICYmICFjaGlwLT5lY2MucG9zdHBhZCkgeworCQlwb3MgPSBzdGVwcyAqIChlY2NzaXplICsgY2h1bmspOworCQlzdGVwcyA9IDA7CisJfSBlbHNlCisJCXBvcyA9IGVjY3NpemUgKyBjaHVuazsKKworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TRVFJTiwgcG9zLCBwYWdlKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3RlcHM7IGkrKykgeworCQlpZiAoc25kY21kKSB7CisJCQlpZiAobXRkLT53cml0ZXNpemUgPD0gNTEyKSB7CisJCQkJdWludDMyX3QgZmlsbCA9IDB4RkZGRkZGRkY7CisKKwkJCQlsZW4gPSBlY2NzaXplOworCQkJCXdoaWxlIChsZW4gPiAwKSB7CisJCQkJCWludCBudW0gPSBtaW5fdChpbnQsIGxlbiwgNCk7CisJCQkJCWNoaXAtPndyaXRlX2J1ZihtdGQsICh1aW50OF90ICopJmZpbGwsCisJCQkJCQkJbnVtKTsKKwkJCQkJbGVuIC09IG51bTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXBvcyA9IGVjY3NpemUgKyBpICogKGVjY3NpemUgKyBjaHVuayk7CisJCQkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JORElOLCBwb3MsIC0xKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlzbmRjbWQgPSAxOworCQlsZW4gPSBtaW5fdChpbnQsIGxlbmd0aCwgY2h1bmspOworCQljaGlwLT53cml0ZV9idWYobXRkLCBidWZwb2ksIGxlbik7CisJCWJ1ZnBvaSArPSBsZW47CisJCWxlbmd0aCAtPSBsZW47CisJfQorCWlmIChsZW5ndGggPiAwKQorCQljaGlwLT53cml0ZV9idWYobXRkLCBidWZwb2ksIGxlbmd0aCk7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUEFHRVBST0csIC0xLCAtMSk7CisJc3RhdHVzID0gY2hpcC0+d2FpdGZ1bmMobXRkLCBjaGlwKTsKKworCXJldHVybiBzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMID8gLUVJTyA6IDA7Cit9CisKKy8qKgorICogbmFuZF9kb19yZWFkX29vYiAtIFtJbnRlcm5dIE5BTkQgcmVhZCBvdXQtb2YtYmFuZAogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAotICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKLSAqIEBidWY6CXRoZSBkYXRhYnVmZmVyIHRvIHB1dCBkYXRhCisgKiBAb3BzOglvb2Igb3BlcmF0aW9ucyBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUKICAqCiAgKiBOQU5EIHJlYWQgb3V0LW9mLWJhbmQgZGF0YSBmcm9tIHRoZSBzcGFyZSBhcmVhCiAgKi8KLXN0YXRpYyBpbnQgbmFuZF9yZWFkX29vYiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZikKK3N0YXRpYyBpbnQgbmFuZF9kb19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQkgICAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7Ci0JaW50IGksIGNvbCwgcGFnZSwgY2hpcG5yOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50CWJsb2NrY2hlY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKSAtIDE7CisJaW50IHBhZ2UsIHJlYWxwYWdlLCBjaGlwbnIsIHNuZGNtZCA9IDE7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlpbnQgYmxrY2hlY2sgPSAoMSA8PCAoY2hpcC0+cGh5c19lcmFzZV9zaGlmdCAtIGNoaXAtPnBhZ2Vfc2hpZnQpKSAtIDE7CisJaW50IHJlYWRsZW4gPSBvcHMtPmxlbjsKKwl1aW50OF90ICpidWYgPSBvcHMtPm9vYmJ1ZjsKIAotCURFQlVHIChNVERfREVCVUdfTEVWRUwzLCAibmFuZF9yZWFkX29vYjogZnJvbSA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIGZyb20sIChpbnQpIGxlbik7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfcmVhZF9vb2I6IGZyb20gPSAweCUwOEx4LCBsZW4gPSAlaVxuIiwKKwkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZyb20sIHJlYWRsZW4pOworCisJY2hpcG5yID0gKGludCkoZnJvbSA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAKIAkvKiBTaGlmdCB0byBnZXQgcGFnZSAqLwotCXBhZ2UgPSAoaW50KShmcm9tID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCWNoaXBuciA9IChpbnQpKGZyb20gPj4gdGhpcy0+Y2hpcF9zaGlmdCk7CisJcmVhbHBhZ2UgPSAoaW50KShmcm9tID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOworCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOwogCi0JLyogTWFzayB0byBnZXQgY29sdW1uICovCi0JY29sID0gZnJvbSAmIChtdGQtPm9vYnNpemUgLSAxKTsKKwljaGlwLT5vb2JfcG9pID0gY2hpcC0+YnVmZmVycy5vb2JyYnVmOwogCi0JLyogSW5pdGlhbGl6ZSByZXR1cm4gbGVuZ3RoIHZhbHVlICovCi0JKnJldGxlbiA9IDA7CisJd2hpbGUoMSkgeworCQlzbmRjbWQgPSBjaGlwLT5lY2MucmVhZF9vb2IobXRkLCBjaGlwLCBwYWdlLCBzbmRjbWQpOworCQlidWYgPSBuYW5kX3RyYW5zZmVyX29vYihjaGlwLCBidWYsIG9wcyk7CiAKLQkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCi0JaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9vb2I6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7Ci0JCSpyZXRsZW4gPSAwOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJCXJlYWRsZW4gLT0gb3BzLT5vb2JsZW47CisJCWlmICghcmVhZGxlbikKKwkJCWJyZWFrOwogCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQgLCBGTF9SRUFESU5HKTsKLQotCS8qIFNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7Ci0KLQkvKiBTZW5kIHRoZSByZWFkIGNvbW1hbmQgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURPT0IsIGNvbCwgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKLQkvKgotCSAqIFJlYWQgdGhlIGRhdGEsIGlmIHdlIHJlYWQgbW9yZSB0aGFuIG9uZSBwYWdlCi0JICogb29iIGRhdGEsIGxldCB0aGUgZGV2aWNlIHRyYW5zZmVyIHRoZSBkYXRhICEKLQkgKi8KLQlpID0gMDsKLQl3aGlsZSAoaSA8IGxlbikgewotCQlpbnQgdGhpc2xlbiA9IG10ZC0+b29ic2l6ZSAtIGNvbDsKLQkJdGhpc2xlbiA9IG1pbl90KGludCwgdGhpc2xlbiwgbGVuKTsKLQkJdGhpcy0+cmVhZF9idWYobXRkLCAmYnVmW2ldLCB0aGlzbGVuKTsKLQkJaSArPSB0aGlzbGVuOwotCi0JCS8qIFJlYWQgbW9yZSA/ICovCi0JCWlmIChpIDwgbGVuKSB7Ci0JCQlwYWdlKys7Ci0JCQljb2wgPSAwOwotCi0JCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCi0JCQlpZiAoIShwYWdlICYgdGhpcy0+cGFnZW1hc2spKSB7Ci0JCQkJY2hpcG5yKys7Ci0JCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7Ci0JCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwotCQkJfQotCi0JCQkvKiBBcHBseSBkZWxheSBvciB3YWl0IGZvciByZWFkeS9idXN5IHBpbgotCQkJICogRG8gdGhpcyBiZWZvcmUgdGhlIEFVVE9JTkNSIGNoZWNrLCBzbyBubyBwcm9ibGVtcwotCQkJICogYXJpc2UgaWYgYSBjaGlwIHdoaWNoIGRvZXMgYXV0byBpbmNyZW1lbnQKLQkJCSAqIGlzIG1hcmtlZCBhcyBOT0FVVE9JTkNSIGJ5IHRoZSBib2FyZCBkcml2ZXIuCisJCWlmICghKGNoaXAtPm9wdGlvbnMgJiBOQU5EX05PX1JFQURSRFkpKSB7CisJCQkvKgorCQkJICogQXBwbHkgZGVsYXkgb3Igd2FpdCBmb3IgcmVhZHkvYnVzeSBwaW4uIERvIHRoaXMKKwkJCSAqIGJlZm9yZSB0aGUgQVVUT0lOQ1IgY2hlY2ssIHNvIG5vIHByb2JsZW1zIGFyaXNlIGlmIGEKKwkJCSAqIGNoaXAgd2hpY2ggZG9lcyBhdXRvIGluY3JlbWVudCBpcyBtYXJrZWQgYXMKKwkJCSAqIE5PQVVUT0lOQ1IgYnkgdGhlIGJvYXJkIGRyaXZlci4KIAkJCSAqLwotCQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpCi0JCQkJdWRlbGF5ICh0aGlzLT5jaGlwX2RlbGF5KTsKKwkJCWlmICghY2hpcC0+ZGV2X3JlYWR5KQorCQkJCXVkZWxheShjaGlwLT5jaGlwX2RlbGF5KTsKIAkJCWVsc2UKIAkJCQluYW5kX3dhaXRfcmVhZHkobXRkKTsKLQotCQkJLyogQ2hlY2ssIGlmIHRoZSBjaGlwIHN1cHBvcnRzIGF1dG8gcGFnZSBpbmNyZW1lbnQKLQkJCSAqIG9yIGlmIHdlIGhhdmUgaGl0IGEgYmxvY2sgYm91bmRhcnkuCi0JCQkqLwotCQkJaWYgKCFOQU5EX0NBTkFVVE9JTkNSKHRoaXMpIHx8ICEocGFnZSAmIGJsb2NrY2hlY2spKSB7Ci0JCQkJLyogRm9yIHN1YnNlcXVlbnQgcGFnZSByZWFkcyBzZXQgb2Zmc2V0IHRvIDAgKi8KLQkJCSAgICAgICAgdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFET09CLCAweDAsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7Ci0JCQl9CiAJCX0KLQl9CiAKLQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOworCQkvKiBJbmNyZW1lbnQgcGFnZSBhZGRyZXNzICovCisJCXJlYWxwYWdlKys7CiAKLQkvKiBSZXR1cm4gaGFwcHkgKi8KLQkqcmV0bGVuID0gbGVuOwotCXJldHVybiAwOwotfQorCQlwYWdlID0gcmVhbHBhZ2UgJiBjaGlwLT5wYWdlbWFzazsKKwkJLyogQ2hlY2ssIGlmIHdlIGNyb3NzIGEgY2hpcCBib3VuZGFyeSAqLworCQlpZiAoIXBhZ2UpIHsKKwkJCWNoaXBucisrOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJCX0KIAotLyoqCi0gKiBuYW5kX3JlYWRfcmF3IC0gW0dFTkVSSUNdIFJlYWQgcmF3IGRhdGEgaW5jbHVkaW5nIG9vYiBpbnRvIGJ1ZmZlcgotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBidWY6CXRlbXBvcmFyeSBidWZmZXIKLSAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAotICogQG9vYmxlbjoJbnVtYmVyIG9mIG9vYiBkYXRhIGJ5dGVzIHRvIHJlYWQKLSAqCi0gKiBSZWFkIHJhdyBkYXRhIGluY2x1ZGluZyBvb2IgaW50byBidWZmZXIKLSAqLwotaW50IG5hbmRfcmVhZF9yYXcgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3Qgb29ibGVuKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IHBhZ2UgPSAoaW50KSAoZnJvbSA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQlpbnQgY2hpcCA9IChpbnQpIChmcm9tID4+IHRoaXMtPmNoaXBfc2hpZnQpOwotCWludCBzbmRjbWQgPSAxOwotCWludCBjbnQgPSAwOwotCWludCBwYWdlc2l6ZSA9IG10ZC0+b29iYmxvY2sgKyBtdGQtPm9vYnNpemU7Ci0JaW50CWJsb2NrY2hlY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKSAtIDE7Ci0KLQkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCi0JaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9yYXc6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwotCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkICwgRkxfUkVBRElORyk7Ci0KLQl0aGlzLT5zZWxlY3RfY2hpcCAobXRkLCBjaGlwKTsKLQotCS8qIEFkZCByZXF1ZXN0ZWQgb29iIGxlbmd0aCAqLwotCWxlbiArPSBvb2JsZW47Ci0KLQl3aGlsZSAobGVuKSB7Ci0JCWlmIChzbmRjbWQpCi0JCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCQlzbmRjbWQgPSAwOwotCi0JCXRoaXMtPnJlYWRfYnVmIChtdGQsICZidWZbY250XSwgcGFnZXNpemUpOwotCi0JCWxlbiAtPSBwYWdlc2l6ZTsKLQkJY250ICs9IHBhZ2VzaXplOwotCQlwYWdlKys7Ci0KLQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpCi0JCQl1ZGVsYXkgKHRoaXMtPmNoaXBfZGVsYXkpOwotCQllbHNlCi0JCQluYW5kX3dhaXRfcmVhZHkobXRkKTsKLQotCQkvKiBDaGVjaywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgYXV0byBwYWdlIGluY3JlbWVudCAqLwotCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IodGhpcykgfHwgIShwYWdlICYgYmxvY2tjaGVjaykpCisJCS8qIENoZWNrLCBpZiB0aGUgY2hpcCBzdXBwb3J0cyBhdXRvIHBhZ2UgaW5jcmVtZW50CisJCSAqIG9yIGlmIHdlIGhhdmUgaGl0IGEgYmxvY2sgYm91bmRhcnkuCisJCSAqLworCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IoY2hpcCkgfHwgIShwYWdlICYgYmxrY2hlY2spKQogCQkJc25kY21kID0gMTsKIAl9CiAKLQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOworCW9wcy0+cmV0bGVuID0gb3BzLT5sZW47CiAJcmV0dXJuIDA7CiB9CiAKLQogLyoqCi0gKiBuYW5kX3ByZXBhcmVfb29iYnVmIC0gW0dFTkVSSUNdIFByZXBhcmUgdGhlIG91dCBvZiBiYW5kIGJ1ZmZlcgorICogbmFuZF9yZWFkX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHJlYWQgZGF0YSBhbmQvb3Igb3V0LW9mLWJhbmQKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAZnNidWY6CWJ1ZmZlciBnaXZlbiBieSBmcyBkcml2ZXIKLSAqIEBvb2JzZWw6CW91dCBvZiBiYW5kIHNlbGVjdGlvbiBzdHJ1Y3RyZQotICogQGF1dG9wbGFjZToJMSA9IHBsYWNlIGdpdmVuIGJ1ZmZlciBpbnRvIHRoZSBvb2IgYnl0ZXMKLSAqIEBudW1wYWdlczoJbnVtYmVyIG9mIHBhZ2VzIHRvIHByZXBhcmUKKyAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCisgKiBAb3BzOglvb2Igb3BlcmF0aW9uIGRlc2NyaXB0aW9uIHN0cnVjdHVyZQogICoKLSAqIFJldHVybjoKLSAqIDEuIEZpbGVzeXN0ZW0gYnVmZmVyIGF2YWlsYWJsZSBhbmQgYXV0b3BsYWNlbWVudCBpcyBvZmYsCi0gKiAgICByZXR1cm4gZmlsZXN5c3RlbSBidWZmZXIKLSAqIDIuIE5vIGZpbGVzeXN0ZW0gYnVmZmVyIG9yIGF1dG9wbGFjZSBpcyBvZmYsIHJldHVybiBpbnRlcm5hbAotICogICAgYnVmZmVyCi0gKiAzLiBGaWxlc3lzdGVtIGJ1ZmZlciBpcyBnaXZlbiBhbmQgYXV0b3BsYWNlIHNlbGVjdGVkCi0gKiAgICBwdXQgZGF0YSBmcm9tIGZzIGJ1ZmZlciBpbnRvIGludGVybmFsIGJ1ZmZlciBhbmQKLSAqICAgIHJldHJ1biBpbnRlcm5hbCBidWZmZXIKLSAqCi0gKiBOb3RlOiBUaGUgaW50ZXJuYWwgYnVmZmVyIGlzIGZpbGxlZCB3aXRoIDB4ZmYuIFRoaXMgbXVzdAotICogYmUgZG9uZSBvbmx5IG9uY2UsIHdoZW4gbm8gYXV0b3BsYWNlbWVudCBoYXBwZW5zCi0gKiBBdXRvcGxhY2VtZW50IHNldHMgdGhlIGJ1ZmZlciBkaXJ0eSBmbGFnLCB3aGljaAotICogZm9yY2VzIHRoZSAweGZmIGZpbGwgYmVmb3JlIHVzaW5nIHRoZSBidWZmZXIgYWdhaW4uCi0gKgotKi8KLXN0YXRpYyB1X2NoYXIgKiBuYW5kX3ByZXBhcmVfb29iYnVmIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpmc2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsLAotCQlpbnQgYXV0b3BsYWNlLCBpbnQgbnVtcGFnZXMpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgaSwgbGVuLCBvZnM7Ci0KLQkvKiBaZXJvIGNvcHkgZnMgc3VwcGxpZWQgYnVmZmVyICovCi0JaWYgKGZzYnVmICYmICFhdXRvcGxhY2UpCi0JCXJldHVybiBmc2J1ZjsKLQotCS8qIENoZWNrLCBpZiB0aGUgYnVmZmVyIG11c3QgYmUgZmlsbGVkIHdpdGggZmYgYWdhaW4gKi8KLQlpZiAodGhpcy0+b29iZGlydHkpIHsKLQkJbWVtc2V0ICh0aGlzLT5vb2JfYnVmLCAweGZmLAotCQkJbXRkLT5vb2JzaXplIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpOwotCQl0aGlzLT5vb2JkaXJ0eSA9IDA7Ci0JfQotCi0JLyogSWYgd2UgaGF2ZSBubyBhdXRvcGxhY2VtZW50IG9yIG5vIGZzIGJ1ZmZlciB1c2UgdGhlIGludGVybmFsIG9uZSAqLwotCWlmICghYXV0b3BsYWNlIHx8ICFmc2J1ZikKLQkJcmV0dXJuIHRoaXMtPm9vYl9idWY7Ci0KLQkvKiBXYWxrIHRocm91Z2ggdGhlIHBhZ2VzIGFuZCBwbGFjZSB0aGUgZGF0YSAqLwotCXRoaXMtPm9vYmRpcnR5ID0gMTsKLQlvZnMgPSAwOwotCXdoaWxlIChudW1wYWdlcy0tKSB7Ci0JCWZvciAoaSA9IDAsIGxlbiA9IDA7IGxlbiA8IG10ZC0+b29iYXZhaWw7IGkrKykgewotCQkJaW50IHRvID0gb2ZzICsgb29ic2VsLT5vb2JmcmVlW2ldWzBdOwotCQkJaW50IG51bSA9IG9vYnNlbC0+b29iZnJlZVtpXVsxXTsKLQkJCW1lbWNweSAoJnRoaXMtPm9vYl9idWZbdG9dLCBmc2J1ZiwgbnVtKTsKLQkJCWxlbiArPSBudW07Ci0JCQlmc2J1ZiArPSBudW07Ci0JCX0KLQkJb2ZzICs9IG10ZC0+b29iYXZhaWw7Ci0JfQotCXJldHVybiB0aGlzLT5vb2JfYnVmOwotfQotCi0jZGVmaW5lIE5PVEFMSUdORUQoeCkgKHggJiAobXRkLT5vb2JibG9jay0xKSkgIT0gMAotCi0vKioKLSAqIG5hbmRfd3JpdGUgLSBbTVREIEludGVyZmFjZV0gY29tcGFiaWxpdHkgZnVuY3Rpb24gZm9yIG5hbmRfd3JpdGVfZWNjCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIG5hbmRfd3JpdGVfZWNjIHdpdGggb29iIGJ1ZmZlciBhbmQgb29ic2VsID0gTlVMTAotICoKLSovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGUgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmKQotewotCXJldHVybiAobmFuZF93cml0ZV9lY2MgKG10ZCwgdG8sIGxlbiwgcmV0bGVuLCBidWYsIE5VTEwsIE5VTEwpKTsKLX0KLQotLyoqCi0gKiBuYW5kX3dyaXRlX2VjYyAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIHdpdGggRUNDCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQotICogQGVjY2J1ZjoJZmlsZXN5c3RlbSBzdXBwbGllZCBvb2IgZGF0YSBidWZmZXIKLSAqIEBvb2JzZWw6CW9vYiBzZWxlY3Rpb24gc3RydWN0dXJlCi0gKgotICogTkFORCB3cml0ZSB3aXRoIEVDQworICogTkFORCByZWFkIGRhdGEgYW5kL29yIG91dC1vZi1iYW5kIGRhdGEKICAqLwotc3RhdGljIGludCBuYW5kX3dyaXRlX2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQkJCSAgIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBlY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKK3N0YXRpYyBpbnQgbmFuZF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7Ci0JaW50IHN0YXJ0cGFnZSwgcGFnZSwgcmV0ID0gLUVJTywgb29iID0gMCwgd3JpdHRlbiA9IDAsIGNoaXBucjsKLQlpbnQgYXV0b3BsYWNlID0gMCwgbnVtcGFnZXMsIHRvdGFscGFnZXM7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl1X2NoYXIgKm9vYmJ1ZiwgKmJ1ZnN0YXJ0OwotCWludAlwcGJsb2NrID0gKDEgPDwgKHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KSk7CisJaW50ICgqcmVhZF9wYWdlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCSB1aW50OF90ICpidWYpID0gTlVMTDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXQgPSAtRU5PVFNVUFA7CiAKLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfd3JpdGVfZWNjOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOworCW9wcy0+cmV0bGVuID0gMDsKIAotCS8qIEluaXRpYWxpemUgcmV0bGVuLCBpbiBjYXNlIG9mIGVhcmx5IGV4aXQgKi8KLQkqcmV0bGVuID0gMDsKLQotCS8qIERvIG5vdCBhbGxvdyB3cml0ZSBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KLQlpZiAoKHRvICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfd3JpdGVfZWNjOiBBdHRlbXB0IHRvIHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2VcbiIpOworCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KKwlpZiAoKGZyb20gKyBvcHMtPmxlbikgPiBtdGQtPnNpemUpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9vb2I6ICIKKwkJICAgICAgIkF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIHJlamVjdCB3cml0ZXMsIHdoaWNoIGFyZSBub3QgcGFnZSBhbGlnbmVkICovCi0JaWYgKE5PVEFMSUdORUQgKHRvKSB8fCBOT1RBTElHTkVEKGxlbikpIHsKLQkJcHJpbnRrIChLRVJOX05PVElDRSAibmFuZF93cml0ZV9lY2M6IEF0dGVtcHQgdG8gd3JpdGUgbm90IHBhZ2UgYWxpZ25lZCBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1JFQURJTkcpOwogCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQsIEZMX1dSSVRJTkcpOworCXN3aXRjaChvcHMtPm1vZGUpIHsKKwljYXNlIE1URF9PT0JfUExBQ0U6CisJY2FzZSBNVERfT09CX0FVVE86CisJCWJyZWFrOwogCi0JLyogQ2FsY3VsYXRlIGNoaXBuciAqLwotCWNoaXBuciA9IChpbnQpKHRvID4+IHRoaXMtPmNoaXBfc2hpZnQpOwotCS8qIFNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJY2FzZSBNVERfT09CX1JBVzoKKwkJLyogUmVwbGFjZSB0aGUgcmVhZF9wYWdlIGFsZ29yaXRobSB0ZW1wb3JhcnkgKi8KKwkJcmVhZF9wYWdlID0gY2hpcC0+ZWNjLnJlYWRfcGFnZTsKKwkJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IG5hbmRfcmVhZF9wYWdlX3JhdzsKKwkJYnJlYWs7CiAKLQkvKiBDaGVjaywgaWYgaXQgaXMgd3JpdGUgcHJvdGVjdGVkICovCi0JaWYgKG5hbmRfY2hlY2tfd3AobXRkKSkKKwlkZWZhdWx0OgogCQlnb3RvIG91dDsKLQotCS8qIGlmIG9vYnNlbCBpcyBOVUxMLCB1c2UgY2hpcCBkZWZhdWx0cyAqLwotCWlmIChvb2JzZWwgPT0gTlVMTCkKLQkJb29ic2VsID0gJm10ZC0+b29iaW5mbzsKLQotCS8qIEF1dG9wbGFjZSBvZiBvb2IgZGF0YSA/IFVzZSB0aGUgZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lICovCi0JaWYgKG9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSkgewotCQlvb2JzZWwgPSB0aGlzLT5hdXRvb29iOwotCQlhdXRvcGxhY2UgPSAxOwogCX0KLQlpZiAob29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMX1VTUikKLQkJYXV0b3BsYWNlID0gMTsKIAotCS8qIFNldHVwIHZhcmlhYmxlcyBhbmQgb29iIGJ1ZmZlciAqLwotCXRvdGFscGFnZXMgPSBsZW4gPj4gdGhpcy0+cGFnZV9zaGlmdDsKLQlwYWdlID0gKGludCkgKHRvID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIGlmIHdlIHdyaXRlIHRvIHRoZSBjYWNoZWQgcGFnZSAqLwotCWlmIChwYWdlIDw9IHRoaXMtPnBhZ2VidWYgJiYgdGhpcy0+cGFnZWJ1ZiA8IChwYWdlICsgdG90YWxwYWdlcykpCi0JCXRoaXMtPnBhZ2VidWYgPSAtMTsKLQotCS8qIFNldCBpdCByZWxhdGl2ZSB0byBjaGlwICovCi0JcGFnZSAmPSB0aGlzLT5wYWdlbWFzazsKLQlzdGFydHBhZ2UgPSBwYWdlOwotCS8qIENhbGMgbnVtYmVyIG9mIHBhZ2VzIHdlIGNhbiB3cml0ZSBpbiBvbmUgZ28gKi8KLQludW1wYWdlcyA9IG1pbiAocHBibG9jayAtIChzdGFydHBhZ2UgICYgKHBwYmxvY2sgLSAxKSksIHRvdGFscGFnZXMpOwotCW9vYmJ1ZiA9IG5hbmRfcHJlcGFyZV9vb2JidWYgKG10ZCwgZWNjYnVmLCBvb2JzZWwsIGF1dG9wbGFjZSwgbnVtcGFnZXMpOwotCWJ1ZnN0YXJ0ID0gKHVfY2hhciAqKWJ1ZjsKLQotCS8qIExvb3AgdW50aWwgYWxsIGRhdGEgaXMgd3JpdHRlbiAqLwotCXdoaWxlICh3cml0dGVuIDwgbGVuKSB7Ci0KLQkJdGhpcy0+ZGF0YV9wb2kgPSAodV9jaGFyKikgJmJ1Zlt3cml0dGVuXTsKLQkJLyogV3JpdGUgb25lIHBhZ2UuIElmIHRoaXMgaXMgdGhlIGxhc3QgcGFnZSB0byB3cml0ZQotCQkgKiBvciB0aGUgbGFzdCBwYWdlIGluIHRoaXMgYmxvY2ssIHRoZW4gdXNlIHRoZQotCQkgKiByZWFsIHBhZ2Vwcm9ncmFtIGNvbW1hbmQsIGVsc2Ugc2VsZWN0IGNhY2hlZCBwcm9ncmFtbWluZwotCQkgKiBpZiBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAuCi0JCSAqLwotCQlyZXQgPSBuYW5kX3dyaXRlX3BhZ2UgKG10ZCwgdGhpcywgcGFnZSwgJm9vYmJ1Zltvb2JdLCBvb2JzZWwsICgtLW51bXBhZ2VzID4gMCkpOwotCQlpZiAocmV0KSB7Ci0JCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfd3JpdGVfZWNjOiB3cml0ZV9wYWdlIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCS8qIE5leHQgb29iIHBhZ2UgKi8KLQkJb29iICs9IG10ZC0+b29ic2l6ZTsKLQkJLyogVXBkYXRlIHdyaXR0ZW4gYnl0ZXMgY291bnQgKi8KLQkJd3JpdHRlbiArPSBtdGQtPm9vYmJsb2NrOwotCQlpZiAod3JpdHRlbiA9PSBsZW4pCi0JCQlnb3RvIGNtcDsKLQotCQkvKiBJbmNyZW1lbnQgcGFnZSBhZGRyZXNzICovCi0JCXBhZ2UrKzsKLQotCQkvKiBIYXZlIHdlIGhpdCBhIGJsb2NrIGJvdW5kYXJ5ID8gVGhlbiB3ZSBoYXZlIHRvIHZlcmlmeSBhbmQKLQkJICogaWYgdmVyaWZ5IGlzIG9rLCB3ZSBoYXZlIHRvIHNldHVwIHRoZSBvb2IgYnVmZmVyIGZvcgotCQkgKiB0aGUgbmV4dCBwYWdlcy4KLQkJKi8KLQkJaWYgKCEocGFnZSAmIChwcGJsb2NrIC0gMSkpKXsKLQkJCWludCBvZnM7Ci0JCQl0aGlzLT5kYXRhX3BvaSA9IGJ1ZnN0YXJ0OwotCQkJcmV0ID0gbmFuZF92ZXJpZnlfcGFnZXMgKG10ZCwgdGhpcywgc3RhcnRwYWdlLAotCQkJCXBhZ2UgLSBzdGFydHBhZ2UsCi0JCQkJb29iYnVmLCBvb2JzZWwsIGNoaXBuciwgKGVjY2J1ZiAhPSBOVUxMKSk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX2VjYzogdmVyaWZ5X3BhZ2VzIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCSpyZXRsZW4gPSB3cml0dGVuOwotCi0JCQlvZnMgPSBhdXRvcGxhY2UgPyBtdGQtPm9vYmF2YWlsIDogbXRkLT5vb2JzaXplOwotCQkJaWYgKGVjY2J1ZikKLQkJCQllY2NidWYgKz0gKHBhZ2UgLSBzdGFydHBhZ2UpICogb2ZzOwotCQkJdG90YWxwYWdlcyAtPSBwYWdlIC0gc3RhcnRwYWdlOwotCQkJbnVtcGFnZXMgPSBtaW4gKHRvdGFscGFnZXMsIHBwYmxvY2spOwotCQkJcGFnZSAmPSB0aGlzLT5wYWdlbWFzazsKLQkJCXN0YXJ0cGFnZSA9IHBhZ2U7Ci0JCQlvb2JidWYgPSBuYW5kX3ByZXBhcmVfb29iYnVmIChtdGQsIGVjY2J1Ziwgb29ic2VsLAotCQkJCQlhdXRvcGxhY2UsIG51bXBhZ2VzKTsKLQkJCW9vYiA9IDA7Ci0JCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCi0JCQlpZiAoIXBhZ2UpIHsKLQkJCQljaGlwbnIrKzsKLQkJCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogVmVyaWZ5IHRoZSByZW1haW5pbmcgcGFnZXMgKi8KLWNtcDoKLQl0aGlzLT5kYXRhX3BvaSA9IGJ1ZnN0YXJ0OwotIAlyZXQgPSBuYW5kX3ZlcmlmeV9wYWdlcyAobXRkLCB0aGlzLCBzdGFydHBhZ2UsIHRvdGFscGFnZXMsCi0JCW9vYmJ1Ziwgb29ic2VsLCBjaGlwbnIsIChlY2NidWYgIT0gTlVMTCkpOwotCWlmICghcmV0KQotCQkqcmV0bGVuID0gd3JpdHRlbjsKKwlpZiAoIW9wcy0+ZGF0YnVmKQorCQlyZXQgPSBuYW5kX2RvX3JlYWRfb29iKG10ZCwgZnJvbSwgb3BzKTsKIAllbHNlCi0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9lY2M6IHZlcmlmeV9wYWdlcyBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldCA9IG5hbmRfZG9fcmVhZF9vcHMobXRkLCBmcm9tLCBvcHMpOwogCi1vdXQ6Ci0JLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLworCWlmICh1bmxpa2VseShvcHMtPm1vZGUgPT0gTVREX09PQl9SQVcpKQorCQljaGlwLT5lY2MucmVhZF9wYWdlID0gcmVhZF9wYWdlOworIG91dDoKIAluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiAKIC8qKgotICogbmFuZF93cml0ZV9vb2IgLSBbTVREIEludGVyZmFjZV0gTkFORCB3cml0ZSBvdXQtb2YtYmFuZAotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB0bzoJCW9mZnNldCB0byB3cml0ZSB0bwotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCi0gKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcwotICogQGJ1ZjoJdGhlIGRhdGEgdG8gd3JpdGUKLSAqCi0gKiBOQU5EIHdyaXRlIG91dC1vZi1iYW5kCisgKiBuYW5kX3dyaXRlX3BhZ2VfcmF3IC0gW0ludGVybl0gcmF3IHBhZ2Ugd3JpdGUgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJZGF0YSBidWZmZXIKICAqLwotc3RhdGljIGludCBuYW5kX3dyaXRlX29vYiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYpCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX3BhZ2VfcmF3KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCWNvbnN0IHVpbnQ4X3QgKmJ1ZikKIHsKLQlpbnQgY29sdW1uLCBwYWdlLCBzdGF0dXMsIHJldCA9IC1FSU8sIGNoaXBucjsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOworCWNoaXAtPndyaXRlX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7Cit9CiAKLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfd3JpdGVfb29iOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOworLyoqCisgKiBuYW5kX3dyaXRlX3BhZ2Vfc3dlY2MgLSB7UkVQTEFDQUJMRV0gc29mdHdhcmUgZWNjIGJhc2VkIHBhZ2Ugd3JpdGUgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJZGF0YSBidWZmZXIKKyAqLworc3RhdGljIHZvaWQgbmFuZF93cml0ZV9wYWdlX3N3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmJ1ZmZlcnMuZWNjY2FsYzsKKwljb25zdCB1aW50OF90ICpwID0gYnVmOworCWludCAqZWNjcG9zID0gY2hpcC0+ZWNjLmxheW91dC0+ZWNjcG9zOwogCi0JLyogU2hpZnQgdG8gZ2V0IHBhZ2UgKi8KLQlwYWdlID0gKGludCkgKHRvID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCWNoaXBuciA9IChpbnQpICh0byA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKKwkvKiBTb2Z0d2FyZSBlY2MgY2FsY3VsYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKQorCQljaGlwLT5lY2MuY2FsY3VsYXRlKG10ZCwgcCwgJmVjY19jYWxjW2ldKTsKIAotCS8qIE1hc2sgdG8gZ2V0IGNvbHVtbiAqLwotCWNvbHVtbiA9IHRvICYgKG10ZC0+b29ic2l6ZSAtIDEpOworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5lY2MudG90YWw7IGkrKykKKwkJY2hpcC0+b29iX3BvaVtlY2Nwb3NbaV1dID0gZWNjX2NhbGNbaV07CiAKLQkvKiBJbml0aWFsaXplIHJldHVybiBsZW5ndGggdmFsdWUgKi8KLQkqcmV0bGVuID0gMDsKKwluYW5kX3dyaXRlX3BhZ2VfcmF3KG10ZCwgY2hpcCwgYnVmKTsKK30KIAotCS8qIERvIG5vdCBhbGxvdyB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlICovCi0JaWYgKChjb2x1bW4gKyBsZW4pID4gbXRkLT5vb2JzaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9vb2I6IEF0dGVtcHQgdG8gd3JpdGUgcGFzdCBlbmQgb2YgcGFnZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworLyoqCisgKiBuYW5kX3dyaXRlX3BhZ2VfaHdlY2MgLSB7UkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIGJhc2VkIHBhZ2Ugd3JpdGUgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJZGF0YSBidWZmZXIKKyAqLworc3RhdGljIHZvaWQgbmFuZF93cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmJ1ZmZlcnMuZWNjY2FsYzsKKwljb25zdCB1aW50OF90ICpwID0gYnVmOworCWludCAqZWNjcG9zID0gY2hpcC0+ZWNjLmxheW91dC0+ZWNjcG9zOworCisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCQljaGlwLT5lY2MuaHdjdGwobXRkLCBOQU5EX0VDQ19XUklURSk7CisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIHAsIGVjY3NpemUpOworCQljaGlwLT5lY2MuY2FsY3VsYXRlKG10ZCwgcCwgJmVjY19jYWxjW2ldKTsKIAl9CiAKLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCwgRkxfV1JJVElORyk7CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPmVjYy50b3RhbDsgaSsrKQorCQljaGlwLT5vb2JfcG9pW2VjY3Bvc1tpXV0gPSBlY2NfY2FsY1tpXTsKIAotCS8qIFNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJY2hpcC0+d3JpdGVfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKK30KIAotCS8qIFJlc2V0IHRoZSBjaGlwLiBTb21lIGNoaXBzIChsaWtlIHRoZSBUb3NoaWJhIFRDNTgzMkRDIGZvdW5kCi0JICAgaW4gb25lIG9mIG15IERpc2tPbkNoaXAgMjAwMCB0ZXN0IHVuaXRzKSB3aWxsIGNsZWFyIHRoZSB3aG9sZQotCSAgIGRhdGEgcGFnZSB0b28gaWYgd2UgZG9uJ3QgZG8gdGhpcy4gSSBoYXZlIG5vIGNsdWUgd2h5LCBidXQKLQkgICBJIHNlZW0gdG8gaGF2ZSAnZml4ZWQnIGl0IGluIHRoZSBkb2MyMDAwIGRyaXZlciBpbgotCSAgIEF1Z3VzdCAxOTk5LiAgZHdtdzIuICovCi0JdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOworLyoqCisgKiBuYW5kX3dyaXRlX3BhZ2Vfc3luZHJvbWUgLSB7UkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIHN5bmRyb20gYmFzZWQgcGFnZSB3cml0ZQorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglkYXRhIGJ1ZmZlcgorICoKKyAqIFRoZSBodyBnZW5lcmF0b3IgY2FsY3VsYXRlcyB0aGUgZXJyb3Igc3luZHJvbWUgYXV0b21hdGljYWxseS4gVGhlcmVmb3IKKyAqIHdlIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQgYW5kIGhhbmRsaW5nLgorICovCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX3BhZ2Vfc3luZHJvbWUoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGNvbnN0IHVpbnQ4X3QgKmJ1ZikKK3sKKwlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJY29uc3QgdWludDhfdCAqcCA9IGJ1ZjsKKwl1aW50OF90ICpvb2IgPSBjaGlwLT5vb2JfcG9pOwogCi0JLyogQ2hlY2ssIGlmIGl0IGlzIHdyaXRlIHByb3RlY3RlZCAqLwotCWlmIChuYW5kX2NoZWNrX3dwKG10ZCkpCi0JCWdvdG8gb3V0OworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKIAotCS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIGlmIHdlIHdyaXRlIHRvIHRoZSBjYWNoZWQgcGFnZSAqLwotCWlmIChwYWdlID09IHRoaXMtPnBhZ2VidWYpCi0JCXRoaXMtPnBhZ2VidWYgPSAtMTsKKwkJY2hpcC0+ZWNjLmh3Y3RsKG10ZCwgTkFORF9FQ0NfV1JJVEUpOworCQljaGlwLT53cml0ZV9idWYobXRkLCBwLCBlY2NzaXplKTsKIAotCWlmIChOQU5EX01VU1RfUEFEKHRoaXMpKSB7Ci0JCS8qIFdyaXRlIG91dCBkZXNpcmVkIGRhdGEgKi8KLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TRVFJTiwgbXRkLT5vb2JibG9jaywgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKLQkJLyogcHJlcGFkIDB4ZmYgZm9yIHBhcnRpYWwgcHJvZ3JhbW1pbmcgKi8KLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgZmZjaGFycywgY29sdW1uKTsKLQkJLyogd3JpdGUgZGF0YSAqLwotCQl0aGlzLT53cml0ZV9idWYobXRkLCBidWYsIGxlbik7Ci0JCS8qIHBvc3RwYWQgMHhmZiBmb3IgcGFydGlhbCBwcm9ncmFtbWluZyAqLwotCQl0aGlzLT53cml0ZV9idWYobXRkLCBmZmNoYXJzLCBtdGQtPm9vYnNpemUgLSAobGVuK2NvbHVtbikpOworCQlpZiAoY2hpcC0+ZWNjLnByZXBhZCkgeworCQkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgb29iLCBjaGlwLT5lY2MucHJlcGFkKTsKKwkJCW9vYiArPSBjaGlwLT5lY2MucHJlcGFkOworCQl9CisKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsIG9vYik7CisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIG9vYiwgZWNjYnl0ZXMpOworCQlvb2IgKz0gZWNjYnl0ZXM7CisKKwkJaWYgKGNoaXAtPmVjYy5wb3N0cGFkKSB7CisJCQljaGlwLT53cml0ZV9idWYobXRkLCBvb2IsIGNoaXAtPmVjYy5wb3N0cGFkKTsKKwkJCW9vYiArPSBjaGlwLT5lY2MucG9zdHBhZDsKKwkJfQorCX0KKworCS8qIENhbGN1bGF0ZSByZW1haW5pbmcgb29iIGJ5dGVzICovCisJaSA9IG10ZC0+b29ic2l6ZSAtIChvb2IgLSBjaGlwLT5vb2JfcG9pKTsKKwlpZiAoaSkKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgb29iLCBpKTsKK30KKworLyoqCisgKiBuYW5kX3dyaXRlX3BhZ2UgLSBbSU5URVJOQUxdIHdyaXRlIG9uZSBwYWdlCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGNoaXA6CU5BTkQgY2hpcCBkZXNjcmlwdG9yCisgKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHdyaXRlCisgKiBAY2FjaGVkOgljYWNoZWQgcHJvZ3JhbW1pbmcKKyAqLworc3RhdGljIGludCBuYW5kX3dyaXRlX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkgICBjb25zdCB1aW50OF90ICpidWYsIGludCBwYWdlLCBpbnQgY2FjaGVkKQoreworCWludCBzdGF0dXM7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU0VRSU4sIDB4MDAsIHBhZ2UpOworCisJY2hpcC0+ZWNjLndyaXRlX3BhZ2UobXRkLCBjaGlwLCBidWYpOworCisJLyoKKwkgKiBDYWNoZWQgcHJvZ2FtbWluZyBkaXNhYmxlZCBmb3Igbm93LCBOb3Qgc3VyZSBpZiBpdHMgd29ydGggdGhlCisJICogdHJvdWJsZS4gVGhlIHNwZWVkIGdhaW4gaXMgbm90IHZlcnkgaW1wcmVzc2l2ZS4gKDIuMy0+Mi42TWliL3MpCisJICovCisJY2FjaGVkID0gMDsKKworCWlmICghY2FjaGVkIHx8ICEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQ0FDSEVQUkcpKSB7CisKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLCAtMSwgLTEpOworCQlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQsIGNoaXApOworCQkvKgorCQkgKiBTZWUgaWYgb3BlcmF0aW9uIGZhaWxlZCBhbmQgYWRkaXRpb25hbCBzdGF0dXMgY2hlY2tzIGFyZQorCQkgKiBhdmFpbGFibGUKKwkJICovCisJCWlmICgoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgJiYgKGNoaXAtPmVycnN0YXQpKQorCQkJc3RhdHVzID0gY2hpcC0+ZXJyc3RhdChtdGQsIGNoaXAsIEZMX1dSSVRJTkcsIHN0YXR1cywKKwkJCQkJICAgICAgIHBhZ2UpOworCisJCWlmIChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKQorCQkJcmV0dXJuIC1FSU87CiAJfSBlbHNlIHsKLQkJLyogV3JpdGUgb3V0IGRlc2lyZWQgZGF0YSAqLwotCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NFUUlOLCBtdGQtPm9vYmJsb2NrICsgY29sdW1uLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCQkvKiB3cml0ZSBkYXRhICovCi0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIGJ1ZiwgbGVuKTsKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0NBQ0hFRFBST0csIC0xLCAtMSk7CisJCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CiAJfQotCS8qIFNlbmQgY29tbWFuZCB0byBwcm9ncmFtIHRoZSBPT0IgZGF0YSAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUEFHRVBST0csIC0xLCAtMSk7Ci0KLQlzdGF0dXMgPSB0aGlzLT53YWl0ZnVuYyAobXRkLCB0aGlzLCBGTF9XUklUSU5HKTsKLQotCS8qIFNlZSBpZiBkZXZpY2UgdGhpbmtzIGl0IHN1Y2NlZWRlZCAqLwotCWlmIChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9vb2I6ICIgIkZhaWxlZCB3cml0ZSwgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0JLyogUmV0dXJuIGhhcHB5ICovCi0JKnJldGxlbiA9IGxlbjsKIAogI2lmZGVmIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUKIAkvKiBTZW5kIGNvbW1hbmQgdG8gcmVhZCBiYWNrIHRoZSBkYXRhICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFET09CLCBjb2x1bW4sIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLCBwYWdlKTsKIAotCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgYnVmLCBsZW4pKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9vb2I6ICIgIkZhaWxlZCB3cml0ZSB2ZXJpZnksIHBhZ2UgMHglMDh4XG4iLCBwYWdlKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChjaGlwLT52ZXJpZnlfYnVmKG10ZCwgYnVmLCBtdGQtPndyaXRlc2l6ZSkpCisJCXJldHVybiAtRUlPOwogI2VuZGlmCi0JcmV0ID0gMDsKLW91dDoKLQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi0vKioKLSAqIG5hbmRfd3JpdGV2IC0gW01URCBJbnRlcmZhY2VdIGNvbXBhYmlsdHkgZnVuY3Rpb24gZm9yIG5hbmRfd3JpdGV2X2VjYwotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB2ZWNzOgl0aGUgaW92ZWN0b3JzIHRvIHdyaXRlCi0gKiBAY291bnQ6CW51bWJlciBvZiB2ZWN0b3JzCi0gKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKgotICogTkFORCB3cml0ZSB3aXRoIGt2ZWMuIFRoaXMganVzdCBjYWxscyB0aGUgZWNjIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgbmFuZF93cml0ZXYgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywgdW5zaWduZWQgbG9uZyBjb3VudCwKLQkJbG9mZl90IHRvLCBzaXplX3QgKiByZXRsZW4pCi17Ci0JcmV0dXJuIChuYW5kX3dyaXRldl9lY2MgKG10ZCwgdmVjcywgY291bnQsIHRvLCByZXRsZW4sIE5VTEwsIE5VTEwpKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBuYW5kX3dyaXRldl9lY2MgLSBbTVREIEludGVyZmFjZV0gd3JpdGUgd2l0aCBpb3ZlYyB3aXRoIGVjYwotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB2ZWNzOgl0aGUgaW92ZWN0b3JzIHRvIHdyaXRlCi0gKiBAY291bnQ6CW51bWJlciBvZiB2ZWN0b3JzCi0gKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAZWNjYnVmOglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlcgotICogQG9vYnNlbDoJb29iIHNlbGVjdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBOQU5EIHdyaXRlIHdpdGggaW92ZWMgd2l0aCBlY2MKKyAqIG5hbmRfZmlsbF9vb2IgLSBbSW50ZXJuYWxdIFRyYW5zZmVyIGNsaWVudCBidWZmZXIgdG8gb29iCisgKiBAY2hpcDoJbmFuZCBjaGlwIHN0cnVjdHVyZQorICogQG9vYjoJb29iIGRhdGEgYnVmZmVyCisgKiBAb3BzOglvb2Igb3BzIHN0cnVjdHVyZQogICovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGV2X2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LAotCQlsb2ZmX3QgdG8sIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKK3N0YXRpYyB1aW50OF90ICpuYW5kX2ZpbGxfb29iKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQ4X3QgKm9vYiwKKwkJCQkgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewotCWludCBpLCBwYWdlLCBsZW4sIHRvdGFsX2xlbiwgcmV0ID0gLUVJTywgd3JpdHRlbiA9IDAsIGNoaXBucjsKLQlpbnQgb29iLCBudW1wYWdlcywgYXV0b3BsYWNlID0gMCwgc3RhcnRwYWdlOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50CXBwYmxvY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKTsKLQl1X2NoYXIgKm9vYmJ1ZiwgKmJ1ZnN0YXJ0OworCXNpemVfdCBsZW4gPSBvcHMtPm9vYmxlbjsKIAotCS8qIFByZXNldCB3cml0dGVuIGxlbiBmb3IgZWFybHkgZXhpdCAqLwotCSpyZXRsZW4gPSAwOworCXN3aXRjaChvcHMtPm1vZGUpIHsKIAotCS8qIENhbGN1bGF0ZSB0b3RhbCBsZW5ndGggb2YgZGF0YSAqLwotCXRvdGFsX2xlbiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXRvdGFsX2xlbiArPSAoaW50KSB2ZWNzW2ldLmlvdl9sZW47CisJY2FzZSBNVERfT09CX1BMQUNFOgorCWNhc2UgTVREX09PQl9SQVc6CisJCW1lbWNweShjaGlwLT5vb2JfcG9pICsgb3BzLT5vb2JvZmZzLCBvb2IsIGxlbik7CisJCXJldHVybiBvb2IgKyBsZW47CiAKLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMywKLQkgICAgICAgIm5hbmRfd3JpdGV2OiB0byA9IDB4JTA4eCwgbGVuID0gJWksIGNvdW50ID0gJWxkXG4iLCAodW5zaWduZWQgaW50KSB0bywgKHVuc2lnbmVkIGludCkgdG90YWxfbGVuLCBjb3VudCk7CisJY2FzZSBNVERfT09CX0FVVE86IHsKKwkJc3RydWN0IG5hbmRfb29iZnJlZSAqZnJlZSA9IGNoaXAtPmVjYy5sYXlvdXQtPm9vYmZyZWU7CisJCXVpbnQzMl90IGJvZmZzID0gMCwgd29mZnMgPSBvcHMtPm9vYm9mZnM7CisJCXNpemVfdCBieXRlcyA9IDA7CiAKLQkvKiBEbyBub3QgYWxsb3cgd3JpdGUgcGFzdCBlbmQgb2YgcGFnZSAqLwotCWlmICgodG8gKyB0b3RhbF9sZW4pID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZXY6IEF0dGVtcHRlZCB3cml0ZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZm9yKDsgZnJlZS0+bGVuZ3RoICYmIGxlbjsgZnJlZSsrLCBsZW4gLT0gYnl0ZXMpIHsKKwkJCS8qIFdyaXRlIHJlcXVlc3Qgbm90IGZyb20gb2Zmc2V0IDAgPyAqLworCQkJaWYgKHVubGlrZWx5KHdvZmZzKSkgeworCQkJCWlmICh3b2ZmcyA+PSBmcmVlLT5sZW5ndGgpIHsKKwkJCQkJd29mZnMgLT0gZnJlZS0+bGVuZ3RoOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYm9mZnMgPSBmcmVlLT5vZmZzZXQgKyB3b2ZmczsKKwkJCQlieXRlcyA9IG1pbl90KHNpemVfdCwgbGVuLAorCQkJCQkgICAgICAoZnJlZS0+bGVuZ3RoIC0gd29mZnMpKTsKKwkJCQl3b2ZmcyA9IDA7CisJCQl9IGVsc2UgeworCQkJCWJ5dGVzID0gbWluX3Qoc2l6ZV90LCBsZW4sIGZyZWUtPmxlbmd0aCk7CisJCQkJYm9mZnMgPSBmcmVlLT5vZmZzZXQ7CisJCQl9CisJCQltZW1jcHkoY2hpcC0+b29iX3BvaSArIHdvZmZzLCBvb2IsIGJ5dGVzKTsKKwkJCW9vYiArPSBieXRlczsKKwkJfQorCQlyZXR1cm4gb29iOwogCX0KKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZpbmUgTk9UQUxJR05FRCh4KSAoeCAmIChtdGQtPndyaXRlc2l6ZS0xKSkgIT0gMAorCisvKioKKyAqIG5hbmRfZG9fd3JpdGVfb3BzIC0gW0ludGVybmFsXSBOQU5EIHdyaXRlIHdpdGggRUNDCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiBAb3BzOglvb2Igb3BlcmF0aW9ucyBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBOQU5EIHdyaXRlIHdpdGggRUNDCisgKi8KK3N0YXRpYyBpbnQgbmFuZF9kb193cml0ZV9vcHMoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCSAgICAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJaW50IGNoaXBuciwgcmVhbHBhZ2UsIHBhZ2UsIGJsb2NrbWFzazsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXVpbnQzMl90IHdyaXRlbGVuID0gb3BzLT5sZW47CisJdWludDhfdCAqb29iID0gb3BzLT5vb2JidWY7CisJdWludDhfdCAqYnVmID0gb3BzLT5kYXRidWY7CisJaW50IGJ5dGVzID0gbXRkLT53cml0ZXNpemU7CisJaW50IHJldDsKKworCW9wcy0+cmV0bGVuID0gMDsKIAogCS8qIHJlamVjdCB3cml0ZXMsIHdoaWNoIGFyZSBub3QgcGFnZSBhbGlnbmVkICovCi0JaWYgKE5PVEFMSUdORUQgKHRvKSB8fCBOT1RBTElHTkVEKHRvdGFsX2xlbikpIHsKLQkJcHJpbnRrIChLRVJOX05PVElDRSAibmFuZF93cml0ZV9lY2M6IEF0dGVtcHQgdG8gd3JpdGUgbm90IHBhZ2UgYWxpZ25lZCBkYXRhXG4iKTsKKwlpZiAoTk9UQUxJR05FRCh0bykgfHwgTk9UQUxJR05FRChvcHMtPmxlbikpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJuYW5kX3dyaXRlOiAiCisJCSAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCwgRkxfV1JJVElORyk7Ci0KLQkvKiBHZXQgdGhlIGN1cnJlbnQgY2hpcC1uciAqLwotCWNoaXBuciA9IChpbnQpICh0byA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKLQkvKiBTZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCWlmICghd3JpdGVsZW4pCisJCXJldHVybiAwOwogCiAJLyogQ2hlY2ssIGlmIGl0IGlzIHdyaXRlIHByb3RlY3RlZCAqLwogCWlmIChuYW5kX2NoZWNrX3dwKG10ZCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVJTzsKIAotCS8qIGlmIG9vYnNlbCBpcyBOVUxMLCB1c2UgY2hpcCBkZWZhdWx0cyAqLwotCWlmIChvb2JzZWwgPT0gTlVMTCkKLQkJb29ic2VsID0gJm10ZC0+b29iaW5mbzsKKwljaGlwbnIgPSAoaW50KSh0byA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAKLQkvKiBBdXRvcGxhY2Ugb2Ygb29iIGRhdGEgPyBVc2UgdGhlIGRlZmF1bHQgcGxhY2VtZW50IHNjaGVtZSAqLwotCWlmIChvb2JzZWwtPnVzZWVjYyA9PSBNVERfTkFOREVDQ19BVVRPUExBQ0UpIHsKLQkJb29ic2VsID0gdGhpcy0+YXV0b29vYjsKLQkJYXV0b3BsYWNlID0gMTsKLQl9Ci0JaWYgKG9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTF9VU1IpCi0JCWF1dG9wbGFjZSA9IDE7CisJcmVhbHBhZ2UgPSAoaW50KSh0byA+PiBjaGlwLT5wYWdlX3NoaWZ0KTsKKwlwYWdlID0gcmVhbHBhZ2UgJiBjaGlwLT5wYWdlbWFzazsKKwlibG9ja21hc2sgPSAoMSA8PCAoY2hpcC0+cGh5c19lcmFzZV9zaGlmdCAtIGNoaXAtPnBhZ2Vfc2hpZnQpKSAtIDE7CiAKLQkvKiBTZXR1cCBzdGFydCBwYWdlICovCi0JcGFnZSA9IChpbnQpICh0byA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQkvKiBJbnZhbGlkYXRlIHRoZSBwYWdlIGNhY2hlLCBpZiB3ZSB3cml0ZSB0byB0aGUgY2FjaGVkIHBhZ2UgKi8KLQlpZiAocGFnZSA8PSB0aGlzLT5wYWdlYnVmICYmIHRoaXMtPnBhZ2VidWYgPCAoKHRvICsgdG90YWxfbGVuKSA+PiB0aGlzLT5wYWdlX3NoaWZ0KSkKLQkJdGhpcy0+cGFnZWJ1ZiA9IC0xOworCS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIHdoZW4gd2Ugd3JpdGUgdG8gdGhlIGNhY2hlZCBwYWdlICovCisJaWYgKHRvIDw9IChjaGlwLT5wYWdlYnVmIDw8IGNoaXAtPnBhZ2Vfc2hpZnQpICYmCisJICAgIChjaGlwLT5wYWdlYnVmIDw8IGNoaXAtPnBhZ2Vfc2hpZnQpIDwgKHRvICsgb3BzLT5sZW4pKQorCQljaGlwLT5wYWdlYnVmID0gLTE7CiAKLQlzdGFydHBhZ2UgPSBwYWdlICYgdGhpcy0+cGFnZW1hc2s7CisJY2hpcC0+b29iX3BvaSA9IGNoaXAtPmJ1ZmZlcnMub29id2J1ZjsKIAotCS8qIExvb3AgdW50aWwgYWxsIGt2ZWMnIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiAqLwotCWxlbiA9IDA7Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCS8qIElmIHRoZSBnaXZlbiB0dXBsZSBpcyA+PSBwYWdlc2l6ZSB0aGVuCi0JCSAqIHdyaXRlIGl0IG91dCBmcm9tIHRoZSBpb3YKLQkJICovCi0JCWlmICgodmVjcy0+aW92X2xlbiAtIGxlbikgPj0gbXRkLT5vb2JibG9jaykgewotCQkJLyogQ2FsYyBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHdyaXRlCi0JCQkgKiBvdXQgb2YgdGhpcyBpb3YgaW4gb25lIGdvICovCi0JCQludW1wYWdlcyA9ICh2ZWNzLT5pb3ZfbGVuIC0gbGVuKSA+PiB0aGlzLT5wYWdlX3NoaWZ0OwotCQkJLyogRG8gbm90IGNyb3NzIGJsb2NrIGJvdW5kYXJpZXMgKi8KLQkJCW51bXBhZ2VzID0gbWluIChwcGJsb2NrIC0gKHN0YXJ0cGFnZSAmIChwcGJsb2NrIC0gMSkpLCBudW1wYWdlcyk7Ci0JCQlvb2JidWYgPSBuYW5kX3ByZXBhcmVfb29iYnVmIChtdGQsIE5VTEwsIG9vYnNlbCwgYXV0b3BsYWNlLCBudW1wYWdlcyk7Ci0JCQlidWZzdGFydCA9ICh1X2NoYXIgKil2ZWNzLT5pb3ZfYmFzZTsKLQkJCWJ1ZnN0YXJ0ICs9IGxlbjsKLQkJCXRoaXMtPmRhdGFfcG9pID0gYnVmc3RhcnQ7Ci0JCQlvb2IgPSAwOwotCQkJZm9yIChpID0gMTsgaSA8PSBudW1wYWdlczsgaSsrKSB7Ci0JCQkJLyogV3JpdGUgb25lIHBhZ2UuIElmIHRoaXMgaXMgdGhlIGxhc3QgcGFnZSB0byB3cml0ZQotCQkJCSAqIHRoZW4gdXNlIHRoZSByZWFsIHBhZ2Vwcm9ncmFtIGNvbW1hbmQsIGVsc2Ugc2VsZWN0Ci0JCQkJICogY2FjaGVkIHByb2dyYW1taW5nIGlmIHN1cHBvcnRlZCBieSB0aGUgY2hpcC4KLQkJCQkgKi8KLQkJCQlyZXQgPSBuYW5kX3dyaXRlX3BhZ2UgKG10ZCwgdGhpcywgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrLAotCQkJCQkmb29iYnVmW29vYl0sIG9vYnNlbCwgaSAhPSBudW1wYWdlcyk7Ci0JCQkJaWYgKHJldCkKLQkJCQkJZ290byBvdXQ7Ci0JCQkJdGhpcy0+ZGF0YV9wb2kgKz0gbXRkLT5vb2JibG9jazsKLQkJCQlsZW4gKz0gbXRkLT5vb2JibG9jazsKLQkJCQlvb2IgKz0gbXRkLT5vb2JzaXplOwotCQkJCXBhZ2UrKzsKLQkJCX0KLQkJCS8qIENoZWNrLCBpZiB3ZSBoYXZlIHRvIHN3aXRjaCB0byB0aGUgbmV4dCB0dXBsZSAqLwotCQkJaWYgKGxlbiA+PSAoaW50KSB2ZWNzLT5pb3ZfbGVuKSB7Ci0JCQkJdmVjcysrOwotCQkJCWxlbiA9IDA7Ci0JCQkJY291bnQtLTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIFdlIG11c3QgdXNlIHRoZSBpbnRlcm5hbCBidWZmZXIsIHJlYWQgZGF0YSBvdXQgb2YgZWFjaAotCQkJICogdHVwbGUgdW50aWwgd2UgaGF2ZSBhIGZ1bGwgcGFnZSB0byB3cml0ZQotCQkJICovCi0JCQlpbnQgY250ID0gMDsKLQkJCXdoaWxlIChjbnQgPCBtdGQtPm9vYmJsb2NrKSB7Ci0JCQkJaWYgKHZlY3MtPmlvdl9iYXNlICE9IE5VTEwgJiYgdmVjcy0+aW92X2xlbikKLQkJCQkJdGhpcy0+ZGF0YV9idWZbY250KytdID0gKCh1X2NoYXIgKikgdmVjcy0+aW92X2Jhc2UpW2xlbisrXTsKLQkJCQkvKiBDaGVjaywgaWYgd2UgaGF2ZSB0byBzd2l0Y2ggdG8gdGhlIG5leHQgdHVwbGUgKi8KLQkJCQlpZiAobGVuID49IChpbnQpIHZlY3MtPmlvdl9sZW4pIHsKLQkJCQkJdmVjcysrOwotCQkJCQlsZW4gPSAwOwotCQkJCQljb3VudC0tOwotCQkJCX0KLQkJCX0KLQkJCXRoaXMtPnBhZ2VidWYgPSBwYWdlOwotCQkJdGhpcy0+ZGF0YV9wb2kgPSB0aGlzLT5kYXRhX2J1ZjsKLQkJCWJ1ZnN0YXJ0ID0gdGhpcy0+ZGF0YV9wb2k7Ci0JCQludW1wYWdlcyA9IDE7Ci0JCQlvb2JidWYgPSBuYW5kX3ByZXBhcmVfb29iYnVmIChtdGQsIE5VTEwsIG9vYnNlbCwgYXV0b3BsYWNlLCBudW1wYWdlcyk7Ci0JCQlyZXQgPSBuYW5kX3dyaXRlX3BhZ2UgKG10ZCwgdGhpcywgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrLAotCQkJCW9vYmJ1Ziwgb29ic2VsLCAwKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBvdXQ7Ci0JCQlwYWdlKys7Ci0JCX0KKwl3aGlsZSgxKSB7CisJCWludCBjYWNoZWQgPSB3cml0ZWxlbiA+IGJ5dGVzICYmIHBhZ2UgIT0gYmxvY2ttYXNrOwogCi0JCXRoaXMtPmRhdGFfcG9pID0gYnVmc3RhcnQ7Ci0JCXJldCA9IG5hbmRfdmVyaWZ5X3BhZ2VzIChtdGQsIHRoaXMsIHN0YXJ0cGFnZSwgbnVtcGFnZXMsIG9vYmJ1Ziwgb29ic2VsLCBjaGlwbnIsIDApOworCQlpZiAodW5saWtlbHkob29iKSkKKwkJCW9vYiA9IG5hbmRfZmlsbF9vb2IoY2hpcCwgb29iLCBvcHMpOworCisJCXJldCA9IG5hbmRfd3JpdGVfcGFnZShtdGQsIGNoaXAsIGJ1ZiwgcGFnZSwgY2FjaGVkKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCi0JCXdyaXR0ZW4gKz0gbXRkLT5vb2JibG9jayAqIG51bXBhZ2VzOwotCQkvKiBBbGwgZG9uZSA/ICovCi0JCWlmICghY291bnQpCiAJCQlicmVhazsKIAotCQlzdGFydHBhZ2UgPSBwYWdlICYgdGhpcy0+cGFnZW1hc2s7CisJCXdyaXRlbGVuIC09IGJ5dGVzOworCQlpZiAoIXdyaXRlbGVuKQorCQkJYnJlYWs7CisKKwkJYnVmICs9IGJ5dGVzOworCQlyZWFscGFnZSsrOworCisJCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOwogCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCi0JCWlmICghc3RhcnRwYWdlKSB7CisJCWlmICghcGFnZSkgewogCQkJY2hpcG5yKys7Ci0JCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwkJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwogCQl9CiAJfQotCXJldCA9IDA7Ci1vdXQ6Ci0JLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLworCisJaWYgKHVubGlrZWx5KG9vYikpCisJCW1lbXNldChjaGlwLT5vb2JfcG9pLCAweGZmLCBtdGQtPm9vYnNpemUpOworCisJb3BzLT5yZXRsZW4gPSBvcHMtPmxlbiAtIHdyaXRlbGVuOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbmFuZF93cml0ZSAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIHdpdGggRUNDCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCisgKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQorICoKKyAqIE5BTkQgd3JpdGUgd2l0aCBFQ0MKKyAqLworc3RhdGljIGludCBuYW5kX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCisJCQkgIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1aW50OF90ICpidWYpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlpbnQgcmV0OworCisJLyogRG8gbm90IGFsbG93IHJlYWRzIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmICgodG8gKyBsZW4pID4gbXRkLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisKKwluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9XUklUSU5HKTsKKworCWNoaXAtPm9wcy5sZW4gPSBsZW47CisJY2hpcC0+b3BzLmRhdGJ1ZiA9ICh1aW50OF90ICopYnVmOworCWNoaXAtPm9wcy5vb2JidWYgPSBOVUxMOworCisJcmV0ID0gbmFuZF9kb193cml0ZV9vcHMobXRkLCB0bywgJmNoaXAtPm9wcyk7CisKIAluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CiAKLQkqcmV0bGVuID0gd3JpdHRlbjsKKwkqcmV0bGVuID0gY2hpcC0+b3BzLnJldGxlbjsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG5hbmRfZG9fd3JpdGVfb29iIC0gW01URCBJbnRlcmZhY2VdIE5BTkQgd3JpdGUgb3V0LW9mLWJhbmQKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KKyAqIEBvcHM6CW9vYiBvcGVyYXRpb24gZGVzY3JpcHRpb24gc3RydWN0dXJlCisgKgorICogTkFORCB3cml0ZSBvdXQtb2YtYmFuZAorICovCitzdGF0aWMgaW50IG5hbmRfZG9fd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCWludCBjaGlwbnIsIHBhZ2UsIHN0YXR1czsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfd3JpdGVfb29iOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsCisJICAgICAgKHVuc2lnbmVkIGludCl0bywgKGludClvcHMtPmxlbik7CisKKwkvKiBEbyBub3QgYWxsb3cgd3JpdGUgcGFzdCBlbmQgb2YgcGFnZSAqLworCWlmICgob3BzLT5vb2JvZmZzICsgb3BzLT5sZW4pID4gbXRkLT5vb2JzaXplKSB7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX29vYjogIgorCQkgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2hpcG5yID0gKGludCkodG8gPj4gY2hpcC0+Y2hpcF9zaGlmdCk7CisJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCisJLyogU2hpZnQgdG8gZ2V0IHBhZ2UgKi8KKwlwYWdlID0gKGludCkodG8gPj4gY2hpcC0+cGFnZV9zaGlmdCk7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBjaGlwLiBTb21lIGNoaXBzIChsaWtlIHRoZSBUb3NoaWJhIFRDNTgzMkRDIGZvdW5kIGluIG9uZQorCSAqIG9mIG15IERpc2tPbkNoaXAgMjAwMCB0ZXN0IHVuaXRzKSB3aWxsIGNsZWFyIHRoZSB3aG9sZSBkYXRhIHBhZ2UgdG9vCisJICogaWYgd2UgZG9uJ3QgZG8gdGhpcy4gSSBoYXZlIG5vIGNsdWUgd2h5LCBidXQgSSBzZWVtIHRvIGhhdmUgJ2ZpeGVkJworCSAqIGl0IGluIHRoZSBkb2MyMDAwIGRyaXZlciBpbiBBdWd1c3QgMTk5OS4gIGR3bXcyLgorCSAqLworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRVNFVCwgLTEsIC0xKTsKKworCS8qIENoZWNrLCBpZiBpdCBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KKwlpZiAobmFuZF9jaGVja193cChtdGQpKQorCQlyZXR1cm4gLUVST0ZTOworCisJLyogSW52YWxpZGF0ZSB0aGUgcGFnZSBjYWNoZSwgaWYgd2Ugd3JpdGUgdG8gdGhlIGNhY2hlZCBwYWdlICovCisJaWYgKHBhZ2UgPT0gY2hpcC0+cGFnZWJ1ZikKKwkJY2hpcC0+cGFnZWJ1ZiA9IC0xOworCisJY2hpcC0+b29iX3BvaSA9IGNoaXAtPmJ1ZmZlcnMub29id2J1ZjsKKwltZW1zZXQoY2hpcC0+b29iX3BvaSwgMHhmZiwgbXRkLT5vb2JzaXplKTsKKwluYW5kX2ZpbGxfb29iKGNoaXAsIG9wcy0+b29iYnVmLCBvcHMpOworCXN0YXR1cyA9IGNoaXAtPmVjYy53cml0ZV9vb2IobXRkLCBjaGlwLCBwYWdlICYgY2hpcC0+cGFnZW1hc2spOworCW1lbXNldChjaGlwLT5vb2JfcG9pLCAweGZmLCBtdGQtPm9vYnNpemUpOworCisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCW9wcy0+cmV0bGVuID0gb3BzLT5sZW47CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuYW5kX3dyaXRlX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIGRhdGEgYW5kL29yIG91dC1vZi1iYW5kCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KKyAqIEBvcHM6CW9vYiBvcGVyYXRpb24gZGVzY3JpcHRpb24gc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbnQgbmFuZF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCSAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJdm9pZCAoKndyaXRlX3BhZ2UpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJICBjb25zdCB1aW50OF90ICpidWYpID0gTlVMTDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXQgPSAtRU5PVFNVUFA7CisKKwlvcHMtPnJldGxlbiA9IDA7CisKKwkvKiBEbyBub3QgYWxsb3cgd3JpdGVzIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmICgodG8gKyBvcHMtPmxlbikgPiBtdGQtPnNpemUpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9vb2I6ICIKKwkJICAgICAgIkF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1dSSVRJTkcpOworCisJc3dpdGNoKG9wcy0+bW9kZSkgeworCWNhc2UgTVREX09PQl9QTEFDRToKKwljYXNlIE1URF9PT0JfQVVUTzoKKwkJYnJlYWs7CisKKwljYXNlIE1URF9PT0JfUkFXOgorCQkvKiBSZXBsYWNlIHRoZSB3cml0ZV9wYWdlIGFsZ29yaXRobSB0ZW1wb3JhcnkgKi8KKwkJd3JpdGVfcGFnZSA9IGNoaXAtPmVjYy53cml0ZV9wYWdlOworCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFvcHMtPmRhdGJ1ZikKKwkJcmV0ID0gbmFuZF9kb193cml0ZV9vb2IobXRkLCB0bywgb3BzKTsKKwllbHNlCisJCXJldCA9IG5hbmRfZG9fd3JpdGVfb3BzKG10ZCwgdG8sIG9wcyk7CisKKwlpZiAodW5saWtlbHkob3BzLT5tb2RlID09IE1URF9PT0JfUkFXKSkKKwkJY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPSB3cml0ZV9wYWdlOworIG91dDoKKwluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjA1MCwxMiArMTgxNiwxMiBAQAogICoKICAqIFN0YW5kYXJkIGVyYXNlIGNvbW1hbmQgZm9yIE5BTkQgY2hpcHMKICAqLwotc3RhdGljIHZvaWQgc2luZ2xlX2VyYXNlX2NtZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYWdlKQorc3RhdGljIHZvaWQgc2luZ2xlX2VyYXNlX2NtZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2UpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCS8qIFNlbmQgY29tbWFuZHMgdG8gZXJhc2UgYSBibG9jayAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSk7Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9FUkFTRTIsIC0xLCAtMSk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UpOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9FUkFTRTIsIC0xLCAtMSk7CiB9CiAKIC8qKgpAQCAtMjA2NiwxNSArMTgzMiwxNSBAQAogICogQU5EIG11bHRpIGJsb2NrIGVyYXNlIGNvbW1hbmQgZnVuY3Rpb24KICAqIEVyYXNlIDQgY29uc2VjdXRpdmUgYmxvY2tzCiAgKi8KLXN0YXRpYyB2b2lkIG11bHRpX2VyYXNlX2NtZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYWdlKQorc3RhdGljIHZvaWQgbXVsdGlfZXJhc2VfY21kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZSkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJLyogU2VuZCBjb21tYW5kcyB0byBlcmFzZSBhIGJsb2NrICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKyspOwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSsrKTsKLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UrKyk7Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKTsKLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0VSQVNFMiwgLTEsIC0xKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSsrKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSsrKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSsrKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0VSQVNFMiwgLTEsIC0xKTsKIH0KIAogLyoqCkBAIC0yMDg0LDc5ICsxODUwLDgyIEBACiAgKgogICogRXJhc2Ugb25lIG9yZSBtb3JlIGJsb2NrcwogICovCi1zdGF0aWMgaW50IG5hbmRfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCitzdGF0aWMgaW50IG5hbmRfZXJhc2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKIHsKLQlyZXR1cm4gbmFuZF9lcmFzZV9uYW5kIChtdGQsIGluc3RyLCAwKTsKKwlyZXR1cm4gbmFuZF9lcmFzZV9uYW5kKG10ZCwgaW5zdHIsIDApOwogfQogCiAjZGVmaW5lIEJCVF9QQUdFX01BU0sJMHhmZmZmZmYzZgogLyoqCi0gKiBuYW5kX2VyYXNlX2ludGVybiAtIFtOQU5EIEludGVyZmFjZV0gZXJhc2UgYmxvY2socykKKyAqIG5hbmRfZXJhc2VfbmFuZCAtIFtJbnRlcm5hbF0gZXJhc2UgYmxvY2socykKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAaW5zdHI6CWVyYXNlIGluc3RydWN0aW9uCiAgKiBAYWxsb3diYnQ6CWFsbG93IGVyYXNpbmcgdGhlIGJidCBhcmVhCiAgKgogICogRXJhc2Ugb25lIG9yZSBtb3JlIGJsb2NrcwogICovCi1pbnQgbmFuZF9lcmFzZV9uYW5kIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyLCBpbnQgYWxsb3diYnQpCitpbnQgbmFuZF9lcmFzZV9uYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsCisJCSAgICBpbnQgYWxsb3diYnQpCiB7CiAJaW50IHBhZ2UsIGxlbiwgc3RhdHVzLCBwYWdlc19wZXJfYmxvY2ssIHJldCwgY2hpcG5yOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IHJld3JpdGVfYmJ0W05BTkRfTUFYX0NISVBTXT17MH07CS8qIGZsYWdzIHRvIGluZGljYXRlIHRoZSBwYWdlLCBpZiBiYnQgbmVlZHMgdG8gYmUgcmV3cml0dGVuLiAqLwotCXVuc2lnbmVkIGludCBiYnRfbWFza2VkX3BhZ2U7CQkvKiBiYnQgbWFzayB0byBjb21wYXJlIHRvIHBhZ2UgYmVpbmcgZXJhc2VkLiAqLwotCQkJCQkJLyogSXQgaXMgdXNlZCB0byBzZWUgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyBpbiB0aGUgc2FtZSAqLwotCQkJCQkJLyogICAyNTYgYmxvY2sgZ3JvdXAgYW5kIHRoZSBzYW1lIGJhbmsgYXMgdGhlIGJidC4gKi8KKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXdyaXRlX2JidFtOQU5EX01BWF9DSElQU109ezB9OworCXVuc2lnbmVkIGludCBiYnRfbWFza2VkX3BhZ2UgPSAweGZmZmZmZmZmOwogCi0JREVCVUcgKE1URF9ERUJVR19MRVZFTDMsCi0JICAgICAgICJuYW5kX2VyYXNlOiBzdGFydCA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIGluc3RyLT5hZGRyLCAodW5zaWduZWQgaW50KSBpbnN0ci0+bGVuKTsKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAibmFuZF9lcmFzZTogc3RhcnQgPSAweCUwOHgsIGxlbiA9ICVpXG4iLAorCSAgICAgICh1bnNpZ25lZCBpbnQpaW5zdHItPmFkZHIsICh1bnNpZ25lZCBpbnQpaW5zdHItPmxlbik7CiAKIAkvKiBTdGFydCBhZGRyZXNzIG11c3QgYWxpZ24gb24gYmxvY2sgYm91bmRhcnkgKi8KLQlpZiAoaW5zdHItPmFkZHIgJiAoKDEgPDwgdGhpcy0+cGh5c19lcmFzZV9zaGlmdCkgLSAxKSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2U6IFVuYWxpZ25lZCBhZGRyZXNzXG4iKTsKKwlpZiAoaW5zdHItPmFkZHIgJiAoKDEgPDwgY2hpcC0+cGh5c19lcmFzZV9zaGlmdCkgLSAxKSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogVW5hbGlnbmVkIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBMZW5ndGggbXVzdCBhbGlnbiBvbiBibG9jayBib3VuZGFyeSAqLwotCWlmIChpbnN0ci0+bGVuICYgKCgxIDw8IHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQpIC0gMSkpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiBMZW5ndGggbm90IGJsb2NrIGFsaWduZWRcbiIpOworCWlmIChpbnN0ci0+bGVuICYgKCgxIDw8IGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQpIC0gMSkpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2U6ICIKKwkJICAgICAgIkxlbmd0aCBub3QgYmxvY2sgYWxpZ25lZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIERvIG5vdCBhbGxvdyBlcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KIAlpZiAoKGluc3RyLT5sZW4gKyBpbnN0ci0+YWRkcikgPiBtdGQtPnNpemUpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiBFcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogIgorCQkgICAgICAiRXJhc2UgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW5zdHItPmZhaWxfYWRkciA9IDB4ZmZmZmZmZmY7CiAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCwgRkxfRVJBU0lORyk7CisJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfRVJBU0lORyk7CiAKIAkvKiBTaGlmdCB0byBnZXQgZmlyc3QgcGFnZSAqLwotCXBhZ2UgPSAoaW50KSAoaW5zdHItPmFkZHIgPj4gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JY2hpcG5yID0gKGludCkgKGluc3RyLT5hZGRyID4+IHRoaXMtPmNoaXBfc2hpZnQpOworCXBhZ2UgPSAoaW50KShpbnN0ci0+YWRkciA+PiBjaGlwLT5wYWdlX3NoaWZ0KTsKKwljaGlwbnIgPSAoaW50KShpbnN0ci0+YWRkciA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKIAogCS8qIENhbGN1bGF0ZSBwYWdlcyBpbiBlYWNoIGJsb2NrICovCi0JcGFnZXNfcGVyX2Jsb2NrID0gMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOworCXBhZ2VzX3Blcl9ibG9jayA9IDEgPDwgKGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQgLSBjaGlwLT5wYWdlX3NoaWZ0KTsKIAogCS8qIFNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwogCi0JLyogQ2hlY2sgdGhlIFdQIGJpdCAqLwogCS8qIENoZWNrLCBpZiBpdCBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KIAlpZiAobmFuZF9jaGVja193cChtdGQpKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogRGV2aWNlIGlzIHdyaXRlIHByb3RlY3RlZCEhIVxuIik7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiAiCisJCSAgICAgICJEZXZpY2UgaXMgd3JpdGUgcHJvdGVjdGVkISEhXG4iKTsKIAkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKIAkJZ290byBlcmFzZV9leGl0OwogCX0KIAotCS8qIGlmIEJCVCByZXF1aXJlcyByZWZyZXNoLCBzZXQgdGhlIEJCVCBwYWdlIG1hc2sgdG8gc2VlIGlmIHRoZSBCQlQgc2hvdWxkIGJlIHJld3JpdHRlbiAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgQkJUX0FVVE9fUkVGUkVTSCkgewotCQliYnRfbWFza2VkX3BhZ2UgPSB0aGlzLT5iYnRfdGQtPnBhZ2VzW2NoaXBucl0gJiBCQlRfUEFHRV9NQVNLOwotCX0gZWxzZSB7Ci0JCWJidF9tYXNrZWRfcGFnZSA9IDB4ZmZmZmZmZmY7CS8qIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcgKi8KLQl9CisJLyoKKwkgKiBJZiBCQlQgcmVxdWlyZXMgcmVmcmVzaCwgc2V0IHRoZSBCQlQgcGFnZSBtYXNrIHRvIHNlZSBpZiB0aGUgQkJUCisJICogc2hvdWxkIGJlIHJld3JpdHRlbi4gT3RoZXJ3aXNlIHRoZSBtYXNrIGlzIHNldCB0byAweGZmZmZmZmZmIHdoaWNoCisJICogY2FuIG5vdCBiZSBtYXRjaGVkLiBUaGlzIGlzIGFsc28gZG9uZSB3aGVuIHRoZSBiYnQgaXMgYWN0dWFsbHkKKwkgKiBlcmFzZWQgdG8gYXZvaWQgcmVjdXNyc2l2ZSB1cGRhdGVzCisJICovCisJaWYgKGNoaXAtPm9wdGlvbnMgJiBCQlRfQVVUT19SRUZSRVNIICYmICFhbGxvd2JidCkKKwkJYmJ0X21hc2tlZF9wYWdlID0gY2hpcC0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdICYgQkJUX1BBR0VfTUFTSzsKIAogCS8qIExvb3AgdGhyb3VnaCB0aGUgcGFnZXMgKi8KIAlsZW4gPSBpbnN0ci0+bGVuOwpAQCAtMjE2NCw2NCArMTkzMyw3NyBAQAogCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTSU5HOwogCiAJd2hpbGUgKGxlbikgewotCQkvKiBDaGVjayBpZiB3ZSBoYXZlIGEgYmFkIGJsb2NrLCB3ZSBkbyBub3QgZXJhc2UgYmFkIGJsb2NrcyAhICovCi0JCWlmIChuYW5kX2Jsb2NrX2NoZWNrYmFkKG10ZCwgKChsb2ZmX3QpIHBhZ2UpIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsIDAsIGFsbG93YmJ0KSkgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm5hbmRfZXJhc2U6IGF0dGVtcHQgdG8gZXJhc2UgYSBiYWQgYmxvY2sgYXQgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOworCQkvKgorCQkgKiBoZWNrIGlmIHdlIGhhdmUgYSBiYWQgYmxvY2ssIHdlIGRvIG5vdCBlcmFzZSBiYWQgYmxvY2tzICEKKwkJICovCisJCWlmIChuYW5kX2Jsb2NrX2NoZWNrYmFkKG10ZCwgKChsb2ZmX3QpIHBhZ2UpIDw8CisJCQkJCWNoaXAtPnBhZ2Vfc2hpZnQsIDAsIGFsbG93YmJ0KSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibmFuZF9lcmFzZTogYXR0ZW1wdCB0byBlcmFzZSBhICIKKwkJCSAgICAgICAiYmFkIGJsb2NrIGF0IHBhZ2UgMHglMDh4XG4iLCBwYWdlKTsKIAkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7CiAJCQlnb3RvIGVyYXNlX2V4aXQ7CiAJCX0KIAotCQkvKiBJbnZhbGlkYXRlIHRoZSBwYWdlIGNhY2hlLCBpZiB3ZSBlcmFzZSB0aGUgYmxvY2sgd2hpY2ggY29udGFpbnMKLQkJICAgdGhlIGN1cnJlbnQgY2FjaGVkIHBhZ2UgKi8KLQkJaWYgKHBhZ2UgPD0gdGhpcy0+cGFnZWJ1ZiAmJiB0aGlzLT5wYWdlYnVmIDwgKHBhZ2UgKyBwYWdlc19wZXJfYmxvY2spKQotCQkJdGhpcy0+cGFnZWJ1ZiA9IC0xOworCQkvKgorCQkgKiBJbnZhbGlkYXRlIHRoZSBwYWdlIGNhY2hlLCBpZiB3ZSBlcmFzZSB0aGUgYmxvY2sgd2hpY2gKKwkJICogY29udGFpbnMgdGhlIGN1cnJlbnQgY2FjaGVkIHBhZ2UKKwkJICovCisJCWlmIChwYWdlIDw9IGNoaXAtPnBhZ2VidWYgJiYgY2hpcC0+cGFnZWJ1ZiA8CisJCSAgICAocGFnZSArIHBhZ2VzX3Blcl9ibG9jaykpCisJCQljaGlwLT5wYWdlYnVmID0gLTE7CiAKLQkJdGhpcy0+ZXJhc2VfY21kIChtdGQsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7CisJCWNoaXAtPmVyYXNlX2NtZChtdGQsIHBhZ2UgJiBjaGlwLT5wYWdlbWFzayk7CiAKLQkJc3RhdHVzID0gdGhpcy0+d2FpdGZ1bmMgKG10ZCwgdGhpcywgRkxfRVJBU0lORyk7CisJCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CiAKLQkJLyogU2VlIGlmIG9wZXJhdGlvbiBmYWlsZWQgYW5kIGFkZGl0aW9uYWwgc3RhdHVzIGNoZWNrcyBhcmUgYXZhaWxhYmxlICovCi0JCWlmICgoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgJiYgKHRoaXMtPmVycnN0YXQpKSB7Ci0JCQlzdGF0dXMgPSB0aGlzLT5lcnJzdGF0KG10ZCwgdGhpcywgRkxfRVJBU0lORywgc3RhdHVzLCBwYWdlKTsKLQkJfQorCQkvKgorCQkgKiBTZWUgaWYgb3BlcmF0aW9uIGZhaWxlZCBhbmQgYWRkaXRpb25hbCBzdGF0dXMgY2hlY2tzIGFyZQorCQkgKiBhdmFpbGFibGUKKwkJICovCisJCWlmICgoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgJiYgKGNoaXAtPmVycnN0YXQpKQorCQkJc3RhdHVzID0gY2hpcC0+ZXJyc3RhdChtdGQsIGNoaXAsIEZMX0VSQVNJTkcsCisJCQkJCSAgICAgICBzdGF0dXMsIHBhZ2UpOwogCiAJCS8qIFNlZSBpZiBibG9jayBlcmFzZSBzdWNjZWVkZWQgKi8KIAkJaWYgKHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwpIHsKLQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogIiAiRmFpbGVkIGVyYXNlLCBwYWdlIDB4JTA4eFxuIiwgcGFnZSk7CisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogIgorCQkJICAgICAgIkZhaWxlZCBlcmFzZSwgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOwogCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKLQkJCWluc3RyLT5mYWlsX2FkZHIgPSAocGFnZSA8PCB0aGlzLT5wYWdlX3NoaWZ0KTsKKwkJCWluc3RyLT5mYWlsX2FkZHIgPSAocGFnZSA8PCBjaGlwLT5wYWdlX3NoaWZ0KTsKIAkJCWdvdG8gZXJhc2VfZXhpdDsKIAkJfQogCi0JCS8qIGlmIEJCVCByZXF1aXJlcyByZWZyZXNoLCBzZXQgdGhlIEJCVCByZXdyaXRlIGZsYWcgdG8gdGhlIHBhZ2UgYmVpbmcgZXJhc2VkICovCi0JCWlmICh0aGlzLT5vcHRpb25zICYgQkJUX0FVVE9fUkVGUkVTSCkgewotCQkJaWYgKCgocGFnZSAmIEJCVF9QQUdFX01BU0spID09IGJidF9tYXNrZWRfcGFnZSkgJiYKLQkJCSAgICAgKHBhZ2UgIT0gdGhpcy0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdKSkgewotCQkJCXJld3JpdGVfYmJ0W2NoaXBucl0gPSAocGFnZSA8PCB0aGlzLT5wYWdlX3NoaWZ0KTsKLQkJCX0KLQkJfQorCQkvKgorCQkgKiBJZiBCQlQgcmVxdWlyZXMgcmVmcmVzaCwgc2V0IHRoZSBCQlQgcmV3cml0ZSBmbGFnIHRvIHRoZQorCQkgKiBwYWdlIGJlaW5nIGVyYXNlZAorCQkgKi8KKwkJaWYgKGJidF9tYXNrZWRfcGFnZSAhPSAweGZmZmZmZmZmICYmCisJCSAgICAocGFnZSAmIEJCVF9QQUdFX01BU0spID09IGJidF9tYXNrZWRfcGFnZSkKKwkJCSAgICByZXdyaXRlX2JidFtjaGlwbnJdID0gKHBhZ2UgPDwgY2hpcC0+cGFnZV9zaGlmdCk7CiAKIAkJLyogSW5jcmVtZW50IHBhZ2UgYWRkcmVzcyBhbmQgZGVjcmVtZW50IGxlbmd0aCAqLwotCQlsZW4gLT0gKDEgPDwgdGhpcy0+cGh5c19lcmFzZV9zaGlmdCk7CisJCWxlbiAtPSAoMSA8PCBjaGlwLT5waHlzX2VyYXNlX3NoaWZ0KTsKIAkJcGFnZSArPSBwYWdlc19wZXJfYmxvY2s7CiAKIAkJLyogQ2hlY2ssIGlmIHdlIGNyb3NzIGEgY2hpcCBib3VuZGFyeSAqLwotCQlpZiAobGVuICYmICEocGFnZSAmIHRoaXMtPnBhZ2VtYXNrKSkgeworCQlpZiAobGVuICYmICEocGFnZSAmIGNoaXAtPnBhZ2VtYXNrKSkgewogCQkJY2hpcG5yKys7Ci0JCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwkJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwogCi0JCQkvKiBpZiBCQlQgcmVxdWlyZXMgcmVmcmVzaCBhbmQgQkJULVBFUkNISVAsCi0JCQkgKiAgIHNldCB0aGUgQkJUIHBhZ2UgbWFzayB0byBzZWUgaWYgdGhpcyBCQlQgc2hvdWxkIGJlIHJld3JpdHRlbiAqLwotCQkJaWYgKCh0aGlzLT5vcHRpb25zICYgQkJUX0FVVE9fUkVGUkVTSCkgJiYgKHRoaXMtPmJidF90ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1BFUkNISVApKSB7Ci0JCQkJYmJ0X21hc2tlZF9wYWdlID0gdGhpcy0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdICYgQkJUX1BBR0VfTUFTSzsKLQkJCX0KLQorCQkJLyoKKwkJCSAqIElmIEJCVCByZXF1aXJlcyByZWZyZXNoIGFuZCBCQlQtUEVSQ0hJUCwgc2V0IHRoZSBCQlQKKwkJCSAqIHBhZ2UgbWFzayB0byBzZWUgaWYgdGhpcyBCQlQgc2hvdWxkIGJlIHJld3JpdHRlbgorCQkJICovCisJCQlpZiAoYmJ0X21hc2tlZF9wYWdlICE9IDB4ZmZmZmZmZmYgJiYKKwkJCSAgICAoY2hpcC0+YmJ0X3RkLT5vcHRpb25zICYgTkFORF9CQlRfUEVSQ0hJUCkpCisJCQkJYmJ0X21hc2tlZF9wYWdlID0gY2hpcC0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdICYKKwkJCQkJQkJUX1BBR0VfTUFTSzsKIAkJfQogCX0KIAlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRE9ORTsKIAotZXJhc2VfZXhpdDoKKyBlcmFzZV9leGl0OgogCiAJcmV0ID0gaW5zdHItPnN0YXRlID09IE1URF9FUkFTRV9ET05FID8gMCA6IC1FSU87CiAJLyogRG8gY2FsbCBiYWNrIGZ1bmN0aW9uICovCkBAIC0yMjMxLDE2ICsyMDEzLDIxIEBACiAJLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLwogCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAotCS8qIGlmIEJCVCByZXF1aXJlcyByZWZyZXNoIGFuZCBlcmFzZSB3YXMgc3VjY2Vzc2Z1bCwgcmV3cml0ZSBhbnkgc2VsZWN0ZWQgYmFkIGJsb2NrIHRhYmxlcyAqLwotCWlmICgodGhpcy0+b3B0aW9ucyAmIEJCVF9BVVRPX1JFRlJFU0gpICYmICghcmV0KSkgewotCQlmb3IgKGNoaXBuciA9IDA7IGNoaXBuciA8IHRoaXMtPm51bWNoaXBzOyBjaGlwbnIrKykgewotCQkJaWYgKHJld3JpdGVfYmJ0W2NoaXBucl0pIHsKLQkJCQkvKiB1cGRhdGUgdGhlIEJCVCBmb3IgY2hpcCAqLwotCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZV9uYW5kOiBuYW5kX3VwZGF0ZV9iYnQgKCVkOjB4JTB4IDB4JTB4KVxuIiwKLQkJCQkJY2hpcG5yLCByZXdyaXRlX2JidFtjaGlwbnJdLCB0aGlzLT5iYnRfdGQtPnBhZ2VzW2NoaXBucl0pOwotCQkJCW5hbmRfdXBkYXRlX2JidCAobXRkLCByZXdyaXRlX2JidFtjaGlwbnJdKTsKLQkJCX0KLQkJfQorCS8qCisJICogSWYgQkJUIHJlcXVpcmVzIHJlZnJlc2ggYW5kIGVyYXNlIHdhcyBzdWNjZXNzZnVsLCByZXdyaXRlIGFueQorCSAqIHNlbGVjdGVkIGJhZCBibG9jayB0YWJsZXMKKwkgKi8KKwlpZiAoYmJ0X21hc2tlZF9wYWdlID09IDB4ZmZmZmZmZmYgfHwgcmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChjaGlwbnIgPSAwOyBjaGlwbnIgPCBjaGlwLT5udW1jaGlwczsgY2hpcG5yKyspIHsKKwkJaWYgKCFyZXdyaXRlX2JidFtjaGlwbnJdKQorCQkJY29udGludWU7CisJCS8qIHVwZGF0ZSB0aGUgQkJUIGZvciBjaGlwICovCisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlX25hbmQ6IG5hbmRfdXBkYXRlX2JidCAiCisJCSAgICAgICIoJWQ6MHglMHggMHglMHgpXG4iLCBjaGlwbnIsIHJld3JpdGVfYmJ0W2NoaXBucl0sCisJCSAgICAgIGNoaXAtPmJidF90ZC0+cGFnZXNbY2hpcG5yXSk7CisJCW5hbmRfdXBkYXRlX2JidChtdGQsIHJld3JpdGVfYmJ0W2NoaXBucl0pOwogCX0KIAogCS8qIFJldHVybiBtb3JlIG9yIGxlc3MgaGFwcHkgKi8KQEAgLTIyNTMsNTEgKzIwNDAsNTAgQEAKICAqCiAgKiBTeW5jIGlzIGFjdHVhbGx5IGEgd2FpdCBmb3IgY2hpcCByZWFkeSBmdW5jdGlvbgogICovCi1zdGF0aWMgdm9pZCBuYW5kX3N5bmMgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorc3RhdGljIHZvaWQgbmFuZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCURFQlVHIChNVERfREVCVUdfTEVWRUwzLCAibmFuZF9zeW5jOiBjYWxsZWRcbiIpOworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX3N5bmM6IGNhbGxlZFxuIik7CiAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCwgRkxfU1lOQ0lORyk7CisJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfU1lOQ0lORyk7CiAJLyogUmVsZWFzZSBpdCBhbmQgZ28gYmFjayAqLwotCW5hbmRfcmVsZWFzZV9kZXZpY2UgKG10ZCk7CisJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogfQogCi0KIC8qKgotICogbmFuZF9ibG9ja19pc2JhZCAtIFtNVEQgSW50ZXJmYWNlXSBDaGVjayB3aGV0aGVyIHRoZSBibG9jayBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGJhZAorICogbmFuZF9ibG9ja19pc2JhZCAtIFtNVEQgSW50ZXJmYWNlXSBDaGVjayBpZiBibG9jayBhdCBvZmZzZXQgaXMgYmFkCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQG9mczoJb2Zmc2V0IHJlbGF0aXZlIHRvIG10ZCBzdGFydAogICovCi1zdGF0aWMgaW50IG5hbmRfYmxvY2tfaXNiYWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKQorc3RhdGljIGludCBuYW5kX2Jsb2NrX2lzYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcykKIHsKIAkvKiBDaGVjayBmb3IgaW52YWxpZCBvZmZzZXQgKi8KLQlpZiAob2ZzID4gbXRkLT5zaXplKQorCWlmIChvZmZzID4gbXRkLT5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBuYW5kX2Jsb2NrX2NoZWNrYmFkIChtdGQsIG9mcywgMSwgMCk7CisJcmV0dXJuIG5hbmRfYmxvY2tfY2hlY2tiYWQobXRkLCBvZmZzLCAxLCAwKTsKIH0KIAogLyoqCi0gKiBuYW5kX2Jsb2NrX21hcmtiYWQgLSBbTVREIEludGVyZmFjZV0gTWFyayB0aGUgYmxvY2sgYXQgdGhlIGdpdmVuIG9mZnNldCBhcyBiYWQKKyAqIG5hbmRfYmxvY2tfbWFya2JhZCAtIFtNVEQgSW50ZXJmYWNlXSBNYXJrIGJsb2NrIGF0IHRoZSBnaXZlbiBvZmZzZXQgYXMgYmFkCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQG9mczoJb2Zmc2V0IHJlbGF0aXZlIHRvIG10ZCBzdGFydAogICovCi1zdGF0aWMgaW50IG5hbmRfYmxvY2tfbWFya2JhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCitzdGF0aWMgaW50IG5hbmRfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJaW50IHJldDsKIAotICAgICAgICBpZiAoKHJldCA9IG5hbmRfYmxvY2tfaXNiYWQobXRkLCBvZnMpKSkgewotICAgICAgICAJLyogSWYgaXQgd2FzIGJhZCBhbHJlYWR5LCByZXR1cm4gc3VjY2VzcyBhbmQgZG8gbm90aGluZy4gKi8KKwlpZiAoKHJldCA9IG5hbmRfYmxvY2tfaXNiYWQobXRkLCBvZnMpKSkgeworCQkvKiBJZiBpdCB3YXMgYmFkIGFscmVhZHksIHJldHVybiBzdWNjZXNzIGFuZCBkbyBub3RoaW5nLiAqLwogCQlpZiAocmV0ID4gMCkKIAkJCXJldHVybiAwOwotICAgICAgICAJcmV0dXJuIHJldDsKLSAgICAgICAgfQorCQlyZXR1cm4gcmV0OworCX0KIAotCXJldHVybiB0aGlzLT5ibG9ja19tYXJrYmFkKG10ZCwgb2ZzKTsKKwlyZXR1cm4gY2hpcC0+YmxvY2tfbWFya2JhZChtdGQsIG9mcyk7CiB9CiAKIC8qKgpAQCAtMjMwNiw5ICsyMDkyLDkgQEAKICAqLwogc3RhdGljIGludCBuYW5kX3N1c3BlbmQoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JcmV0dXJuIG5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9QTV9TVVNQRU5ERUQpOworCXJldHVybiBuYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9QTV9TVVNQRU5ERUQpOwogfQogCiAvKioKQEAgLTIzMTcsMzczICsyMTAzLDM4NSBAQAogICovCiBzdGF0aWMgdm9pZCBuYW5kX3Jlc3VtZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQlpZiAodGhpcy0+c3RhdGUgPT0gRkxfUE1fU1VTUEVOREVEKQorCWlmIChjaGlwLT5zdGF0ZSA9PSBGTF9QTV9TVVNQRU5ERUQpCiAJCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0VSUiAicmVzdW1lKCkgY2FsbGVkIGZvciB0aGUgY2hpcCB3aGljaCBpcyBub3QgIgotCQkJCSJpbiBzdXNwZW5kZWQgc3RhdGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm5hbmRfcmVzdW1lKCkgY2FsbGVkIGZvciBhIGNoaXAgd2hpY2ggaXMgbm90ICIKKwkJICAgICAgICJpbiBzdXNwZW5kZWQgc3RhdGVcbiIpOworfQorCisvKgorICogU2V0IGRlZmF1bHQgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkIG5hbmRfc2V0X2RlZmF1bHRzKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBidXN3KQoreworCS8qIGNoZWNrIGZvciBwcm9wZXIgY2hpcF9kZWxheSBzZXR1cCwgc2V0IDIwdXMgaWYgbm90ICovCisJaWYgKCFjaGlwLT5jaGlwX2RlbGF5KQorCQljaGlwLT5jaGlwX2RlbGF5ID0gMjA7CisKKwkvKiBjaGVjaywgaWYgYSB1c2VyIHN1cHBsaWVkIGNvbW1hbmQgZnVuY3Rpb24gZ2l2ZW4gKi8KKwlpZiAoY2hpcC0+Y21kZnVuYyA9PSBOVUxMKQorCQljaGlwLT5jbWRmdW5jID0gbmFuZF9jb21tYW5kOworCisJLyogY2hlY2ssIGlmIGEgdXNlciBzdXBwbGllZCB3YWl0IGZ1bmN0aW9uIGdpdmVuICovCisJaWYgKGNoaXAtPndhaXRmdW5jID09IE5VTEwpCisJCWNoaXAtPndhaXRmdW5jID0gbmFuZF93YWl0OworCisJaWYgKCFjaGlwLT5zZWxlY3RfY2hpcCkKKwkJY2hpcC0+c2VsZWN0X2NoaXAgPSBuYW5kX3NlbGVjdF9jaGlwOworCWlmICghY2hpcC0+cmVhZF9ieXRlKQorCQljaGlwLT5yZWFkX2J5dGUgPSBidXN3ID8gbmFuZF9yZWFkX2J5dGUxNiA6IG5hbmRfcmVhZF9ieXRlOworCWlmICghY2hpcC0+cmVhZF93b3JkKQorCQljaGlwLT5yZWFkX3dvcmQgPSBuYW5kX3JlYWRfd29yZDsKKwlpZiAoIWNoaXAtPmJsb2NrX2JhZCkKKwkJY2hpcC0+YmxvY2tfYmFkID0gbmFuZF9ibG9ja19iYWQ7CisJaWYgKCFjaGlwLT5ibG9ja19tYXJrYmFkKQorCQljaGlwLT5ibG9ja19tYXJrYmFkID0gbmFuZF9kZWZhdWx0X2Jsb2NrX21hcmtiYWQ7CisJaWYgKCFjaGlwLT53cml0ZV9idWYpCisJCWNoaXAtPndyaXRlX2J1ZiA9IGJ1c3cgPyBuYW5kX3dyaXRlX2J1ZjE2IDogbmFuZF93cml0ZV9idWY7CisJaWYgKCFjaGlwLT5yZWFkX2J1ZikKKwkJY2hpcC0+cmVhZF9idWYgPSBidXN3ID8gbmFuZF9yZWFkX2J1ZjE2IDogbmFuZF9yZWFkX2J1ZjsKKwlpZiAoIWNoaXAtPnZlcmlmeV9idWYpCisJCWNoaXAtPnZlcmlmeV9idWYgPSBidXN3ID8gbmFuZF92ZXJpZnlfYnVmMTYgOiBuYW5kX3ZlcmlmeV9idWY7CisJaWYgKCFjaGlwLT5zY2FuX2JidCkKKwkJY2hpcC0+c2Nhbl9iYnQgPSBuYW5kX2RlZmF1bHRfYmJ0OworCisJaWYgKCFjaGlwLT5jb250cm9sbGVyKSB7CisJCWNoaXAtPmNvbnRyb2xsZXIgPSAmY2hpcC0+aHdjb250cm9sOworCQlzcGluX2xvY2tfaW5pdCgmY2hpcC0+Y29udHJvbGxlci0+bG9jayk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoaXAtPmNvbnRyb2xsZXItPndxKTsKKwl9CiAKIH0KIAorLyoKKyAqIEdldCB0aGUgZmxhc2ggYW5kIG1hbnVmYWN0dXJlciBpZCBhbmQgbG9va3VwIGlmIHRoZSB0eXBlIGlzIHN1cHBvcnRlZAorICovCitzdGF0aWMgc3RydWN0IG5hbmRfZmxhc2hfZGV2ICpuYW5kX2dldF9mbGFzaF90eXBlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQkJICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCQkJICBpbnQgYnVzdywgaW50ICptYWZfaWQpCit7CisJc3RydWN0IG5hbmRfZmxhc2hfZGV2ICp0eXBlID0gTlVMTDsKKwlpbnQgaSwgZGV2X2lkLCBtYWZfaWR4OworCisJLyogU2VsZWN0IHRoZSBkZXZpY2UgKi8KKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIDApOworCisJLyogU2VuZCB0aGUgY29tbWFuZCBmb3IgcmVhZGluZyBkZXZpY2UgSUQgKi8KKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRElELCAweDAwLCAtMSk7CisKKwkvKiBSZWFkIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEcyAqLworCSptYWZfaWQgPSBjaGlwLT5yZWFkX2J5dGUobXRkKTsKKwlkZXZfaWQgPSBjaGlwLT5yZWFkX2J5dGUobXRkKTsKKworCS8qIExvb2t1cCB0aGUgZmxhc2ggaWQgKi8KKwlmb3IgKGkgPSAwOyBuYW5kX2ZsYXNoX2lkc1tpXS5uYW1lICE9IE5VTEw7IGkrKykgeworCQlpZiAoZGV2X2lkID09IG5hbmRfZmxhc2hfaWRzW2ldLmlkKSB7CisJCQl0eXBlID0gICZuYW5kX2ZsYXNoX2lkc1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCF0eXBlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCWlmICghbXRkLT5uYW1lKQorCQltdGQtPm5hbWUgPSB0eXBlLT5uYW1lOworCisJY2hpcC0+Y2hpcHNpemUgPSB0eXBlLT5jaGlwc2l6ZSA8PCAyMDsKKworCS8qIE5ld2VyIGRldmljZXMgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIGluIGFkZGl0aW9uYWwgaWQgYnl0ZXMgKi8KKwlpZiAoIXR5cGUtPnBhZ2VzaXplKSB7CisJCWludCBleHRpZDsKKwkJLyogVGhlIDNyZCBpZCBieXRlIGNvbnRhaW5zIG5vbiByZWxldmFudCBkYXRhIEFUTSAqLworCQlleHRpZCA9IGNoaXAtPnJlYWRfYnl0ZShtdGQpOworCQkvKiBUaGUgNHRoIGlkIGJ5dGUgaXMgdGhlIGltcG9ydGFudCBvbmUgKi8KKwkJZXh0aWQgPSBjaGlwLT5yZWFkX2J5dGUobXRkKTsKKwkJLyogQ2FsYyBwYWdlc2l6ZSAqLworCQltdGQtPndyaXRlc2l6ZSA9IDEwMjQgPDwgKGV4dGlkICYgMHgzKTsKKwkJZXh0aWQgPj49IDI7CisJCS8qIENhbGMgb29ic2l6ZSAqLworCQltdGQtPm9vYnNpemUgPSAoOCA8PCAoZXh0aWQgJiAweDAxKSkgKiAobXRkLT53cml0ZXNpemUgPj4gOSk7CisJCWV4dGlkID4+PSAyOworCQkvKiBDYWxjIGJsb2Nrc2l6ZS4gQmxvY2tzaXplIGlzIG11bHRpcGxlcyBvZiA2NEtpQiAqLworCQltdGQtPmVyYXNlc2l6ZSA9ICg2NCAqIDEwMjQpIDw8IChleHRpZCAmIDB4MDMpOworCQlleHRpZCA+Pj0gMjsKKwkJLyogR2V0IGJ1c3dpZHRoIGluZm9ybWF0aW9uICovCisJCWJ1c3cgPSAoZXh0aWQgJiAweDAxKSA/IE5BTkRfQlVTV0lEVEhfMTYgOiAwOworCisJfSBlbHNlIHsKKwkJLyoKKwkJICogT2xkIGRldmljZXMgaGF2ZSBjaGlwIGRhdGEgaGFyZGNvZGVkIGluIHRoZSBkZXZpY2UgaWQgdGFibGUKKwkJICovCisJCW10ZC0+ZXJhc2VzaXplID0gdHlwZS0+ZXJhc2VzaXplOworCQltdGQtPndyaXRlc2l6ZSA9IHR5cGUtPnBhZ2VzaXplOworCQltdGQtPm9vYnNpemUgPSBtdGQtPndyaXRlc2l6ZSAvIDMyOworCQlidXN3ID0gdHlwZS0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTY7CisJfQorCisJLyogVHJ5IHRvIGlkZW50aWZ5IG1hbnVmYWN0dXJlciAqLworCWZvciAobWFmX2lkeCA9IDA7IG5hbmRfbWFudWZfaWRzW21hZl9pZHhdLmlkICE9IDB4MDsgbWFmX2lkKyspIHsKKwkJaWYgKG5hbmRfbWFudWZfaWRzW21hZl9pZHhdLmlkID09ICptYWZfaWQpCisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIENoZWNrLCBpZiBidXN3aWR0aCBpcyBjb3JyZWN0LiBIYXJkd2FyZSBkcml2ZXJzIHNob3VsZCBzZXQKKwkgKiBjaGlwIGNvcnJlY3QgIQorCSAqLworCWlmIChidXN3ICE9IChjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTkFORCBkZXZpY2U6IE1hbnVmYWN0dXJlciBJRDoiCisJCSAgICAgICAiIDB4JTAyeCwgQ2hpcCBJRDogMHglMDJ4ICglcyAlcylcbiIsICptYWZfaWQsCisJCSAgICAgICBkZXZfaWQsIG5hbmRfbWFudWZfaWRzW21hZl9pZHhdLm5hbWUsIG10ZC0+bmFtZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5BTkQgYnVzIHdpZHRoICVkIGluc3RlYWQgJWQgYml0XG4iLAorCQkgICAgICAgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSA/IDE2IDogOCwKKwkJICAgICAgIGJ1c3cgPyAxNiA6IDgpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwkvKiBDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgc2hpZnQgZnJvbSB0aGUgcGFnZSBzaXplICovCisJY2hpcC0+cGFnZV9zaGlmdCA9IGZmcyhtdGQtPndyaXRlc2l6ZSkgLSAxOworCS8qIENvbnZlcnQgY2hpcHNpemUgdG8gbnVtYmVyIG9mIHBhZ2VzIHBlciBjaGlwIC0xLiAqLworCWNoaXAtPnBhZ2VtYXNrID0gKGNoaXAtPmNoaXBzaXplID4+IGNoaXAtPnBhZ2Vfc2hpZnQpIC0gMTsKKworCWNoaXAtPmJidF9lcmFzZV9zaGlmdCA9IGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQgPQorCQlmZnMobXRkLT5lcmFzZXNpemUpIC0gMTsKKwljaGlwLT5jaGlwX3NoaWZ0ID0gZmZzKGNoaXAtPmNoaXBzaXplKSAtIDE7CisKKwkvKiBTZXQgdGhlIGJhZCBibG9jayBwb3NpdGlvbiAqLworCWNoaXAtPmJhZGJsb2NrcG9zID0gbXRkLT53cml0ZXNpemUgPiA1MTIgPworCQlOQU5EX0xBUkdFX0JBREJMT0NLX1BPUyA6IE5BTkRfU01BTExfQkFEQkxPQ0tfUE9TOworCisJLyogR2V0IGNoaXAgb3B0aW9ucywgcHJlc2VydmUgbm9uIGNoaXAgYmFzZWQgb3B0aW9ucyAqLworCWNoaXAtPm9wdGlvbnMgJj0gfk5BTkRfQ0hJUE9QVElPTlNfTVNLOworCWNoaXAtPm9wdGlvbnMgfD0gdHlwZS0+b3B0aW9ucyAmIE5BTkRfQ0hJUE9QVElPTlNfTVNLOworCisJLyoKKwkgKiBTZXQgY2hpcCBhcyBhIGRlZmF1bHQuIEJvYXJkIGRyaXZlcnMgY2FuIG92ZXJyaWRlIGl0LCBpZiBuZWNlc3NhcnkKKwkgKi8KKwljaGlwLT5vcHRpb25zIHw9IE5BTkRfTk9fQVVUT0lOQ1I7CisKKwkvKiBDaGVjayBpZiBjaGlwIGlzIGEgbm90IGEgc2Ftc3VuZyBkZXZpY2UuIERvIG5vdCBjbGVhciB0aGUKKwkgKiBvcHRpb25zIGZvciBjaGlwcyB3aGljaCBhcmUgbm90IGhhdmluZyBhbiBleHRlbmRlZCBpZC4KKwkgKi8KKwlpZiAoKm1hZl9pZCAhPSBOQU5EX01GUl9TQU1TVU5HICYmICF0eXBlLT5wYWdlc2l6ZSkKKwkJY2hpcC0+b3B0aW9ucyAmPSB+TkFORF9TQU1TVU5HX0xQX09QVElPTlM7CisKKwkvKiBDaGVjayBmb3IgQU5EIGNoaXBzIHdpdGggNCBwYWdlIHBsYW5lcyAqLworCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF80UEFHRV9BUlJBWSkKKwkJY2hpcC0+ZXJhc2VfY21kID0gbXVsdGlfZXJhc2VfY21kOworCWVsc2UKKwkJY2hpcC0+ZXJhc2VfY21kID0gc2luZ2xlX2VyYXNlX2NtZDsKKworCS8qIERvIG5vdCByZXBsYWNlIHVzZXIgc3VwcGxpZWQgY29tbWFuZCBmdW5jdGlvbiAhICovCisJaWYgKG10ZC0+d3JpdGVzaXplID4gNTEyICYmIGNoaXAtPmNtZGZ1bmMgPT0gbmFuZF9jb21tYW5kKQorCQljaGlwLT5jbWRmdW5jID0gbmFuZF9jb21tYW5kX2xwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiTkFORCBkZXZpY2U6IE1hbnVmYWN0dXJlciBJRDoiCisJICAgICAgICIgMHglMDJ4LCBDaGlwIElEOiAweCUwMnggKCVzICVzKVxuIiwgKm1hZl9pZCwgZGV2X2lkLAorCSAgICAgICBuYW5kX21hbnVmX2lkc1ttYWZfaWR4XS5uYW1lLCB0eXBlLT5uYW1lKTsKKworCXJldHVybiB0eXBlOworfQorCisvKiBtb2R1bGVfdGV4dF9hZGRyZXNzKCkgaXNuJ3QgZXhwb3J0ZWQsIGFuZCBpdCdzIG1vc3RseSBhIHBvaW50bGVzcworICAgdGVzdCBpZiB0aGlzIGlzIGEgbW9kdWxlIF9hbnl3YXlfIC0tIHRoZXknZCBoYXZlIHRvIHRyeSBfcmVhbGx5XyBoYXJkCisgICB0byBjYWxsIHVzIGZyb20gaW4ta2VybmVsIGNvZGUgaWYgdGhlIGNvcmUgTkFORCBzdXBwb3J0IGlzIG1vZHVsYXIuICovCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIGNhbGxlcl9pc19tb2R1bGUoKSAoMSkKKyNlbHNlCisjZGVmaW5lIGNhbGxlcl9pc19tb2R1bGUoKSBcCisJbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisjZW5kaWYKIAogLyoqCiAgKiBuYW5kX3NjYW4gLSBbTkFORCBJbnRlcmZhY2VdIFNjYW4gZm9yIHRoZSBOQU5EIGRldmljZQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBtYXhjaGlwczoJTnVtYmVyIG9mIGNoaXBzIHRvIHNjYW4gZm9yCiAgKgotICogVGhpcyBmaWxscyBvdXQgYWxsIHRoZSBub3QgaW5pdGlhbGl6ZWQgZnVuY3Rpb24gcG9pbnRlcnMKKyAqIFRoaXMgZmlsbHMgb3V0IGFsbCB0aGUgdW5pbml0aWFsaXplZCBmdW5jdGlvbiBwb2ludGVycwogICogd2l0aCB0aGUgZGVmYXVsdHMuCiAgKiBUaGUgZmxhc2ggSUQgaXMgcmVhZCBhbmQgdGhlIG10ZC9jaGlwIHN0cnVjdHVyZXMgYXJlCi0gKiBmaWxsZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLiBCdWZmZXJzIGFyZSBhbGxvY2F0ZWQgaWYKLSAqIHRoZXkgYXJlIG5vdCBwcm92aWRlZCBieSB0aGUgYm9hcmQgZHJpdmVyCisgKiBmaWxsZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLgorICogVGhlIG10ZC0+b3duZXIgZmllbGQgbXVzdCBiZSBzZXQgdG8gdGhlIG1vZHVsZSBvZiB0aGUgY2FsbGVyCiAgKgogICovCi1pbnQgbmFuZF9zY2FuIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1heGNoaXBzKQoraW50IG5hbmRfc2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1heGNoaXBzKQogewotCWludCBpLCBuYW5kX21hZl9pZCwgbmFuZF9kZXZfaWQsIGJ1c3csIG1hZl9pZDsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCBpLCBidXN3LCBuYW5kX21hZl9pZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2ZsYXNoX2RldiAqdHlwZTsKIAotCS8qIEdldCBidXN3aWR0aCB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZnVuY3Rpb25zKi8KLQlidXN3ID0gdGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTY7Ci0KLQkvKiBjaGVjayBmb3IgcHJvcGVyIGNoaXBfZGVsYXkgc2V0dXAsIHNldCAyMHVzIGlmIG5vdCAqLwotCWlmICghdGhpcy0+Y2hpcF9kZWxheSkKLQkJdGhpcy0+Y2hpcF9kZWxheSA9IDIwOwotCi0JLyogY2hlY2ssIGlmIGEgdXNlciBzdXBwbGllZCBjb21tYW5kIGZ1bmN0aW9uIGdpdmVuICovCi0JaWYgKHRoaXMtPmNtZGZ1bmMgPT0gTlVMTCkKLQkJdGhpcy0+Y21kZnVuYyA9IG5hbmRfY29tbWFuZDsKLQotCS8qIGNoZWNrLCBpZiBhIHVzZXIgc3VwcGxpZWQgd2FpdCBmdW5jdGlvbiBnaXZlbiAqLwotCWlmICh0aGlzLT53YWl0ZnVuYyA9PSBOVUxMKQotCQl0aGlzLT53YWl0ZnVuYyA9IG5hbmRfd2FpdDsKLQotCWlmICghdGhpcy0+c2VsZWN0X2NoaXApCi0JCXRoaXMtPnNlbGVjdF9jaGlwID0gbmFuZF9zZWxlY3RfY2hpcDsKLQlpZiAoIXRoaXMtPndyaXRlX2J5dGUpCi0JCXRoaXMtPndyaXRlX2J5dGUgPSBidXN3ID8gbmFuZF93cml0ZV9ieXRlMTYgOiBuYW5kX3dyaXRlX2J5dGU7Ci0JaWYgKCF0aGlzLT5yZWFkX2J5dGUpCi0JCXRoaXMtPnJlYWRfYnl0ZSA9IGJ1c3cgPyBuYW5kX3JlYWRfYnl0ZTE2IDogbmFuZF9yZWFkX2J5dGU7Ci0JaWYgKCF0aGlzLT53cml0ZV93b3JkKQotCQl0aGlzLT53cml0ZV93b3JkID0gbmFuZF93cml0ZV93b3JkOwotCWlmICghdGhpcy0+cmVhZF93b3JkKQotCQl0aGlzLT5yZWFkX3dvcmQgPSBuYW5kX3JlYWRfd29yZDsKLQlpZiAoIXRoaXMtPmJsb2NrX2JhZCkKLQkJdGhpcy0+YmxvY2tfYmFkID0gbmFuZF9ibG9ja19iYWQ7Ci0JaWYgKCF0aGlzLT5ibG9ja19tYXJrYmFkKQotCQl0aGlzLT5ibG9ja19tYXJrYmFkID0gbmFuZF9kZWZhdWx0X2Jsb2NrX21hcmtiYWQ7Ci0JaWYgKCF0aGlzLT53cml0ZV9idWYpCi0JCXRoaXMtPndyaXRlX2J1ZiA9IGJ1c3cgPyBuYW5kX3dyaXRlX2J1ZjE2IDogbmFuZF93cml0ZV9idWY7Ci0JaWYgKCF0aGlzLT5yZWFkX2J1ZikKLQkJdGhpcy0+cmVhZF9idWYgPSBidXN3ID8gbmFuZF9yZWFkX2J1ZjE2IDogbmFuZF9yZWFkX2J1ZjsKLQlpZiAoIXRoaXMtPnZlcmlmeV9idWYpCi0JCXRoaXMtPnZlcmlmeV9idWYgPSBidXN3ID8gbmFuZF92ZXJpZnlfYnVmMTYgOiBuYW5kX3ZlcmlmeV9idWY7Ci0JaWYgKCF0aGlzLT5zY2FuX2JidCkKLQkJdGhpcy0+c2Nhbl9iYnQgPSBuYW5kX2RlZmF1bHRfYmJ0OwotCi0JLyogU2VsZWN0IHRoZSBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIDApOwotCi0JLyogU2VuZCB0aGUgY29tbWFuZCBmb3IgcmVhZGluZyBkZXZpY2UgSUQgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwotCi0JLyogUmVhZCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRHMgKi8KLQluYW5kX21hZl9pZCA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCW5hbmRfZGV2X2lkID0gdGhpcy0+cmVhZF9ieXRlKG10ZCk7Ci0KLQkvKiBQcmludCBhbmQgc3RvcmUgZmxhc2ggZGV2aWNlIGluZm9ybWF0aW9uICovCi0JZm9yIChpID0gMDsgbmFuZF9mbGFzaF9pZHNbaV0ubmFtZSAhPSBOVUxMOyBpKyspIHsKLQotCQlpZiAobmFuZF9kZXZfaWQgIT0gbmFuZF9mbGFzaF9pZHNbaV0uaWQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIW10ZC0+bmFtZSkgbXRkLT5uYW1lID0gbmFuZF9mbGFzaF9pZHNbaV0ubmFtZTsKLQkJdGhpcy0+Y2hpcHNpemUgPSBuYW5kX2ZsYXNoX2lkc1tpXS5jaGlwc2l6ZSA8PCAyMDsKLQotCQkvKiBOZXcgZGV2aWNlcyBoYXZlIGFsbCB0aGUgaW5mb3JtYXRpb24gaW4gYWRkaXRpb25hbCBpZCBieXRlcyAqLwotCQlpZiAoIW5hbmRfZmxhc2hfaWRzW2ldLnBhZ2VzaXplKSB7Ci0JCQlpbnQgZXh0aWQ7Ci0JCQkvKiBUaGUgM3JkIGlkIGJ5dGUgY29udGFpbnMgbm9uIHJlbGV2YW50IGRhdGEgQVRNICovCi0JCQlleHRpZCA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCQkJLyogVGhlIDR0aCBpZCBieXRlIGlzIHRoZSBpbXBvcnRhbnQgb25lICovCi0JCQlleHRpZCA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCQkJLyogQ2FsYyBwYWdlc2l6ZSAqLwotCQkJbXRkLT5vb2JibG9jayA9IDEwMjQgPDwgKGV4dGlkICYgMHgzKTsKLQkJCWV4dGlkID4+PSAyOwotCQkJLyogQ2FsYyBvb2JzaXplICovCi0JCQltdGQtPm9vYnNpemUgPSAoOCA8PCAoZXh0aWQgJiAweDAxKSkgKiAobXRkLT5vb2JibG9jayA+PiA5KTsKLQkJCWV4dGlkID4+PSAyOwotCQkJLyogQ2FsYyBibG9ja3NpemUuIEJsb2Nrc2l6ZSBpcyBtdWx0aXBsZXMgb2YgNjRLaUIgKi8KLQkJCW10ZC0+ZXJhc2VzaXplID0gKDY0ICogMTAyNCkgIDw8IChleHRpZCAmIDB4MDMpOwotCQkJZXh0aWQgPj49IDI7Ci0JCQkvKiBHZXQgYnVzd2lkdGggaW5mb3JtYXRpb24gKi8KLQkJCWJ1c3cgPSAoZXh0aWQgJiAweDAxKSA/IE5BTkRfQlVTV0lEVEhfMTYgOiAwOwotCi0JCX0gZWxzZSB7Ci0JCQkvKiBPbGQgZGV2aWNlcyBoYXZlIHRoaXMgZGF0YSBoYXJkY29kZWQgaW4gdGhlCi0JCQkgKiBkZXZpY2UgaWQgdGFibGUgKi8KLQkJCW10ZC0+ZXJhc2VzaXplID0gbmFuZF9mbGFzaF9pZHNbaV0uZXJhc2VzaXplOwotCQkJbXRkLT5vb2JibG9jayA9IG5hbmRfZmxhc2hfaWRzW2ldLnBhZ2VzaXplOwotCQkJbXRkLT5vb2JzaXplID0gbXRkLT5vb2JibG9jayAvIDMyOwotCQkJYnVzdyA9IG5hbmRfZmxhc2hfaWRzW2ldLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2OwotCQl9Ci0KLQkJLyogVHJ5IHRvIGlkZW50aWZ5IG1hbnVmYWN0dXJlciAqLwotCQlmb3IgKG1hZl9pZCA9IDA7IG5hbmRfbWFudWZfaWRzW21hZl9pZF0uaWQgIT0gMHgwOyBtYWZfaWQrKykgewotCQkJaWYgKG5hbmRfbWFudWZfaWRzW21hZl9pZF0uaWQgPT0gbmFuZF9tYWZfaWQpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBDaGVjaywgaWYgYnVzd2lkdGggaXMgY29ycmVjdC4gSGFyZHdhcmUgZHJpdmVycyBzaG91bGQgc2V0Ci0JCSAqIHRoaXMgY29ycmVjdCAhICovCi0JCWlmIChidXN3ICE9ICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikpIHsKLQkJCXByaW50ayAoS0VSTl9JTkZPICJOQU5EIGRldmljZTogTWFudWZhY3R1cmVyIElEOiIKLQkJCQkiIDB4JTAyeCwgQ2hpcCBJRDogMHglMDJ4ICglcyAlcylcbiIsIG5hbmRfbWFmX2lkLCBuYW5kX2Rldl9pZCwKLQkJCQluYW5kX21hbnVmX2lkc1ttYWZfaWRdLm5hbWUgLCBtdGQtPm5hbWUpOwotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCQkiTkFORCBidXMgd2lkdGggJWQgaW5zdGVhZCAlZCBiaXRcbiIsCi0JCQkJCSh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgPyAxNiA6IDgsCi0JCQkJCWJ1c3cgPyAxNiA6IDgpOwotCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCS8qIENhbGN1bGF0ZSB0aGUgYWRkcmVzcyBzaGlmdCBmcm9tIHRoZSBwYWdlIHNpemUgKi8KLQkJdGhpcy0+cGFnZV9zaGlmdCA9IGZmcyhtdGQtPm9vYmJsb2NrKSAtIDE7Ci0JCXRoaXMtPmJidF9lcmFzZV9zaGlmdCA9IHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQgPSBmZnMobXRkLT5lcmFzZXNpemUpIC0gMTsKLQkJdGhpcy0+Y2hpcF9zaGlmdCA9IGZmcyh0aGlzLT5jaGlwc2l6ZSkgLSAxOwotCi0JCS8qIFNldCB0aGUgYmFkIGJsb2NrIHBvc2l0aW9uICovCi0JCXRoaXMtPmJhZGJsb2NrcG9zID0gbXRkLT5vb2JibG9jayA+IDUxMiA/Ci0JCQlOQU5EX0xBUkdFX0JBREJMT0NLX1BPUyA6IE5BTkRfU01BTExfQkFEQkxPQ0tfUE9TOwotCi0JCS8qIEdldCBjaGlwIG9wdGlvbnMsIHByZXNlcnZlIG5vbiBjaGlwIGJhc2VkIG9wdGlvbnMgKi8KLQkJdGhpcy0+b3B0aW9ucyAmPSB+TkFORF9DSElQT1BUSU9OU19NU0s7Ci0JCXRoaXMtPm9wdGlvbnMgfD0gbmFuZF9mbGFzaF9pZHNbaV0ub3B0aW9ucyAmIE5BTkRfQ0hJUE9QVElPTlNfTVNLOwotCQkvKiBTZXQgdGhpcyBhcyBhIGRlZmF1bHQuIEJvYXJkIGRyaXZlcnMgY2FuIG92ZXJyaWRlIGl0LCBpZiBuZWNjZWNhcnkgKi8KLQkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX05PX0FVVE9JTkNSOwotCQkvKiBDaGVjayBpZiB0aGlzIGlzIGEgbm90IGEgc2Ftc3VuZyBkZXZpY2UuIERvIG5vdCBjbGVhciB0aGUgb3B0aW9ucwotCQkgKiBmb3IgY2hpcHMgd2hpY2ggYXJlIG5vdCBoYXZpbmcgYW4gZXh0ZW5kZWQgaWQuCi0JCSAqLwotCQlpZiAobmFuZF9tYWZfaWQgIT0gTkFORF9NRlJfU0FNU1VORyAmJiAhbmFuZF9mbGFzaF9pZHNbaV0ucGFnZXNpemUpCi0JCQl0aGlzLT5vcHRpb25zICY9IH5OQU5EX1NBTVNVTkdfTFBfT1BUSU9OUzsKLQotCQkvKiBDaGVjayBmb3IgQU5EIGNoaXBzIHdpdGggNCBwYWdlIHBsYW5lcyAqLwotCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfNFBBR0VfQVJSQVkpCi0JCQl0aGlzLT5lcmFzZV9jbWQgPSBtdWx0aV9lcmFzZV9jbWQ7Ci0JCWVsc2UKLQkJCXRoaXMtPmVyYXNlX2NtZCA9IHNpbmdsZV9lcmFzZV9jbWQ7Ci0KLQkJLyogRG8gbm90IHJlcGxhY2UgdXNlciBzdXBwbGllZCBjb21tYW5kIGZ1bmN0aW9uICEgKi8KLQkJaWYgKG10ZC0+b29iYmxvY2sgPiA1MTIgJiYgdGhpcy0+Y21kZnVuYyA9PSBuYW5kX2NvbW1hbmQpCi0JCQl0aGlzLT5jbWRmdW5jID0gbmFuZF9jb21tYW5kX2xwOwotCi0JCXByaW50ayAoS0VSTl9JTkZPICJOQU5EIGRldmljZTogTWFudWZhY3R1cmVyIElEOiIKLQkJCSIgMHglMDJ4LCBDaGlwIElEOiAweCUwMnggKCVzICVzKVxuIiwgbmFuZF9tYWZfaWQsIG5hbmRfZGV2X2lkLAotCQkJbmFuZF9tYW51Zl9pZHNbbWFmX2lkXS5uYW1lICwgbmFuZF9mbGFzaF9pZHNbaV0ubmFtZSk7Ci0JCWJyZWFrOworCS8qIE1hbnkgY2FsbGVycyBnb3QgdGhpcyB3cm9uZywgc28gY2hlY2sgZm9yIGl0IGZvciBhIHdoaWxlLi4uICovCisJaWYgKCFtdGQtPm93bmVyICYmIGNhbGxlcl9pc19tb2R1bGUoKSkgeworCQlwcmludGsoS0VSTl9DUklUICJuYW5kX3NjYW4oKSBjYWxsZWQgd2l0aCBOVUxMIG10ZC0+b3duZXIhXG4iKTsKKwkJQlVHKCk7CiAJfQogCi0JaWYgKCFuYW5kX2ZsYXNoX2lkc1tpXS5uYW1lKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJObyBOQU5EIGRldmljZSBmb3VuZCEhIVxuIik7Ci0JCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwotCQlyZXR1cm4gMTsKKwkvKiBHZXQgYnVzd2lkdGggdG8gc2VsZWN0IHRoZSBjb3JyZWN0IGZ1bmN0aW9ucyAqLworCWJ1c3cgPSBjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNjsKKwkvKiBTZXQgdGhlIGRlZmF1bHQgZnVuY3Rpb25zICovCisJbmFuZF9zZXRfZGVmYXVsdHMoY2hpcCwgYnVzdyk7CisKKwkvKiBSZWFkIHRoZSBmbGFzaCB0eXBlICovCisJdHlwZSA9IG5hbmRfZ2V0X2ZsYXNoX3R5cGUobXRkLCBjaGlwLCBidXN3LCAmbmFuZF9tYWZfaWQpOworCisJaWYgKElTX0VSUih0eXBlKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBOQU5EIGRldmljZSBmb3VuZCEhIVxuIik7CisJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOworCQlyZXR1cm4gUFRSX0VSUih0eXBlKTsKIAl9CiAKLQlmb3IgKGk9MTsgaSA8IG1heGNoaXBzOyBpKyspIHsKLQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBpKTsKLQorCS8qIENoZWNrIGZvciBhIGNoaXAgYXJyYXkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgbWF4Y2hpcHM7IGkrKykgeworCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGkpOwogCQkvKiBTZW5kIHRoZSBjb21tYW5kIGZvciByZWFkaW5nIGRldmljZSBJRCAqLwotCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwotCisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFESUQsIDB4MDAsIC0xKTsKIAkJLyogUmVhZCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRHMgKi8KLQkJaWYgKG5hbmRfbWFmX2lkICE9IHRoaXMtPnJlYWRfYnl0ZShtdGQpIHx8Ci0JCSAgICBuYW5kX2Rldl9pZCAhPSB0aGlzLT5yZWFkX2J5dGUobXRkKSkKKwkJaWYgKG5hbmRfbWFmX2lkICE9IGNoaXAtPnJlYWRfYnl0ZShtdGQpIHx8CisJCSAgICB0eXBlLT5pZCAhPSBjaGlwLT5yZWFkX2J5dGUobXRkKSkKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA+IDEpCiAJCXByaW50ayhLRVJOX0lORk8gIiVkIE5BTkQgY2hpcHMgZGV0ZWN0ZWRcbiIsIGkpOwogCi0JLyogQWxsb2NhdGUgYnVmZmVycywgaWYgbmVjY2VjYXJ5ICovCi0JaWYgKCF0aGlzLT5vb2JfYnVmKSB7Ci0JCXNpemVfdCBsZW47Ci0JCWxlbiA9IG10ZC0+b29ic2l6ZSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOwotCQl0aGlzLT5vb2JfYnVmID0ga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0aGlzLT5vb2JfYnVmKSB7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3NjYW4oKTogQ2Fubm90IGFsbG9jYXRlIG9vYl9idWZcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX09PQkJVRl9BTExPQzsKLQl9Ci0KLQlpZiAoIXRoaXMtPmRhdGFfYnVmKSB7Ci0JCXNpemVfdCBsZW47Ci0JCWxlbiA9IG10ZC0+b29iYmxvY2sgKyBtdGQtPm9vYnNpemU7Ci0JCXRoaXMtPmRhdGFfYnVmID0ga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0aGlzLT5kYXRhX2J1ZikgewotCQkJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX09PQkJVRl9BTExPQykKLQkJCQlrZnJlZSAodGhpcy0+b29iX2J1Zik7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3NjYW4oKTogQ2Fubm90IGFsbG9jYXRlIGRhdGFfYnVmXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCXRoaXMtPm9wdGlvbnMgfD0gTkFORF9EQVRBQlVGX0FMTE9DOwotCX0KLQogCS8qIFN0b3JlIHRoZSBudW1iZXIgb2YgY2hpcHMgYW5kIGNhbGMgdG90YWwgc2l6ZSBmb3IgbXRkICovCi0JdGhpcy0+bnVtY2hpcHMgPSBpOwotCW10ZC0+c2l6ZSA9IGkgKiB0aGlzLT5jaGlwc2l6ZTsKLQkvKiBDb252ZXJ0IGNoaXBzaXplIHRvIG51bWJlciBvZiBwYWdlcyBwZXIgY2hpcCAtMS4gKi8KLQl0aGlzLT5wYWdlbWFzayA9ICh0aGlzLT5jaGlwc2l6ZSA+PiB0aGlzLT5wYWdlX3NoaWZ0KSAtIDE7Ci0JLyogUHJlc2V0IHRoZSBpbnRlcm5hbCBvb2IgYnVmZmVyICovCi0JbWVtc2V0KHRoaXMtPm9vYl9idWYsIDB4ZmYsIG10ZC0+b29ic2l6ZSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKTsKKwljaGlwLT5udW1jaGlwcyA9IGk7CisJbXRkLT5zaXplID0gaSAqIGNoaXAtPmNoaXBzaXplOwogCi0JLyogSWYgbm8gZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lIGlzIGdpdmVuLCBzZWxlY3QgYW4KLQkgKiBhcHByb3ByaWF0ZSBvbmUgKi8KLQlpZiAoIXRoaXMtPmF1dG9vb2IpIHsKLQkJLyogU2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBkZWZhdWx0IG9vYiBwbGFjZW1lbnQgc2NoZW1lIGZvcgotCQkgKiBwbGFjZW1lbnQgYWdub3N0aWMgZmlsZXN5c3RlbXMgKi8KKwkvKiBQcmVzZXQgdGhlIGludGVybmFsIG9vYiB3cml0ZSBidWZmZXIgKi8KKwltZW1zZXQoY2hpcC0+YnVmZmVycy5vb2J3YnVmLCAweGZmLCBtdGQtPm9vYnNpemUpOworCisJLyoKKwkgKiBJZiBubyBkZWZhdWx0IHBsYWNlbWVudCBzY2hlbWUgaXMgZ2l2ZW4sIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBvbmUKKwkgKi8KKwlpZiAoIWNoaXAtPmVjYy5sYXlvdXQpIHsKIAkJc3dpdGNoIChtdGQtPm9vYnNpemUpIHsKIAkJY2FzZSA4OgotCQkJdGhpcy0+YXV0b29vYiA9ICZuYW5kX29vYl84OworCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZuYW5kX29vYl84OwogCQkJYnJlYWs7CiAJCWNhc2UgMTY6Ci0JCQl0aGlzLT5hdXRvb29iID0gJm5hbmRfb29iXzE2OworCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZuYW5kX29vYl8xNjsKIAkJCWJyZWFrOwogCQljYXNlIDY0OgotCQkJdGhpcy0+YXV0b29vYiA9ICZuYW5kX29vYl82NDsKKwkJCWNoaXAtPmVjYy5sYXlvdXQgPSAmbmFuZF9vb2JfNjQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJObyBvb2Igc2NoZW1lIGRlZmluZWQgZm9yIG9vYnNpemUgJWRcbiIsCi0JCQkJbXRkLT5vb2JzaXplKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIG9vYiBzY2hlbWUgZGVmaW5lZCBmb3IgIgorCQkJICAgICAgICJvb2JzaXplICVkXG4iLCBtdGQtPm9vYnNpemUpOwogCQkJQlVHKCk7CiAJCX0KIAl9CiAKLQkvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBmb3IgdGhlIGZpbGVzeXN0ZW0gdG8gcGxhY2UgZnMgZGVwZW5kZW5kCi0JICogb29iIGRhdGEgKi8KLQltdGQtPm9vYmF2YWlsID0gMDsKLQlmb3IgKGkgPSAwOyB0aGlzLT5hdXRvb29iLT5vb2JmcmVlW2ldWzFdOyBpKyspCi0JCW10ZC0+b29iYXZhaWwgKz0gdGhpcy0+YXV0b29vYi0+b29iZnJlZVtpXVsxXTsKKwkvKgorCSAqIGNoZWNrIEVDQyBtb2RlLCBkZWZhdWx0IHRvIHNvZnR3YXJlIGlmIDNieXRlLzUxMmJ5dGUgaGFyZHdhcmUgRUNDIGlzCisJICogc2VsZWN0ZWQgYW5kIHdlIGhhdmUgMjU2IGJ5dGUgcGFnZXNpemUgZmFsbGJhY2sgdG8gc29mdHdhcmUgRUNDCisJICovCisJc3dpdGNoIChjaGlwLT5lY2MubW9kZSkgeworCWNhc2UgTkFORF9FQ0NfSFc6CisJCS8qIFVzZSBzdGFuZGFyZCBod2VjYyByZWFkIHBhZ2UgZnVuY3Rpb24gPyAqLworCQlpZiAoIWNoaXAtPmVjYy5yZWFkX3BhZ2UpCisJCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2VfaHdlY2M7CisJCWlmICghY2hpcC0+ZWNjLndyaXRlX3BhZ2UpCisJCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9od2VjYzsKKwkJaWYgKCFjaGlwLT5lY2MucmVhZF9vb2IpCisJCQljaGlwLT5lY2MucmVhZF9vb2IgPSBuYW5kX3JlYWRfb29iX3N0ZDsKKwkJaWYgKCFjaGlwLT5lY2Mud3JpdGVfb29iKQorCQkJY2hpcC0+ZWNjLndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iX3N0ZDsKKworCWNhc2UgTkFORF9FQ0NfSFdfU1lORFJPTUU6CisJCWlmICghY2hpcC0+ZWNjLmNhbGN1bGF0ZSB8fCAhY2hpcC0+ZWNjLmNvcnJlY3QgfHwKKwkJICAgICFjaGlwLT5lY2MuaHdjdGwpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIEVDQyBmdW5jdGlvbnMgc3VwcGxpZWQsICIKKwkJCSAgICAgICAiSGFyZHdhcmUgRUNDIG5vdCBwb3NzaWJsZVxuIik7CisJCQlCVUcoKTsKKwkJfQorCQkvKiBVc2Ugc3RhbmRhcmQgc3luZHJvbWUgcmVhZC93cml0ZSBwYWdlIGZ1bmN0aW9uID8gKi8KKwkJaWYgKCFjaGlwLT5lY2MucmVhZF9wYWdlKQorCQkJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IG5hbmRfcmVhZF9wYWdlX3N5bmRyb21lOworCQlpZiAoIWNoaXAtPmVjYy53cml0ZV9wYWdlKQorCQkJY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPSBuYW5kX3dyaXRlX3BhZ2Vfc3luZHJvbWU7CisJCWlmICghY2hpcC0+ZWNjLnJlYWRfb29iKQorCQkJY2hpcC0+ZWNjLnJlYWRfb29iID0gbmFuZF9yZWFkX29vYl9zeW5kcm9tZTsKKwkJaWYgKCFjaGlwLT5lY2Mud3JpdGVfb29iKQorCQkJY2hpcC0+ZWNjLndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iX3N5bmRyb21lOworCisJCWlmIChtdGQtPndyaXRlc2l6ZSA+PSBjaGlwLT5lY2Muc2l6ZSkKKwkJCWJyZWFrOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlZCBieXRlIEhXIEVDQyBub3QgcG9zc2libGUgb24gIgorCQkgICAgICAgIiVkIGJ5dGUgcGFnZSBzaXplLCBmYWxsYmFjayB0byBTVyBFQ0NcbiIsCisJCSAgICAgICBjaGlwLT5lY2Muc2l6ZSwgbXRkLT53cml0ZXNpemUpOworCQljaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisKKwljYXNlIE5BTkRfRUNDX1NPRlQ6CisJCWNoaXAtPmVjYy5jYWxjdWxhdGUgPSBuYW5kX2NhbGN1bGF0ZV9lY2M7CisJCWNoaXAtPmVjYy5jb3JyZWN0ID0gbmFuZF9jb3JyZWN0X2RhdGE7CisJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBuYW5kX3JlYWRfcGFnZV9zd2VjYzsKKwkJY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPSBuYW5kX3dyaXRlX3BhZ2Vfc3dlY2M7CisJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2Jfc3RkOworCQljaGlwLT5lY2Mud3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOworCQljaGlwLT5lY2Muc2l6ZSA9IDI1NjsKKwkJY2hpcC0+ZWNjLmJ5dGVzID0gMzsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfRUNDX05PTkU6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5BTkRfRUNDX05PTkUgc2VsZWN0ZWQgYnkgYm9hcmQgZHJpdmVyLiAiCisJCSAgICAgICAiVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgISFcbiIpOworCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2VfcmF3OworCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CisJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2Jfc3RkOworCQljaGlwLT5lY2Mud3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOworCQljaGlwLT5lY2Muc2l6ZSA9IG10ZC0+d3JpdGVzaXplOworCQljaGlwLT5lY2MuYnl0ZXMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIE5BTkRfRUNDX01PREUgJWRcbiIsCisJCSAgICAgICBjaGlwLT5lY2MubW9kZSk7CisJCUJVRygpOworCX0KIAogCS8qCi0JICogY2hlY2sgRUNDIG1vZGUsIGRlZmF1bHQgdG8gc29mdHdhcmUKLQkgKiBpZiAzYnl0ZS81MTJieXRlIGhhcmR3YXJlIEVDQyBpcyBzZWxlY3RlZCBhbmQgd2UgaGF2ZSAyNTYgYnl0ZSBwYWdlc2l6ZQotCSAqIGZhbGxiYWNrIHRvIHNvZnR3YXJlIEVDQwotCSovCi0JdGhpcy0+ZWNjc2l6ZSA9IDI1NjsJLyogc2V0IGRlZmF1bHQgZWNjc2l6ZSAqLwotCXRoaXMtPmVjY2J5dGVzID0gMzsKKwkgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBmb3IgYSBjbGllbnQgdG8gcGxhY2UgZGF0YSBpbnRvCisJICogdGhlIG91dCBvZiBiYW5kIGFyZWEKKwkgKi8KKwljaGlwLT5lY2MubGF5b3V0LT5vb2JhdmFpbCA9IDA7CisJZm9yIChpID0gMDsgY2hpcC0+ZWNjLmxheW91dC0+b29iZnJlZVtpXS5sZW5ndGg7IGkrKykKKwkJY2hpcC0+ZWNjLmxheW91dC0+b29iYXZhaWwgKz0KKwkJCWNoaXAtPmVjYy5sYXlvdXQtPm9vYmZyZWVbaV0ubGVuZ3RoOwogCi0Jc3dpdGNoICh0aGlzLT5lY2Ntb2RlKSB7Ci0JY2FzZSBOQU5EX0VDQ19IVzEyXzIwNDg6Ci0JCWlmIChtdGQtPm9vYmJsb2NrIDwgMjA0OCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiMjA0OCBieXRlIEhXIEVDQyBub3QgcG9zc2libGUgb24gJWQgYnl0ZSBwYWdlIHNpemUsIGZhbGxiYWNrIHRvIFNXIEVDQ1xuIiwKLQkJCSAgICAgICBtdGQtPm9vYmJsb2NrKTsKLQkJCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOwotCQkJdGhpcy0+Y2FsY3VsYXRlX2VjYyA9IG5hbmRfY2FsY3VsYXRlX2VjYzsKLQkJCXRoaXMtPmNvcnJlY3RfZGF0YSA9IG5hbmRfY29ycmVjdF9kYXRhOwotCQl9IGVsc2UKLQkJCXRoaXMtPmVjY3NpemUgPSAyMDQ4OwotCQlicmVhazsKLQotCWNhc2UgTkFORF9FQ0NfSFczXzUxMjoKLQljYXNlIE5BTkRfRUNDX0hXNl81MTI6Ci0JY2FzZSBOQU5EX0VDQ19IVzhfNTEyOgotCQlpZiAobXRkLT5vb2JibG9jayA9PSAyNTYpIHsKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICI1MTIgYnl0ZSBIVyBFQ0Mgbm90IHBvc3NpYmxlIG9uIDI1NiBCeXRlIHBhZ2VzaXplLCBmYWxsYmFjayB0byBTVyBFQ0MgXG4iKTsKLQkJCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOwotCQkJdGhpcy0+Y2FsY3VsYXRlX2VjYyA9IG5hbmRfY2FsY3VsYXRlX2VjYzsKLQkJCXRoaXMtPmNvcnJlY3RfZGF0YSA9IG5hbmRfY29ycmVjdF9kYXRhOwotCQl9IGVsc2UKLQkJCXRoaXMtPmVjY3NpemUgPSA1MTI7IC8qIHNldCBlY2NzaXplIHRvIDUxMiAqLwotCQlicmVhazsKLQotCWNhc2UgTkFORF9FQ0NfSFczXzI1NjoKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfRUNDX05PTkU6Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJOQU5EX0VDQ19OT05FIHNlbGVjdGVkIGJ5IGJvYXJkIGRyaXZlci4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgISFcbiIpOwotCQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfTk9ORTsKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfRUNDX1NPRlQ6Ci0JCXRoaXMtPmNhbGN1bGF0ZV9lY2MgPSBuYW5kX2NhbGN1bGF0ZV9lY2M7Ci0JCXRoaXMtPmNvcnJlY3RfZGF0YSA9IG5hbmRfY29ycmVjdF9kYXRhOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJJbnZhbGlkIE5BTkRfRUNDX01PREUgJWRcbiIsIHRoaXMtPmVjY21vZGUpOworCS8qCisJICogU2V0IHRoZSBudW1iZXIgb2YgcmVhZCAvIHdyaXRlIHN0ZXBzIGZvciBvbmUgcGFnZSBkZXBlbmRpbmcgb24gRUNDCisJICogbW9kZQorCSAqLworCWNoaXAtPmVjYy5zdGVwcyA9IG10ZC0+d3JpdGVzaXplIC8gY2hpcC0+ZWNjLnNpemU7CisJaWYoY2hpcC0+ZWNjLnN0ZXBzICogY2hpcC0+ZWNjLnNpemUgIT0gbXRkLT53cml0ZXNpemUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCBlY2MgcGFyYW1ldGVyc1xuIik7CiAJCUJVRygpOwogCX0KKwljaGlwLT5lY2MudG90YWwgPSBjaGlwLT5lY2Muc3RlcHMgKiBjaGlwLT5lY2MuYnl0ZXM7CiAKLQkvKiBDaGVjayBoYXJkd2FyZSBlY2MgZnVuY3Rpb24gYXZhaWxhYmlsaXR5IGFuZCBhZGp1c3QgbnVtYmVyIG9mIGVjYyBieXRlcyBwZXIKLQkgKiBjYWxjdWxhdGlvbiBzdGVwCi0JKi8KLQlzd2l0Y2ggKHRoaXMtPmVjY21vZGUpIHsKLQljYXNlIE5BTkRfRUNDX0hXMTJfMjA0ODoKLQkJdGhpcy0+ZWNjYnl0ZXMgKz0gNDsKLQljYXNlIE5BTkRfRUNDX0hXOF81MTI6Ci0JCXRoaXMtPmVjY2J5dGVzICs9IDI7Ci0JY2FzZSBOQU5EX0VDQ19IVzZfNTEyOgotCQl0aGlzLT5lY2NieXRlcyArPSAzOwotCWNhc2UgTkFORF9FQ0NfSFczXzUxMjoKLQljYXNlIE5BTkRfRUNDX0hXM18yNTY6Ci0JCWlmICh0aGlzLT5jYWxjdWxhdGVfZWNjICYmIHRoaXMtPmNvcnJlY3RfZGF0YSAmJiB0aGlzLT5lbmFibGVfaHdlY2MpCi0JCQlicmVhazsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIk5vIEVDQyBmdW5jdGlvbnMgc3VwcGxpZWQsIEhhcmR3YXJlIEVDQyBub3QgcG9zc2libGVcbiIpOwotCQlCVUcoKTsKLQl9Ci0KLQltdGQtPmVjY3NpemUgPSB0aGlzLT5lY2NzaXplOwotCi0JLyogU2V0IHRoZSBudW1iZXIgb2YgcmVhZCAvIHdyaXRlIHN0ZXBzIGZvciBvbmUgcGFnZSB0byBlbnN1cmUgRUNDIGdlbmVyYXRpb24gKi8KLQlzd2l0Y2ggKHRoaXMtPmVjY21vZGUpIHsKLQljYXNlIE5BTkRfRUNDX0hXMTJfMjA0ODoKLQkJdGhpcy0+ZWNjc3RlcHMgPSBtdGQtPm9vYmJsb2NrIC8gMjA0ODsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0VDQ19IVzNfNTEyOgotCWNhc2UgTkFORF9FQ0NfSFc2XzUxMjoKLQljYXNlIE5BTkRfRUNDX0hXOF81MTI6Ci0JCXRoaXMtPmVjY3N0ZXBzID0gbXRkLT5vb2JibG9jayAvIDUxMjsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0VDQ19IVzNfMjU2OgotCWNhc2UgTkFORF9FQ0NfU09GVDoKLQkJdGhpcy0+ZWNjc3RlcHMgPSBtdGQtPm9vYmJsb2NrIC8gMjU2OwotCQlicmVhazsKLQotCWNhc2UgTkFORF9FQ0NfTk9ORToKLQkJdGhpcy0+ZWNjc3RlcHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIHN0YXRlLCB3YWl0cXVldWUgYW5kIHNwaW5sb2NrICovCi0JdGhpcy0+c3RhdGUgPSBGTF9SRUFEWTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmdGhpcy0+d3EpOwotCXNwaW5fbG9ja19pbml0ICgmdGhpcy0+Y2hpcF9sb2NrKTsKKwkvKiBJbml0aWFsaXplIHN0YXRlICovCisJY2hpcC0+c3RhdGUgPSBGTF9SRUFEWTsKIAogCS8qIERlLXNlbGVjdCB0aGUgZGV2aWNlICovCi0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CiAKIAkvKiBJbnZhbGlkYXRlIHRoZSBwYWdlYnVmZmVyIHJlZmVyZW5jZSAqLwotCXRoaXMtPnBhZ2VidWYgPSAtMTsKKwljaGlwLT5wYWdlYnVmID0gLTE7CiAKIAkvKiBGaWxsIGluIHJlbWFpbmluZyBNVEQgZHJpdmVyIGRhdGEgKi8KIAltdGQtPnR5cGUgPSBNVERfTkFOREZMQVNIOwotCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX05BTkRGTEFTSCB8IE1URF9FQ0M7CisJbXRkLT5mbGFncyA9IE1URF9DQVBfTkFOREZMQVNIOwogCW10ZC0+ZWNjdHlwZSA9IE1URF9FQ0NfU1c7CiAJbXRkLT5lcmFzZSA9IG5hbmRfZXJhc2U7CiAJbXRkLT5wb2ludCA9IE5VTEw7CiAJbXRkLT51bnBvaW50ID0gTlVMTDsKIAltdGQtPnJlYWQgPSBuYW5kX3JlYWQ7CiAJbXRkLT53cml0ZSA9IG5hbmRfd3JpdGU7Ci0JbXRkLT5yZWFkX2VjYyA9IG5hbmRfcmVhZF9lY2M7Ci0JbXRkLT53cml0ZV9lY2MgPSBuYW5kX3dyaXRlX2VjYzsKIAltdGQtPnJlYWRfb29iID0gbmFuZF9yZWFkX29vYjsKIAltdGQtPndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iOwotCW10ZC0+cmVhZHYgPSBOVUxMOwotCW10ZC0+d3JpdGV2ID0gbmFuZF93cml0ZXY7Ci0JbXRkLT53cml0ZXZfZWNjID0gbmFuZF93cml0ZXZfZWNjOwogCW10ZC0+c3luYyA9IG5hbmRfc3luYzsKIAltdGQtPmxvY2sgPSBOVUxMOwogCW10ZC0+dW5sb2NrID0gTlVMTDsKQEAgLTI2OTIsNDcgKzI0OTAsMzggQEAKIAltdGQtPmJsb2NrX2lzYmFkID0gbmFuZF9ibG9ja19pc2JhZDsKIAltdGQtPmJsb2NrX21hcmtiYWQgPSBuYW5kX2Jsb2NrX21hcmtiYWQ7CiAKLQkvKiBhbmQgbWFrZSB0aGUgYXV0b29vYiB0aGUgZGVmYXVsdCBvbmUgKi8KLQltZW1jcHkoJm10ZC0+b29iaW5mbywgdGhpcy0+YXV0b29vYiwgc2l6ZW9mKG10ZC0+b29iaW5mbykpOwotCi0JbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCS8qIHByb3BhZ2F0ZSBlY2MubGF5b3V0IHRvIG10ZF9pbmZvICovCisJbXRkLT5lY2NsYXlvdXQgPSBjaGlwLT5lY2MubGF5b3V0OwogCiAJLyogQ2hlY2ssIGlmIHdlIHNob3VsZCBza2lwIHRoZSBiYWQgYmxvY2sgdGFibGUgc2NhbiAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9TS0lQX0JCVFNDQU4pCisJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1NLSVBfQkJUU0NBTikKIAkJcmV0dXJuIDA7CiAKIAkvKiBCdWlsZCBiYWQgYmxvY2sgdGFibGUgKi8KLQlyZXR1cm4gdGhpcy0+c2Nhbl9iYnQgKG10ZCk7CisJcmV0dXJuIGNoaXAtPnNjYW5fYmJ0KG10ZCk7CiB9CiAKIC8qKgogICogbmFuZF9yZWxlYXNlIC0gW05BTkQgSW50ZXJmYWNlXSBGcmVlIHJlc291cmNlcyBoZWxkIGJ5IHRoZSBOQU5EIGRldmljZQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICovCi12b2lkIG5hbmRfcmVsZWFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQpCit2b2lkIG5hbmRfcmVsZWFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAkvKiBEZXJlZ2lzdGVyIHBhcnRpdGlvbnMgKi8KLQlkZWxfbXRkX3BhcnRpdGlvbnMgKG10ZCk7CisJZGVsX210ZF9wYXJ0aXRpb25zKG10ZCk7CiAjZW5kaWYKIAkvKiBEZXJlZ2lzdGVyIHRoZSBkZXZpY2UgKi8KLQlkZWxfbXRkX2RldmljZSAobXRkKTsKKwlkZWxfbXRkX2RldmljZShtdGQpOwogCiAJLyogRnJlZSBiYWQgYmxvY2sgdGFibGUgbWVtb3J5ICovCi0Ja2ZyZWUgKHRoaXMtPmJidCk7Ci0JLyogQnVmZmVyIGFsbG9jYXRlZCBieSBuYW5kX3NjYW4gPyAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9PT0JCVUZfQUxMT0MpCi0JCWtmcmVlICh0aGlzLT5vb2JfYnVmKTsKLQkvKiBCdWZmZXIgYWxsb2NhdGVkIGJ5IG5hbmRfc2NhbiA/ICovCi0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0RBVEFCVUZfQUxMT0MpCi0JCWtmcmVlICh0aGlzLT5kYXRhX2J1Zik7CisJa2ZyZWUoY2hpcC0+YmJ0KTsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwgKG5hbmRfc2Nhbik7Ci1FWFBPUlRfU1lNQk9MX0dQTCAobmFuZF9yZWxlYXNlKTsKLQorRVhQT1JUX1NZTUJPTF9HUEwobmFuZF9zY2FuKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5hbmRfcmVsZWFzZSk7CiAKIHN0YXRpYyBpbnQgX19pbml0IG5hbmRfYmFzZV9pbml0KHZvaWQpCiB7CkBAIC0yNzQ4LDYgKzI1MzcsNiBAQAogbW9kdWxlX2luaXQobmFuZF9iYXNlX2luaXQpOwogbW9kdWxlX2V4aXQobmFuZF9iYXNlX2V4aXQpOwogCi1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOwotTU9EVUxFX0FVVEhPUiAoIlN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPiwgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJHZW5lcmljIE5BTkQgZmxhc2ggZHJpdmVyIGNvZGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPiwgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgTkFORCBmbGFzaCBkcml2ZXIgY29kZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jCmluZGV4IGNhMjg2OTkuLmE2MTJjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICAqCiAgKiBGb2xsb3dpbmcgYXNzdW1wdGlvbnMgYXJlIG1hZGU6CiAgKiAtIGJidHMgc3RhcnQgYXQgYSBwYWdlIGJvdW5kYXJ5LCBpZiBhdXRvbG9jYXRlZCBvbiBhIGJsb2NrIGJvdW5kYXJ5Ci0gKiAtIHRoZSBzcGFjZSBuZWNjZWNhcnkgZm9yIGEgYmJ0IGluIEZMQVNIIGRvZXMgbm90IGV4Y2VlZCBhIGJsb2NrIGJvdW5kYXJ5CisgKiAtIHRoZSBzcGFjZSBuZWNlc3NhcnkgZm9yIGEgYmJ0IGluIEZMQVNIIGRvZXMgbm90IGV4Y2VlZCBhIGJsb2NrIGJvdW5kYXJ5CiAgKgogICovCiAKQEAgLTYwLDcgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogLyoqCiAgKiBjaGVja19wYXR0ZXJuIC0gW0dFTkVSSUNdIGNoZWNrIGlmIGEgcGF0dGVybiBpcyBpbiB0aGUgYnVmZmVyCkBAIC03NSw3ICs3NSw3IEBACiAgKiBwYXR0ZXJuIGFyZWEgY29udGFpbiAweGZmCiAgKgogKi8KLXN0YXRpYyBpbnQgY2hlY2tfcGF0dGVybiAodWludDhfdCAqYnVmLCBpbnQgbGVuLCBpbnQgcGFnbGVuLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkKQorc3RhdGljIGludCBjaGVja19wYXR0ZXJuKHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbiwgaW50IHBhZ2xlbiwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKIHsKIAlpbnQgaSwgZW5kID0gMDsKIAl1aW50OF90ICpwID0gYnVmOwpAQCAtMTE2LDcgKzExNiw3IEBACiAgKiBubyBvcHRpb25hbCBlbXB0eSBjaGVjawogICoKICovCi1zdGF0aWMgaW50IGNoZWNrX3Nob3J0X3BhdHRlcm4gKHVpbnQ4X3QgKmJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKK3N0YXRpYyBpbnQgY2hlY2tfc2hvcnRfcGF0dGVybih1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCiB7CiAJaW50IGk7CiAJdWludDhfdCAqcCA9IGJ1ZjsKQEAgLTE0Miw4ICsxNDIsOCBAQAogICogUmVhZCB0aGUgYmFkIGJsb2NrIHRhYmxlIHN0YXJ0aW5nIGZyb20gcGFnZS4KICAqCiAgKi8KLXN0YXRpYyBpbnQgcmVhZF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBwYWdlLCBpbnQgbnVtLAotCWludCBiaXRzLCBpbnQgb2ZmcywgaW50IHJlc2VydmVkX2Jsb2NrX2NvZGUpCitzdGF0aWMgaW50IHJlYWRfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBwYWdlLCBpbnQgbnVtLAorCQkgICAgaW50IGJpdHMsIGludCBvZmZzLCBpbnQgcmVzZXJ2ZWRfYmxvY2tfY29kZSkKIHsKIAlpbnQgcmVzLCBpLCBqLCBhY3QgPSAwOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CkBAIC0xNTIsMTcgKzE1MiwxNyBAQAogCXVpbnQ4X3QgbXNrID0gKHVpbnQ4X3QpICgoMSA8PCBiaXRzKSAtIDEpOwogCiAJdG90bGVuID0gKG51bSAqIGJpdHMpID4+IDM7Ci0JZnJvbSA9ICgobG9mZl90KXBhZ2UpIDw8IHRoaXMtPnBhZ2Vfc2hpZnQ7CisJZnJvbSA9ICgobG9mZl90KSBwYWdlKSA8PCB0aGlzLT5wYWdlX3NoaWZ0OwogCiAJd2hpbGUgKHRvdGxlbikgewotCQlsZW4gPSBtaW4gKHRvdGxlbiwgKHNpemVfdCkgKDEgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KSk7Ci0JCXJlcyA9IG10ZC0+cmVhZF9lY2MgKG10ZCwgZnJvbSwgbGVuLCAmcmV0bGVuLCBidWYsIE5VTEwsIHRoaXMtPmF1dG9vb2IpOworCQlsZW4gPSBtaW4odG90bGVuLCAoc2l6ZV90KSAoMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpKTsKKwkJcmVzID0gbXRkLT5yZWFkKG10ZCwgZnJvbSwgbGVuLCAmcmV0bGVuLCBidWYpOwogCQlpZiAocmVzIDwgMCkgewogCQkJaWYgKHJldGxlbiAhPSBsZW4pIHsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyAibmFuZF9iYnQ6IEVycm9yIHJlYWRpbmcgYmFkIGJsb2NrIHRhYmxlXG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJuYW5kX2JidDogRXJyb3IgcmVhZGluZyBiYWQgYmxvY2sgdGFibGVcbiIpOwogCQkJCXJldHVybiByZXM7CiAJCQl9Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAibmFuZF9iYnQ6IEVDQyBlcnJvciB3aGlsZSByZWFkaW5nIGJhZCBibG9jayB0YWJsZVxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRUNDIGVycm9yIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrIHRhYmxlXG4iKTsKIAkJfQogCiAJCS8qIEFuYWx5c2UgZGF0YSAqLwpAQCAtMTcyLDIyICsxNzIsMjMgQEAKIAkJCQl1aW50OF90IHRtcCA9IChkYXQgPj4gaikgJiBtc2s7CiAJCQkJaWYgKHRtcCA9PSBtc2spCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChyZXNlcnZlZF9ibG9ja19jb2RlICYmCi0JCQkJICAgICh0bXAgPT0gcmVzZXJ2ZWRfYmxvY2tfY29kZSkpIHsKLQkJCQkJcHJpbnRrIChLRVJOX0RFQlVHICJuYW5kX3JlYWRfYmJ0OiBSZXNlcnZlZCBibG9jayBhdCAweCUwOHhcbiIsCi0JCQkJCQkoKG9mZnMgPDwgMikgKyAoYWN0ID4+IDEpKSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOworCQkJCWlmIChyZXNlcnZlZF9ibG9ja19jb2RlICYmICh0bXAgPT0gcmVzZXJ2ZWRfYmxvY2tfY29kZSkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIm5hbmRfcmVhZF9iYnQ6IFJlc2VydmVkIGJsb2NrIGF0IDB4JTA4eFxuIiwKKwkJCQkJICAgICAgICgob2ZmcyA8PCAyKSArIChhY3QgPj4gMSkpIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJCQkJCXRoaXMtPmJidFtvZmZzICsgKGFjdCA+PiAzKV0gfD0gMHgyIDw8IChhY3QgJiAweDA2KTsKKwkJCQkJbXRkLT5lY2Nfc3RhdHMuYmJ0YmxvY2tzKys7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCQkvKiBMZWF2ZSBpdCBmb3Igbm93LCBpZiBpdHMgbWF0dXJlZCB3ZSBjYW4gbW92ZSB0aGlzCiAJCQkJICogbWVzc2FnZSB0byBNVERfREVCVUdfTEVWRUwwICovCi0JCQkJcHJpbnRrIChLRVJOX0RFQlVHICJuYW5kX3JlYWRfYmJ0OiBCYWQgYmxvY2sgYXQgMHglMDh4XG4iLAotCQkJCQkoKG9mZnMgPDwgMikgKyAoYWN0ID4+IDEpKSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJuYW5kX3JlYWRfYmJ0OiBCYWQgYmxvY2sgYXQgMHglMDh4XG4iLAorCQkJCSAgICAgICAoKG9mZnMgPDwgMikgKyAoYWN0ID4+IDEpKSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOwogCQkJCS8qIEZhY3RvcnkgbWFya2VkIGJhZCBvciB3b3JuIG91dCA/ICovCiAJCQkJaWYgKHRtcCA9PSAwKQogCQkJCQl0aGlzLT5iYnRbb2ZmcyArIChhY3QgPj4gMyldIHw9IDB4MyA8PCAoYWN0ICYgMHgwNik7CiAJCQkJZWxzZQogCQkJCQl0aGlzLT5iYnRbb2ZmcyArIChhY3QgPj4gMyldIHw9IDB4MSA8PCAoYWN0ICYgMHgwNik7CisJCQkJbXRkLT5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CiAJCQl9CiAJCX0KIAkJdG90bGVuIC09IGxlbjsKQEAgLTIwNyw3ICsyMDgsNyBAQAogICogUmVhZCB0aGUgYmFkIGJsb2NrIHRhYmxlIGZvciBhbGwgY2hpcHMgc3RhcnRpbmcgYXQgYSBnaXZlbiBwYWdlCiAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgYmJ0IGJpdHMgYXJlIGluIGNvbnNlY3V0aXZlIG9yZGVyLgogKi8KLXN0YXRpYyBpbnQgcmVhZF9hYnNfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBpbnQgY2hpcCkKK3N0YXRpYyBpbnQgcmVhZF9hYnNfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsIGludCBjaGlwKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHJlcyA9IDAsIGk7CkBAIC0yMzEsNiArMjMyLDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBTY2FuIHJlYWQgcmF3IGRhdGEgZnJvbSBmbGFzaAorICovCitzdGF0aWMgaW50IHNjYW5fcmVhZF9yYXcoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgbG9mZl90IG9mZnMsCisJCQkgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1JBVzsKKwlvcHMub29ib2ZmcyA9IDA7CisJb3BzLm9vYmxlbiA9IG10ZC0+b29ic2l6ZTsKKwlvcHMub29iYnVmID0gYnVmOworCW9wcy5kYXRidWYgPSBidWY7CisJb3BzLmxlbiA9IGxlbjsKKworCXJldHVybiBtdGQtPnJlYWRfb29iKG10ZCwgb2ZmcywgJm9wcyk7Cit9CisKKy8qCisgKiBTY2FuIHdyaXRlIGRhdGEgd2l0aCBvb2IgdG8gZmxhc2gKKyAqLworc3RhdGljIGludCBzY2FuX3dyaXRlX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCQkgIHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqb29iKQoreworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisJb3BzLm9vYm9mZnMgPSAwOworCW9wcy5vb2JsZW4gPSBtdGQtPm9vYnNpemU7CisJb3BzLmRhdGJ1ZiA9IGJ1ZjsKKwlvcHMub29iYnVmID0gb29iOworCW9wcy5sZW4gPSBsZW47CisKKwlyZXR1cm4gbXRkLT53cml0ZV9vb2IobXRkLCBvZmZzLCAmb3BzKTsKK30KKwogLyoqCiAgKiByZWFkX2Fic19iYnRzIC0gW0dFTkVSSUNdIFJlYWQgdGhlIGJhZCBibG9jayB0YWJsZShzKSBmb3IgYWxsIGNoaXBzIHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gcGFnZQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTI0MiwyOCArMjc5LDg1IEBACiAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgYmJ0IGJpdHMgYXJlIGluIGNvbnNlY3V0aXZlIG9yZGVyLgogICoKICovCi1zdGF0aWMgaW50IHJlYWRfYWJzX2JidHMgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsCi0Jc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCkKK3N0YXRpYyBpbnQgcmVhZF9hYnNfYmJ0cyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLAorCQkJIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqbWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAogCS8qIFJlYWQgdGhlIHByaW1hcnkgdmVyc2lvbiwgaWYgYXZhaWxhYmxlICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikgewotCQluYW5kX3JlYWRfcmF3IChtdGQsIGJ1ZiwgdGQtPnBhZ2VzWzBdIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsIG10ZC0+b29iYmxvY2ssIG10ZC0+b29ic2l6ZSk7Ci0JCXRkLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+b29iYmxvY2sgKyB0ZC0+dmVyb2Zmc107Ci0JCXByaW50ayAoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLCB0ZC0+cGFnZXNbMF0sIHRkLT52ZXJzaW9uWzBdKTsKKwkJc2Nhbl9yZWFkX3JhdyhtdGQsIGJ1ZiwgdGQtPnBhZ2VzWzBdIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsCisJCQkgICAgICBtdGQtPndyaXRlc2l6ZSk7CisJCXRkLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+d3JpdGVzaXplICsgdGQtPnZlcm9mZnNdOworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLAorCQkgICAgICAgdGQtPnBhZ2VzWzBdLCB0ZC0+dmVyc2lvblswXSk7CiAJfQogCiAJLyogUmVhZCB0aGUgbWlycm9yIHZlcnNpb24sIGlmIGF2YWlsYWJsZSAqLwogCWlmIChtZCAmJiAobWQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKSkgewotCQluYW5kX3JlYWRfcmF3IChtdGQsIGJ1ZiwgbWQtPnBhZ2VzWzBdIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsIG10ZC0+b29iYmxvY2ssIG10ZC0+b29ic2l6ZSk7Ci0JCW1kLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+b29iYmxvY2sgKyBtZC0+dmVyb2Zmc107Ci0JCXByaW50ayAoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLCBtZC0+cGFnZXNbMF0sIG1kLT52ZXJzaW9uWzBdKTsKKwkJc2Nhbl9yZWFkX3JhdyhtdGQsIGJ1ZiwgbWQtPnBhZ2VzWzBdIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsCisJCQkgICAgICBtdGQtPndyaXRlc2l6ZSk7CisJCW1kLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+d3JpdGVzaXplICsgbWQtPnZlcm9mZnNdOworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLAorCQkgICAgICAgbWQtPnBhZ2VzWzBdLCBtZC0+dmVyc2lvblswXSk7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKKy8qCisgKiBTY2FuIGEgZ2l2ZW4gYmxvY2sgZnVsbAorICovCitzdGF0aWMgaW50IHNjYW5fYmxvY2tfZnVsbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCwKKwkJCSAgIGxvZmZfdCBvZmZzLCB1aW50OF90ICpidWYsIHNpemVfdCByZWFkbGVuLAorCQkJICAgaW50IHNjYW5sZW4sIGludCBsZW4pCit7CisJaW50IHJldCwgajsKKworCXJldCA9IHNjYW5fcmVhZF9yYXcobXRkLCBidWYsIG9mZnMsIHJlYWRsZW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyssIGJ1ZiArPSBzY2FubGVuKSB7CisJCWlmIChjaGVja19wYXR0ZXJuKGJ1Ziwgc2NhbmxlbiwgbXRkLT53cml0ZXNpemUsIGJkKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNjYW4gYSBnaXZlbiBibG9jayBwYXJ0aWFsbHkKKyAqLworc3RhdGljIGludCBzY2FuX2Jsb2NrX2Zhc3Qoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQsCisJCQkgICBsb2ZmX3Qgb2ZmcywgdWludDhfdCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisJaW50IGosIHJldDsKKworCW9wcy5sZW4gPSBtdGQtPm9vYnNpemU7CisJb3BzLm9vYmxlbiA9IG10ZC0+b29ic2l6ZTsKKwlvcHMub29iYnVmID0gYnVmOworCW9wcy5vb2JvZmZzID0gMDsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisKKwlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKKwkJLyoKKwkJICogUmVhZCB0aGUgZnVsbCBvb2IgdW50aWwgcmVhZF9vb2IgaXMgZml4ZWQgdG8KKwkJICogaGFuZGxlIHNpbmdsZSBieXRlIHJlYWRzIGZvciAxNiBiaXQKKwkJICogYnVzd2lkdGgKKwkJICovCisJCXJldCA9IG10ZC0+cmVhZF9vb2IobXRkLCBvZmZzLCAmb3BzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKGNoZWNrX3Nob3J0X3BhdHRlcm4oYnVmLCBiZCkpCisJCQlyZXR1cm4gMTsKKworCQlvZmZzICs9IG10ZC0+d3JpdGVzaXplOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBjcmVhdGVfYmJ0IC0gW0dFTkVSSUNdIENyZWF0ZSBhIGJhZCBibG9jayB0YWJsZSBieSBzY2FubmluZyB0aGUgZGV2aWNlCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQpAQCAtMjc1LDE1ICszNjksMTYgQEAKICAqIENyZWF0ZSBhIGJhZCBibG9jayB0YWJsZSBieSBzY2FubmluZyB0aGUgZGV2aWNlCiAgKiBmb3IgdGhlIGdpdmVuIGdvb2QvYmFkIGJsb2NrIGlkZW50aWZ5IHBhdHRlcm4KICAqLwotc3RhdGljIGludCBjcmVhdGVfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkLCBpbnQgY2hpcCkKK3N0YXRpYyBpbnQgY3JlYXRlX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLAorCXN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQsIGludCBjaGlwKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IGksIGosIG51bWJsb2NrcywgbGVuLCBzY2FubGVuOworCWludCBpLCBudW1ibG9ja3MsIGxlbiwgc2NhbmxlbjsKIAlpbnQgc3RhcnRibG9jazsKIAlsb2ZmX3QgZnJvbTsKLQlzaXplX3QgcmVhZGxlbiwgb29ibGVuOworCXNpemVfdCByZWFkbGVuOwogCi0JcHJpbnRrIChLRVJOX0lORk8gIlNjYW5uaW5nIGRldmljZSBmb3IgYmFkIGJsb2Nrc1xuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiU2Nhbm5pbmcgZGV2aWNlIGZvciBiYWQgYmxvY2tzXG4iKTsKIAogCWlmIChiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5BTExQQUdFUykKIAkJbGVuID0gMSA8PCAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7CkBAIC0yOTYsMjUgKzM5MSwyNCBAQAogCiAJaWYgKCEoYmQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FORU1QVFkpKSB7CiAJCS8qIFdlIG5lZWQgb25seSByZWFkIGZldyBieXRlcyBmcm9tIHRoZSBPT0IgYXJlYSAqLwotCQlzY2FubGVuID0gb29ibGVuID0gMDsKKwkJc2NhbmxlbiA9IDA7CiAJCXJlYWRsZW4gPSBiZC0+bGVuOwogCX0gZWxzZSB7CiAJCS8qIEZ1bGwgcGFnZSBjb250ZW50IHNob3VsZCBiZSByZWFkICovCi0JCXNjYW5sZW4JPSBtdGQtPm9vYmJsb2NrICsgbXRkLT5vb2JzaXplOwotCQlyZWFkbGVuID0gbGVuICogbXRkLT5vb2JibG9jazsKLQkJb29ibGVuID0gbGVuICogbXRkLT5vb2JzaXplOworCQlzY2FubGVuID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7CisJCXJlYWRsZW4gPSBsZW4gKiBtdGQtPndyaXRlc2l6ZTsKIAl9CiAKIAlpZiAoY2hpcCA9PSAtMSkgewotCQkvKiBOb3RlIHRoYXQgbnVtYmxvY2tzIGlzIDIgKiAocmVhbCBudW1ibG9ja3MpIGhlcmUsIHNlZSBpKz0yIGJlbG93IGFzIGl0Ci0JCSAqIG1ha2VzIHNoaWZ0aW5nIGFuZCBtYXNraW5nIGxlc3MgcGFpbmZ1bCAqLworCQkvKiBOb3RlIHRoYXQgbnVtYmxvY2tzIGlzIDIgKiAocmVhbCBudW1ibG9ja3MpIGhlcmUsIHNlZSBpKz0yCisJCSAqIGJlbG93IGFzIGl0IG1ha2VzIHNoaWZ0aW5nIGFuZCBtYXNraW5nIGxlc3MgcGFpbmZ1bCAqLwogCQludW1ibG9ja3MgPSBtdGQtPnNpemUgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpOwogCQlzdGFydGJsb2NrID0gMDsKIAkJZnJvbSA9IDA7CiAJfSBlbHNlIHsKIAkJaWYgKGNoaXAgPj0gdGhpcy0+bnVtY2hpcHMpIHsKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJjcmVhdGVfYmJ0KCk6IGNoaXBuciAoJWQpID4gYXZhaWxhYmxlIGNoaXBzICglZClcbiIsCi0JCQkJY2hpcCArIDEsIHRoaXMtPm51bWNoaXBzKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNyZWF0ZV9iYnQoKTogY2hpcG5yICglZCkgPiBhdmFpbGFibGUgY2hpcHMgKCVkKVxuIiwKKwkJCSAgICAgICBjaGlwICsgMSwgdGhpcy0+bnVtY2hpcHMpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJbnVtYmxvY2tzID0gdGhpcy0+Y2hpcHNpemUgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpOwpAQCAtMzI2LDM2ICs0MjAsMjIgQEAKIAlmb3IgKGkgPSBzdGFydGJsb2NrOyBpIDwgbnVtYmxvY2tzOykgewogCQlpbnQgcmV0OwogCi0JCWlmIChiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5FTVBUWSkKLQkJCWlmICgocmV0ID0gbmFuZF9yZWFkX3JhdyAobXRkLCBidWYsIGZyb20sIHJlYWRsZW4sIG9vYmxlbikpKQotCQkJCXJldHVybiByZXQ7CisJCWlmIChiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5BTExQQUdFUykKKwkJCXJldCA9IHNjYW5fYmxvY2tfZnVsbChtdGQsIGJkLCBmcm9tLCBidWYsIHJlYWRsZW4sCisJCQkJCSAgICAgIHNjYW5sZW4sIGxlbik7CisJCWVsc2UKKwkJCXJldCA9IHNjYW5fYmxvY2tfZmFzdChtdGQsIGJkLCBmcm9tLCBidWYsIGxlbik7CiAKLQkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7Ci0JCQlpZiAoIShiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5FTVBUWSkpIHsKLQkJCQlzaXplX3QgcmV0bGVuOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CiAKLQkJCQkvKiBSZWFkIHRoZSBmdWxsIG9vYiB1bnRpbCByZWFkX29vYiBpcyBmaXhlZCB0bwotCQkJCSAqIGhhbmRsZSBzaW5nbGUgYnl0ZSByZWFkcyBmb3IgMTYgYml0IGJ1c3dpZHRoICovCi0JCQkJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIGZyb20gKyBqICogbXRkLT5vb2JibG9jaywKLQkJCQkJCQltdGQtPm9vYnNpemUsICZyZXRsZW4sIGJ1Zik7Ci0JCQkJaWYgKHJldCkKLQkJCQkJcmV0dXJuIHJldDsKLQotCQkJCWlmIChjaGVja19zaG9ydF9wYXR0ZXJuIChidWYsIGJkKSkgewotCQkJCQl0aGlzLT5iYnRbaSA+PiAzXSB8PSAweDAzIDw8IChpICYgMHg2KTsKLQkJCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkJhZCBlcmFzZWJsb2NrICVkIGF0IDB4JTA4eFxuIiwKLQkJCQkJCWkgPj4gMSwgKHVuc2lnbmVkIGludCkgZnJvbSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGNoZWNrX3BhdHRlcm4gKCZidWZbaiAqIHNjYW5sZW5dLCBzY2FubGVuLCBtdGQtPm9vYmJsb2NrLCBiZCkpIHsKLQkJCQkJdGhpcy0+YmJ0W2kgPj4gM10gfD0gMHgwMyA8PCAoaSAmIDB4Nik7Ci0JCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJCYWQgZXJhc2VibG9jayAlZCBhdCAweCUwOHhcbiIsCi0JCQkJCQlpID4+IDEsICh1bnNpZ25lZCBpbnQpIGZyb20pOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9CisJCWlmIChyZXQpIHsKKwkJCXRoaXMtPmJidFtpID4+IDNdIHw9IDB4MDMgPDwgKGkgJiAweDYpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQmFkIGVyYXNlYmxvY2sgJWQgYXQgMHglMDh4XG4iLAorCQkJICAgICAgIGkgPj4gMSwgKHVuc2lnbmVkIGludClmcm9tKTsKKwkJCW10ZC0+ZWNjX3N0YXRzLmJhZGJsb2NrcysrOwogCQl9CisKIAkJaSArPSAyOwogCQlmcm9tICs9ICgxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJfQpAQCAtMzc0LDIyICs0NTQsMjMgQEAKICAqIGJsb2NrLgogICogSWYgdGhlIG9wdGlvbiBOQU5EX0JCVF9QRVJDSElQIGlzIGdpdmVuLCBlYWNoIGNoaXAgaXMgc2VhcmNoZWQKICAqIGZvciBhIGJidCwgd2hpY2ggY29udGFpbnMgdGhlIGJhZCBibG9jayBpbmZvcm1hdGlvbiBvZiB0aGlzIGNoaXAuCi0gKiBUaGlzIGlzIG5lY2NlY2FyeSB0byBwcm92aWRlIHN1cHBvcnQgZm9yIGNlcnRhaW4gRE9DIGRldmljZXMuCisgKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBwcm92aWRlIHN1cHBvcnQgZm9yIGNlcnRhaW4gRE9DIGRldmljZXMuCiAgKgogICogVGhlIGJidCBpZGVudCBwYXR0ZXJuIHJlc2lkZXMgaW4gdGhlIG9vYiBhcmVhIG9mIHRoZSBmaXJzdCBwYWdlCiAgKiBpbiBhIGJsb2NrLgogICovCi1zdGF0aWMgaW50IHNlYXJjaF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCitzdGF0aWMgaW50IHNlYXJjaF9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCWludCBpLCBjaGlwczsKIAlpbnQgYml0cywgc3RhcnRibG9jaywgYmxvY2ssIGRpcjsKLQlpbnQgc2NhbmxlbiA9IG10ZC0+b29iYmxvY2sgKyBtdGQtPm9vYnNpemU7CisJaW50IHNjYW5sZW4gPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKIAlpbnQgYmJ0YmxvY2tzOworCWludCBibG9ja3RvcGFnZSA9IHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQ7CiAKIAkvKiBTZWFyY2ggZGlyZWN0aW9uIHRvcCAtPiBkb3duID8gKi8KIAlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9MQVNUQkxPQ0spIHsKLQkJc3RhcnRibG9jayA9IChtdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KSAtMTsKKwkJc3RhcnRibG9jayA9IChtdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KSAtIDE7CiAJCWRpciA9IC0xOwogCX0gZWxzZSB7CiAJCXN0YXJ0YmxvY2sgPSAwOwpAQCAtNDE1LDEzICs0OTYsMTYgQEAKIAkJdGQtPnBhZ2VzW2ldID0gLTE7CiAJCS8qIFNjYW4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyAqLwogCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCB0ZC0+bWF4YmxvY2tzOyBibG9jaysrKSB7CisKIAkJCWludCBhY3RibG9jayA9IHN0YXJ0YmxvY2sgKyBkaXIgKiBibG9jazsKKwkJCWxvZmZfdCBvZmZzID0gYWN0YmxvY2sgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0OworCiAJCQkvKiBSZWFkIGZpcnN0IHBhZ2UgKi8KLQkJCW5hbmRfcmVhZF9yYXcgKG10ZCwgYnVmLCBhY3RibG9jayA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQsIG10ZC0+b29iYmxvY2ssIG10ZC0+b29ic2l6ZSk7Ci0JCQlpZiAoIWNoZWNrX3BhdHRlcm4oYnVmLCBzY2FubGVuLCBtdGQtPm9vYmJsb2NrLCB0ZCkpIHsKLQkJCQl0ZC0+cGFnZXNbaV0gPSBhY3RibG9jayA8PCAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7CisJCQlzY2FuX3JlYWRfcmF3KG10ZCwgYnVmLCBvZmZzLCBtdGQtPndyaXRlc2l6ZSk7CisJCQlpZiAoIWNoZWNrX3BhdHRlcm4oYnVmLCBzY2FubGVuLCBtdGQtPndyaXRlc2l6ZSwgdGQpKSB7CisJCQkJdGQtPnBhZ2VzW2ldID0gYWN0YmxvY2sgPDwgYmxvY2t0b3BhZ2U7CiAJCQkJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikgewotCQkJCQl0ZC0+dmVyc2lvbltpXSA9IGJ1ZlttdGQtPm9vYmJsb2NrICsgdGQtPnZlcm9mZnNdOworCQkJCQl0ZC0+dmVyc2lvbltpXSA9IGJ1ZlttdGQtPndyaXRlc2l6ZSArIHRkLT52ZXJvZmZzXTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC00MzEsOSArNTE1LDEwIEBACiAJLyogQ2hlY2ssIGlmIHdlIGZvdW5kIGEgYmJ0IGZvciBlYWNoIHJlcXVlc3RlZCBjaGlwICovCiAJZm9yIChpID0gMDsgaSA8IGNoaXBzOyBpKyspIHsKIAkJaWYgKHRkLT5wYWdlc1tpXSA9PSAtMSkKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJCYWQgYmxvY2sgdGFibGUgbm90IGZvdW5kIGZvciBjaGlwICVkXG4iLCBpKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJhZCBibG9jayB0YWJsZSBub3QgZm91bmQgZm9yIGNoaXAgJWRcbiIsIGkpOwogCQllbHNlCi0JCQlwcmludGsgKEtFUk5fREVCVUcgIkJhZCBibG9jayB0YWJsZSBmb3VuZCBhdCBwYWdlICVkLCB2ZXJzaW9uIDB4JTAyWFxuIiwgdGQtPnBhZ2VzW2ldLCB0ZC0+dmVyc2lvbltpXSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGZvdW5kIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLCB0ZC0+cGFnZXNbaV0sCisJCQkgICAgICAgdGQtPnZlcnNpb25baV0pOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ0NywyMSArNTMyLDE5IEBACiAgKgogICogU2VhcmNoIGFuZCByZWFkIHRoZSBiYWQgYmxvY2sgdGFibGUocykKICovCi1zdGF0aWMgaW50IHNlYXJjaF9yZWFkX2JidHMgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsCi0Jc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCkKK3N0YXRpYyBpbnQgc2VhcmNoX3JlYWRfYmJ0cyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqIGJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCkKIHsKIAkvKiBTZWFyY2ggdGhlIHByaW1hcnkgdGFibGUgKi8KLQlzZWFyY2hfYmJ0IChtdGQsIGJ1ZiwgdGQpOworCXNlYXJjaF9iYnQobXRkLCBidWYsIHRkKTsKIAogCS8qIFNlYXJjaCB0aGUgbWlycm9yIHRhYmxlICovCiAJaWYgKG1kKQotCQlzZWFyY2hfYmJ0IChtdGQsIGJ1ZiwgbWQpOworCQlzZWFyY2hfYmJ0KG10ZCwgYnVmLCBtZCk7CiAKIAkvKiBGb3JjZSByZXN1bHQgY2hlY2sgKi8KIAlyZXR1cm4gMTsKIH0KIAotCiAvKioKICAqIHdyaXRlX2JidCAtIFtHRU5FUklDXSAoUmUpd3JpdGUgdGhlIGJhZCBibG9jayB0YWJsZQogICoKQEAgLTQ3NCwyNSArNTU3LDMxIEBACiAgKiAoUmUpd3JpdGUgdGhlIGJhZCBibG9jayB0YWJsZQogICoKICovCi1zdGF0aWMgaW50IHdyaXRlX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwKLQlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKm1kLCBpbnQgY2hpcHNlbCkKK3N0YXRpYyBpbnQgd3JpdGVfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsCisJCSAgICAgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCwKKwkJICAgICBpbnQgY2hpcHNlbCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBuYW5kX29vYmluZm8gb29iaW5mbzsKIAlzdHJ1Y3QgZXJhc2VfaW5mbyBlaW5mbzsKIAlpbnQgaSwgaiwgcmVzLCBjaGlwID0gMDsKIAlpbnQgYml0cywgc3RhcnRibG9jaywgZGlyLCBwYWdlLCBvZmZzLCBudW1ibG9ja3MsIHNmdCwgc2Z0bXNrOwotCWludCBucmNoaXBzLCBiYnRvZmZzLCBwYWdlb2ZmczsKKwlpbnQgbnJjaGlwcywgYmJ0b2ZmcywgcGFnZW9mZnMsIG9vYm9mZnM7CiAJdWludDhfdCBtc2tbNF07CiAJdWludDhfdCByY29kZSA9IHRkLT5yZXNlcnZlZF9ibG9ja19jb2RlOwogCXNpemVfdCByZXRsZW4sIGxlbiA9IDA7CiAJbG9mZl90IHRvOworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisKKwlvcHMub29ibGVuID0gbXRkLT5vb2JzaXplOworCW9wcy5vb2JvZmZzID0gMDsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CiAKIAlpZiAoIXJjb2RlKQogCQlyY29kZSA9IDB4ZmY7CiAJLyogV3JpdGUgYmFkIGJsb2NrIHRhYmxlIHBlciBjaGlwIHJhdGhlciB0aGFuIHBlciBkZXZpY2UgPyAqLwogCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1BFUkNISVApIHsKLQkJbnVtYmxvY2tzID0gKGludCkgKHRoaXMtPmNoaXBzaXplID4+IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CisJCW51bWJsb2NrcyA9IChpbnQpKHRoaXMtPmNoaXBzaXplID4+IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJCS8qIEZ1bGwgZGV2aWNlIHdyaXRlIG9yIHNwZWNpZmljIGNoaXAgPyAqLwogCQlpZiAoY2hpcHNlbCA9PSAtMSkgewogCQkJbnJjaGlwcyA9IHRoaXMtPm51bWNoaXBzOwpAQCAtNTAxLDcgKzU5MCw3IEBACiAJCQljaGlwID0gY2hpcHNlbDsKIAkJfQogCX0gZWxzZSB7Ci0JCW51bWJsb2NrcyA9IChpbnQpIChtdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKKwkJbnVtYmxvY2tzID0gKGludCkobXRkLT5zaXplID4+IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJCW5yY2hpcHMgPSAxOwogCX0KIApAQCAtNTMwLDI3ICs2MTksMzggQEAKIAkJZm9yIChpID0gMDsgaSA8IHRkLT5tYXhibG9ja3M7IGkrKykgewogCQkJaW50IGJsb2NrID0gc3RhcnRibG9jayArIGRpciAqIGk7CiAJCQkvKiBDaGVjaywgaWYgdGhlIGJsb2NrIGlzIGJhZCAqLwotCQkJc3dpdGNoICgodGhpcy0+YmJ0W2Jsb2NrID4+IDJdID4+ICgyICogKGJsb2NrICYgMHgwMykpKSAmIDB4MDMpIHsKKwkJCXN3aXRjaCAoKHRoaXMtPmJidFtibG9jayA+PiAyXSA+PgorCQkJCSAoMiAqIChibG9jayAmIDB4MDMpKSkgJiAweDAzKSB7CiAJCQljYXNlIDB4MDE6CiAJCQljYXNlIDB4MDM6CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlwYWdlID0gYmxvY2sgPDwgKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOworCQkJcGFnZSA9IGJsb2NrIDw8CisJCQkJKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOwogCQkJLyogQ2hlY2ssIGlmIHRoZSBibG9jayBpcyB1c2VkIGJ5IHRoZSBtaXJyb3IgdGFibGUgKi8KIAkJCWlmICghbWQgfHwgbWQtPnBhZ2VzW2NoaXBdICE9IHBhZ2UpCiAJCQkJZ290byB3cml0ZTsKIAkJfQotCQlwcmludGsgKEtFUk5fRVJSICJObyBzcGFjZSBsZWZ0IHRvIHdyaXRlIGJhZCBibG9jayB0YWJsZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gc3BhY2UgbGVmdCB0byB3cml0ZSBiYWQgYmxvY2sgdGFibGVcbiIpOwogCQlyZXR1cm4gLUVOT1NQQzsKLXdyaXRlOgorCXdyaXRlOgogCiAJCS8qIFNldCB1cCBzaGlmdCBjb3VudCBhbmQgbWFza3MgZm9yIHRoZSBmbGFzaCB0YWJsZSAqLwogCQliaXRzID0gdGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9OUkJJVFNfTVNLOworCQltc2tbMl0gPSB+cmNvZGU7CiAJCXN3aXRjaCAoYml0cykgewotCQljYXNlIDE6IHNmdCA9IDM7IHNmdG1zayA9IDB4MDc7IG1za1swXSA9IDB4MDA7IG1za1sxXSA9IDB4MDE7IG1za1syXSA9IH5yY29kZTsgbXNrWzNdID0gMHgwMTsgYnJlYWs7Ci0JCWNhc2UgMjogc2Z0ID0gMjsgc2Z0bXNrID0gMHgwNjsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwMTsgbXNrWzJdID0gfnJjb2RlOyBtc2tbM10gPSAweDAzOyBicmVhazsKLQkJY2FzZSA0OiBzZnQgPSAxOyBzZnRtc2sgPSAweDA0OyBtc2tbMF0gPSAweDAwOyBtc2tbMV0gPSAweDBDOyBtc2tbMl0gPSB+cmNvZGU7IG1za1szXSA9IDB4MGY7IGJyZWFrOwotCQljYXNlIDg6IHNmdCA9IDA7IHNmdG1zayA9IDB4MDA7IG1za1swXSA9IDB4MDA7IG1za1sxXSA9IDB4MEY7IG1za1syXSA9IH5yY29kZTsgbXNrWzNdID0gMHhmZjsgYnJlYWs7CisJCWNhc2UgMTogc2Z0ID0gMzsgc2Z0bXNrID0gMHgwNzsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwMTsKKwkJCW1za1szXSA9IDB4MDE7CisJCQlicmVhazsKKwkJY2FzZSAyOiBzZnQgPSAyOyBzZnRtc2sgPSAweDA2OyBtc2tbMF0gPSAweDAwOyBtc2tbMV0gPSAweDAxOworCQkJbXNrWzNdID0gMHgwMzsKKwkJCWJyZWFrOworCQljYXNlIDQ6IHNmdCA9IDE7IHNmdG1zayA9IDB4MDQ7IG1za1swXSA9IDB4MDA7IG1za1sxXSA9IDB4MEM7CisJCQltc2tbM10gPSAweDBmOworCQkJYnJlYWs7CisJCWNhc2UgODogc2Z0ID0gMDsgc2Z0bXNrID0gMHgwMDsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwRjsKKwkJCW1za1szXSA9IDB4ZmY7CisJCQlicmVhazsKIAkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtNTU4LDgyICs2NTgsOTIgQEAKIAogCQl0byA9ICgobG9mZl90KSBwYWdlKSA8PCB0aGlzLT5wYWdlX3NoaWZ0OwogCi0JCW1lbWNweSAoJm9vYmluZm8sIHRoaXMtPmF1dG9vb2IsIHNpemVvZihvb2JpbmZvKSk7Ci0JCW9vYmluZm8udXNlZWNjID0gTVREX05BTkRFQ0NfUExBQ0VPTkxZOwotCiAJCS8qIE11c3Qgd2Ugc2F2ZSB0aGUgYmxvY2sgY29udGVudHMgPyAqLwogCQlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQVZFQ09OVEVOVCkgewogCQkJLyogTWFrZSBpdCBibG9jayBhbGlnbmVkICovCiAJCQl0byAmPSB+KChsb2ZmX3QpICgoMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpIC0gMSkpOwogCQkJbGVuID0gMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7Ci0JCQlyZXMgPSBtdGQtPnJlYWRfZWNjIChtdGQsIHRvLCBsZW4sICZyZXRsZW4sIGJ1ZiwgJmJ1ZltsZW5dLCAmb29iaW5mbyk7CisJCQlyZXMgPSBtdGQtPnJlYWQobXRkLCB0bywgbGVuLCAmcmV0bGVuLCBidWYpOwogCQkJaWYgKHJlcyA8IDApIHsKIAkJCQlpZiAocmV0bGVuICE9IGxlbikgewotCQkJCQlwcmludGsgKEtFUk5fSU5GTyAibmFuZF9iYnQ6IEVycm9yIHJlYWRpbmcgYmxvY2sgZm9yIHdyaXRpbmcgdGhlIGJhZCBibG9jayB0YWJsZVxuIik7CisJCQkJCXByaW50ayhLRVJOX0lORk8gIm5hbmRfYmJ0OiBFcnJvciAiCisJCQkJCSAgICAgICAicmVhZGluZyBibG9jayBmb3Igd3JpdGluZyAiCisJCQkJCSAgICAgICAidGhlIGJhZCBibG9jayB0YWJsZVxuIik7CiAJCQkJCXJldHVybiByZXM7CiAJCQkJfQotCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRUNDIGVycm9yIHdoaWxlIHJlYWRpbmcgYmxvY2sgZm9yIHdyaXRpbmcgYmFkIGJsb2NrIHRhYmxlXG4iKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRUNDIGVycm9yICIKKwkJCQkgICAgICAgIndoaWxlIHJlYWRpbmcgYmxvY2sgZm9yIHdyaXRpbmcgIgorCQkJCSAgICAgICAiYmFkIGJsb2NrIHRhYmxlXG4iKTsKIAkJCX0KKwkJCS8qIFJlYWQgb29iIGRhdGEgKi8KKwkJCW9wcy5sZW4gPSAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpICogbXRkLT5vb2JzaXplOworCQkJb3BzLm9vYmJ1ZiA9ICZidWZbbGVuXTsKKwkJCXJlcyA9IG10ZC0+cmVhZF9vb2IobXRkLCB0byArIG10ZC0+d3JpdGVzaXplLCAmb3BzKTsKKwkJCWlmIChyZXMgPCAwIHx8IG9wcy5yZXRsZW4gIT0gb3BzLmxlbikKKwkJCQlnb3RvIG91dGVycjsKKwogCQkJLyogQ2FsYyB0aGUgYnl0ZSBvZmZzZXQgaW4gdGhlIGJ1ZmZlciAqLwogCQkJcGFnZW9mZnMgPSBwYWdlIC0gKGludCkodG8gPj4gdGhpcy0+cGFnZV9zaGlmdCk7CiAJCQlvZmZzID0gcGFnZW9mZnMgPDwgdGhpcy0+cGFnZV9zaGlmdDsKIAkJCS8qIFByZXNldCB0aGUgYmJ0IGFyZWEgd2l0aCAweGZmICovCi0JCQltZW1zZXQgKCZidWZbb2Zmc10sIDB4ZmYsIChzaXplX3QpKG51bWJsb2NrcyA+PiBzZnQpKTsKLQkJCS8qIFByZXNldCB0aGUgYmJ0J3Mgb29iIGFyZWEgd2l0aCAweGZmICovCi0JCQltZW1zZXQgKCZidWZbbGVuICsgcGFnZW9mZnMgKiBtdGQtPm9vYnNpemVdLCAweGZmLAotCQkJCSgobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpIC0gcGFnZW9mZnMpICogbXRkLT5vb2JzaXplKTsKLQkJCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1ZFUlNJT04pIHsKLQkJCQlidWZbbGVuICsgKHBhZ2VvZmZzICogbXRkLT5vb2JzaXplKSArIHRkLT52ZXJvZmZzXSA9IHRkLT52ZXJzaW9uW2NoaXBdOwotCQkJfQorCQkJbWVtc2V0KCZidWZbb2Zmc10sIDB4ZmYsIChzaXplX3QpIChudW1ibG9ja3MgPj4gc2Z0KSk7CisJCQlvb2JvZmZzID0gbGVuICsgKHBhZ2VvZmZzICogbXRkLT5vb2JzaXplKTsKKwogCQl9IGVsc2UgewogCQkJLyogQ2FsYyBsZW5ndGggKi8KIAkJCWxlbiA9IChzaXplX3QpIChudW1ibG9ja3MgPj4gc2Z0KTsKIAkJCS8qIE1ha2UgaXQgcGFnZSBhbGlnbmVkICEgKi8KLQkJCWxlbiA9IChsZW4gKyAobXRkLT5vb2JibG9jay0xKSkgJiB+KG10ZC0+b29iYmxvY2stMSk7CisJCQlsZW4gPSAobGVuICsgKG10ZC0+d3JpdGVzaXplIC0gMSkpICYKKwkJCQl+KG10ZC0+d3JpdGVzaXplIC0gMSk7CiAJCQkvKiBQcmVzZXQgdGhlIGJ1ZmZlciB3aXRoIDB4ZmYgKi8KLQkJCW1lbXNldCAoYnVmLCAweGZmLCBsZW4gKyAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpICogbXRkLT5vb2JzaXplKTsKKwkJCW1lbXNldChidWYsIDB4ZmYsIGxlbiArCisJCQkgICAgICAgKGxlbiA+PiB0aGlzLT5wYWdlX3NoaWZ0KSogbXRkLT5vb2JzaXplKTsKIAkJCW9mZnMgPSAwOworCQkJb29ib2ZmcyA9IGxlbjsKIAkJCS8qIFBhdHRlcm4gaXMgbG9jYXRlZCBpbiBvb2IgYXJlYSBvZiBmaXJzdCBwYWdlICovCi0JCQltZW1jcHkgKCZidWZbbGVuICsgdGQtPm9mZnNdLCB0ZC0+cGF0dGVybiwgdGQtPmxlbik7Ci0JCQlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKSB7Ci0JCQkJYnVmW2xlbiArIHRkLT52ZXJvZmZzXSA9IHRkLT52ZXJzaW9uW2NoaXBdOwotCQkJfQorCQkJbWVtY3B5KCZidWZbb29ib2ZmcyArIHRkLT5vZmZzXSwgdGQtPnBhdHRlcm4sIHRkLT5sZW4pOwogCQl9CiAKKwkJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikKKwkJCWJ1Zltvb2JvZmZzICsgdGQtPnZlcm9mZnNdID0gdGQtPnZlcnNpb25bY2hpcF07CisKIAkJLyogd2FsayB0aHJvdWdoIHRoZSBtZW1vcnkgdGFibGUgKi8KLQkJZm9yIChpID0gMDsgaSA8IG51bWJsb2NrczsgKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1ibG9ja3M7KSB7CiAJCQl1aW50OF90IGRhdDsKIAkJCWRhdCA9IHRoaXMtPmJidFtiYnRvZmZzICsgKGkgPj4gMildOwotCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKyAsIGkrKykgeworCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKywgaSsrKSB7CiAJCQkJaW50IHNmdGNudCA9IChpIDw8ICgzIC0gc2Z0KSkgJiBzZnRtc2s7CiAJCQkJLyogRG8gbm90IHN0b3JlIHRoZSByZXNlcnZlZCBiYnQgYmxvY2tzICEgKi8KLQkJCQlidWZbb2ZmcyArIChpID4+IHNmdCldICY9IH4obXNrW2RhdCAmIDB4MDNdIDw8IHNmdGNudCk7CisJCQkJYnVmW29mZnMgKyAoaSA+PiBzZnQpXSAmPQorCQkJCQl+KG1za1tkYXQgJiAweDAzXSA8PCBzZnRjbnQpOwogCQkJCWRhdCA+Pj0gMjsKIAkJCX0KIAkJfQogCi0JCW1lbXNldCAoJmVpbmZvLCAwLCBzaXplb2YgKGVpbmZvKSk7CisJCW1lbXNldCgmZWluZm8sIDAsIHNpemVvZihlaW5mbykpOwogCQllaW5mby5tdGQgPSBtdGQ7Ci0JCWVpbmZvLmFkZHIgPSAodW5zaWduZWQgbG9uZykgdG87CisJCWVpbmZvLmFkZHIgPSAodW5zaWduZWQgbG9uZyl0bzsKIAkJZWluZm8ubGVuID0gMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7Ci0JCXJlcyA9IG5hbmRfZXJhc2VfbmFuZCAobXRkLCAmZWluZm8sIDEpOwotCQlpZiAocmVzIDwgMCkgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm5hbmRfYmJ0OiBFcnJvciBkdXJpbmcgYmxvY2sgZXJhc2U6ICVkXG4iLCByZXMpOwotCQkJcmV0dXJuIHJlczsKLQkJfQorCQlyZXMgPSBuYW5kX2VyYXNlX25hbmQobXRkLCAmZWluZm8sIDEpOworCQlpZiAocmVzIDwgMCkKKwkJCWdvdG8gb3V0ZXJyOwogCi0JCXJlcyA9IG10ZC0+d3JpdGVfZWNjIChtdGQsIHRvLCBsZW4sICZyZXRsZW4sIGJ1ZiwgJmJ1ZltsZW5dLCAmb29iaW5mbyk7Ci0JCWlmIChyZXMgPCAwKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAibmFuZF9iYnQ6IEVycm9yIHdoaWxlIHdyaXRpbmcgYmFkIGJsb2NrIHRhYmxlICVkXG4iLCByZXMpOwotCQkJcmV0dXJuIHJlczsKLQkJfQotCQlwcmludGsgKEtFUk5fREVCVUcgIkJhZCBibG9jayB0YWJsZSB3cml0dGVuIHRvIDB4JTA4eCwgdmVyc2lvbiAweCUwMlhcbiIsCi0JCQkodW5zaWduZWQgaW50KSB0bywgdGQtPnZlcnNpb25bY2hpcF0pOworCQlyZXMgPSBzY2FuX3dyaXRlX2JidChtdGQsIHRvLCBsZW4sIGJ1ZiwgJmJ1ZltsZW5dKTsKKwkJaWYgKHJlcyA8IDApCisJCQlnb3RvIG91dGVycjsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIHdyaXR0ZW4gdG8gMHglMDh4LCB2ZXJzaW9uICIKKwkJICAgICAgICIweCUwMlhcbiIsICh1bnNpZ25lZCBpbnQpdG8sIHRkLT52ZXJzaW9uW2NoaXBdKTsKIAogCQkvKiBNYXJrIGl0IGFzIHVzZWQgKi8KIAkJdGQtPnBhZ2VzW2NoaXBdID0gcGFnZTsKIAl9CiAJcmV0dXJuIDA7CisKKyBvdXRlcnI6CisJcHJpbnRrKEtFUk5fV0FSTklORworCSAgICAgICAibmFuZF9iYnQ6IEVycm9yIHdoaWxlIHdyaXRpbmcgYmFkIGJsb2NrIHRhYmxlICVkXG4iLCByZXMpOworCXJldHVybiByZXM7CiB9CiAKIC8qKgpAQCAtNjQ0LDI3ICs3NTQsMjcgQEAKICAqIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgbWVtb3J5IGJhc2VkIGJidCBieSBzY2FubmluZyB0aGUgZGV2aWNlCiAgKiBmb3IgbWFudWZhY3R1cmVyIC8gc29mdHdhcmUgbWFya2VkIGdvb2QgLyBiYWQgYmxvY2tzCiAqLwotc3RhdGljIGlubGluZSBpbnQgbmFuZF9tZW1vcnlfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCkKK3N0YXRpYyBpbmxpbmUgaW50IG5hbmRfbWVtb3J5X2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCiAJYmQtPm9wdGlvbnMgJj0gfk5BTkRfQkJUX1NDQU5FTVBUWTsKLQlyZXR1cm4gY3JlYXRlX2JidCAobXRkLCB0aGlzLT5kYXRhX2J1ZiwgYmQsIC0xKTsKKwlyZXR1cm4gY3JlYXRlX2JidChtdGQsIHRoaXMtPmJ1ZmZlcnMuZGF0YWJ1ZiwgYmQsIC0xKTsKIH0KIAogLyoqCi0gKiBjaGVja19jcmVhdGUgLSBbR0VORVJJQ10gY3JlYXRlIGFuZCB3cml0ZSBiYnQocykgaWYgbmVjY2VjYXJ5CisgKiBjaGVja19jcmVhdGUgLSBbR0VORVJJQ10gY3JlYXRlIGFuZCB3cml0ZSBiYnQocykgaWYgbmVjZXNzYXJ5CiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQGJ1ZjoJdGVtcG9yYXJ5IGJ1ZmZlcgogICogQGJkOgkJZGVzY3JpcHRvciBmb3IgdGhlIGdvb2QvYmFkIGJsb2NrIHNlYXJjaCBwYXR0ZXJuCiAgKgogICogVGhlIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgY2FsbCB0byByZWFkX2JidAotICogYW5kIGNyZWF0ZXMgLyB1cGRhdGVzIHRoZSBiYnQocykgaWYgbmVjY2VjYXJ5Ci0gKiBDcmVhdGlvbiBpcyBuZWNjZWNhcnkgaWYgbm8gYmJ0IHdhcyBmb3VuZCBmb3IgdGhlIGNoaXAvZGV2aWNlCi0gKiBVcGRhdGUgaXMgbmVjY2VjYXJ5IGlmIG9uZSBvZiB0aGUgdGFibGVzIGlzIG1pc3Npbmcgb3IgdGhlCisgKiBhbmQgY3JlYXRlcyAvIHVwZGF0ZXMgdGhlIGJidChzKSBpZiBuZWNlc3NhcnkKKyAqIENyZWF0aW9uIGlzIG5lY2Vzc2FyeSBpZiBubyBiYnQgd2FzIGZvdW5kIGZvciB0aGUgY2hpcC9kZXZpY2UKKyAqIFVwZGF0ZSBpcyBuZWNlc3NhcnkgaWYgb25lIG9mIHRoZSB0YWJsZXMgaXMgbWlzc2luZyBvciB0aGUKICAqIHZlcnNpb24gbnIuIG9mIG9uZSB0YWJsZSBpcyBsZXNzIHRoYW4gdGhlIG90aGVyCiAqLwotc3RhdGljIGludCBjaGVja19jcmVhdGUgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpCitzdGF0aWMgaW50IGNoZWNrX2NyZWF0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQogewogCWludCBpLCBjaGlwcywgd3JpdGVvcHMsIGNoaXBzZWwsIHJlczsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwpAQCAtNzMyLDM1ICs4NDIsMzUgQEAKIAkJCXJkID0gdGQ7CiAJCQlnb3RvIHdyaXRlY2hlY2s7CiAJCX0KLWNyZWF0ZToKKwljcmVhdGU6CiAJCS8qIENyZWF0ZSB0aGUgYmFkIGJsb2NrIHRhYmxlIGJ5IHNjYW5uaW5nIHRoZSBkZXZpY2UgPyAqLwogCQlpZiAoISh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX0NSRUFURSkpCiAJCQljb250aW51ZTsKIAogCQkvKiBDcmVhdGUgdGhlIHRhYmxlIGluIG1lbW9yeSBieSBzY2FubmluZyB0aGUgY2hpcChzKSAqLwotCQljcmVhdGVfYmJ0IChtdGQsIGJ1ZiwgYmQsIGNoaXBzZWwpOworCQljcmVhdGVfYmJ0KG10ZCwgYnVmLCBiZCwgY2hpcHNlbCk7CiAKIAkJdGQtPnZlcnNpb25baV0gPSAxOwogCQlpZiAobWQpCiAJCQltZC0+dmVyc2lvbltpXSA9IDE7Ci13cml0ZWNoZWNrOgorCXdyaXRlY2hlY2s6CiAJCS8qIHJlYWQgYmFjayBmaXJzdCA/ICovCiAJCWlmIChyZCkKLQkJCXJlYWRfYWJzX2JidCAobXRkLCBidWYsIHJkLCBjaGlwc2VsKTsKKwkJCXJlYWRfYWJzX2JidChtdGQsIGJ1ZiwgcmQsIGNoaXBzZWwpOwogCQkvKiBJZiB0aGV5IHdlcmVuJ3QgdmVyc2lvbmVkLCByZWFkIGJvdGguICovCiAJCWlmIChyZDIpCi0JCQlyZWFkX2Fic19iYnQgKG10ZCwgYnVmLCByZDIsIGNoaXBzZWwpOworCQkJcmVhZF9hYnNfYmJ0KG10ZCwgYnVmLCByZDIsIGNoaXBzZWwpOwogCiAJCS8qIFdyaXRlIHRoZSBiYWQgYmxvY2sgdGFibGUgdG8gdGhlIGRldmljZSA/ICovCiAJCWlmICgod3JpdGVvcHMgJiAweDAxKSAmJiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9XUklURSkpIHsKLQkJCXJlcyA9IHdyaXRlX2JidCAobXRkLCBidWYsIHRkLCBtZCwgY2hpcHNlbCk7CisJCQlyZXMgPSB3cml0ZV9iYnQobXRkLCBidWYsIHRkLCBtZCwgY2hpcHNlbCk7CiAJCQlpZiAocmVzIDwgMCkKIAkJCQlyZXR1cm4gcmVzOwogCQl9CiAKIAkJLyogV3JpdGUgdGhlIG1pcnJvciBiYWQgYmxvY2sgdGFibGUgdG8gdGhlIGRldmljZSA/ICovCiAJCWlmICgod3JpdGVvcHMgJiAweDAyKSAmJiBtZCAmJiAobWQtPm9wdGlvbnMgJiBOQU5EX0JCVF9XUklURSkpIHsKLQkJCXJlcyA9IHdyaXRlX2JidCAobXRkLCBidWYsIG1kLCB0ZCwgY2hpcHNlbCk7CisJCQlyZXMgPSB3cml0ZV9iYnQobXRkLCBidWYsIG1kLCB0ZCwgY2hpcHNlbCk7CiAJCQlpZiAocmVzIDwgMCkKIAkJCQlyZXR1cm4gcmVzOwogCQl9CkBAIC03NzcsNyArODg3LDcgQEAKICAqIGFjY2lkZW50YWwgZXJhc3VyZXMgLyB3cml0ZXMuIFRoZSByZWdpb25zIGFyZSBpZGVudGlmaWVkIGJ5CiAgKiB0aGUgbWFyayAweDAyLgogKi8KLXN0YXRpYyB2b2lkIG1hcmtfYmJ0X3JlZ2lvbiAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCitzdGF0aWMgdm9pZCBtYXJrX2JidF9yZWdpb24oc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgaSwgaiwgY2hpcHMsIGJsb2NrLCBucmJsb2NrcywgdXBkYXRlOwpAQCAtNzk1LDcgKzkwNSw4IEBACiAJZm9yIChpID0gMDsgaSA8IGNoaXBzOyBpKyspIHsKIAkJaWYgKCh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX0FCU1BBR0UpIHx8CiAJCSAgICAhKHRkLT5vcHRpb25zICYgTkFORF9CQlRfV1JJVEUpKSB7Ci0JCSAgICAJaWYgKHRkLT5wYWdlc1tpXSA9PSAtMSkgY29udGludWU7CisJCQlpZiAodGQtPnBhZ2VzW2ldID09IC0xKQorCQkJCWNvbnRpbnVlOwogCQkJYmxvY2sgPSB0ZC0+cGFnZXNbaV0gPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOwogCQkJYmxvY2sgPDw9IDE7CiAJCQlvbGR2YWwgPSB0aGlzLT5iYnRbKGJsb2NrID4+IDMpXTsKQEAgLTgxNSw3ICs5MjYsOCBAQAogCQkJb2xkdmFsID0gdGhpcy0+YmJ0WyhibG9jayA+PiAzKV07CiAJCQluZXd2YWwgPSBvbGR2YWwgfCAoMHgyIDw8IChibG9jayAmIDB4MDYpKTsKIAkJCXRoaXMtPmJidFsoYmxvY2sgPj4gMyldID0gbmV3dmFsOwotCQkJaWYgKG9sZHZhbCAhPSBuZXd2YWwpIHVwZGF0ZSA9IDE7CisJCQlpZiAob2xkdmFsICE9IG5ld3ZhbCkKKwkJCQl1cGRhdGUgPSAxOwogCQkJYmxvY2sgKz0gMjsKIAkJfQogCQkvKiBJZiB3ZSB3YW50IHJlc2VydmVkIGJsb2NrcyB0byBiZSByZWNvcmRlZCB0byBmbGFzaCwgYW5kIHNvbWUKQEAgLTg0MCw3ICs5NTIsNyBAQAogICogYnkgY2FsbGluZyB0aGUgbmFuZF9mcmVlX2JidCBmdW5jdGlvbi4KICAqCiAqLwotaW50IG5hbmRfc2Nhbl9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQoraW50IG5hbmRfc2Nhbl9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgbGVuLCByZXMgPSAwOwpAQCAtODUwLDIxICs5NjIsMjEgQEAKIAogCWxlbiA9IG10ZC0+c2l6ZSA+PiAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0ICsgMik7CiAJLyogQWxsb2NhdGUgbWVtb3J5ICgyYml0IHBlciBibG9jaykgKi8KLQl0aGlzLT5iYnQgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOworCXRoaXMtPmJidCA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRoaXMtPmJidCkgewotCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3NjYW5fYmJ0OiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJuYW5kX3NjYW5fYmJ0OiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCS8qIENsZWFyIHRoZSBtZW1vcnkgYmFkIGJsb2NrIHRhYmxlICovCi0JbWVtc2V0ICh0aGlzLT5iYnQsIDB4MDAsIGxlbik7CisJbWVtc2V0KHRoaXMtPmJidCwgMHgwMCwgbGVuKTsKIAogCS8qIElmIG5vIHByaW1hcnkgdGFibGUgZGVjcmlwdG9yIGlzIGdpdmVuLCBzY2FuIHRoZSBkZXZpY2UKIAkgKiB0byBidWlsZCBhIG1lbW9yeSBiYXNlZCBiYWQgYmxvY2sgdGFibGUKIAkgKi8KIAlpZiAoIXRkKSB7CiAJCWlmICgocmVzID0gbmFuZF9tZW1vcnlfYmJ0KG10ZCwgYmQpKSkgewotCQkJcHJpbnRrIChLRVJOX0VSUiAibmFuZF9iYnQ6IENhbid0IHNjYW4gZmxhc2ggYW5kIGJ1aWxkIHRoZSBSQU0tYmFzZWQgQkJUXG4iKTsKLQkJCWtmcmVlICh0aGlzLT5iYnQpOworCQkJcHJpbnRrKEtFUk5fRVJSICJuYW5kX2JidDogQ2FuJ3Qgc2NhbiBmbGFzaCBhbmQgYnVpbGQgdGhlIFJBTS1iYXNlZCBCQlRcbiIpOworCQkJa2ZyZWUodGhpcy0+YmJ0KTsKIAkJCXRoaXMtPmJidCA9IE5VTEw7CiAJCX0KIAkJcmV0dXJuIHJlczsKQEAgLTg3MywzNSArOTg1LDM0IEBACiAJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBvbmUgZXJhc2VibG9jayBpbmNsLiBvb2IgKi8KIAlsZW4gPSAoMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOwogCWxlbiArPSAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpICogbXRkLT5vb2JzaXplOwotCWJ1ZiA9IGttYWxsb2MgKGxlbiwgR0ZQX0tFUk5FTCk7CisJYnVmID0gdm1hbGxvYyhsZW4pOwogCWlmICghYnVmKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIm5hbmRfYmJ0OiBPdXQgb2YgbWVtb3J5XG4iKTsKLQkJa2ZyZWUgKHRoaXMtPmJidCk7CisJCXByaW50ayhLRVJOX0VSUiAibmFuZF9iYnQ6IE91dCBvZiBtZW1vcnlcbiIpOworCQlrZnJlZSh0aGlzLT5iYnQpOwogCQl0aGlzLT5iYnQgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBJcyB0aGUgYmJ0IGF0IGEgZ2l2ZW4gcGFnZSA/ICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfQUJTUEFHRSkgewotCQlyZXMgPSByZWFkX2Fic19iYnRzIChtdGQsIGJ1ZiwgdGQsIG1kKTsKKwkJcmVzID0gcmVhZF9hYnNfYmJ0cyhtdGQsIGJ1ZiwgdGQsIG1kKTsKIAl9IGVsc2UgewogCQkvKiBTZWFyY2ggdGhlIGJhZCBibG9jayB0YWJsZSB1c2luZyBhIHBhdHRlcm4gaW4gb29iICovCi0JCXJlcyA9IHNlYXJjaF9yZWFkX2JidHMgKG10ZCwgYnVmLCB0ZCwgbWQpOworCQlyZXMgPSBzZWFyY2hfcmVhZF9iYnRzKG10ZCwgYnVmLCB0ZCwgbWQpOwogCX0KIAogCWlmIChyZXMpCi0JCXJlcyA9IGNoZWNrX2NyZWF0ZSAobXRkLCBidWYsIGJkKTsKKwkJcmVzID0gY2hlY2tfY3JlYXRlKG10ZCwgYnVmLCBiZCk7CiAKIAkvKiBQcmV2ZW50IHRoZSBiYnQgcmVnaW9ucyBmcm9tIGVyYXNpbmcgLyB3cml0aW5nICovCi0JbWFya19iYnRfcmVnaW9uIChtdGQsIHRkKTsKKwltYXJrX2JidF9yZWdpb24obXRkLCB0ZCk7CiAJaWYgKG1kKQotCQltYXJrX2JidF9yZWdpb24gKG10ZCwgbWQpOworCQltYXJrX2JidF9yZWdpb24obXRkLCBtZCk7CiAKLQlrZnJlZSAoYnVmKTsKKwl2ZnJlZShidWYpOwogCXJldHVybiByZXM7CiB9CiAKLQogLyoqCiAgKiBuYW5kX3VwZGF0ZV9iYnQgLSBbTkFORCBJbnRlcmZhY2VdIHVwZGF0ZSBiYWQgYmxvY2sgdGFibGUocykKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC05MDksNyArMTAyMCw3IEBACiAgKgogICogVGhlIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGJhZCBibG9jayB0YWJsZShzKQogKi8KLWludCBuYW5kX3VwZGF0ZV9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcykKK2ludCBuYW5kX3VwZGF0ZV9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IGxlbiwgcmVzID0gMCwgd3JpdGVvcHMgPSAwOwpAQCAtOTI1LDkgKzEwMzYsOSBAQAogCS8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3Igb25lIGVyYXNlYmxvY2sgaW5jbC4gb29iICovCiAJbGVuID0gKDEgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAlsZW4gKz0gKGxlbiA+PiB0aGlzLT5wYWdlX3NoaWZ0KSAqIG10ZC0+b29ic2l6ZTsKLQlidWYgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3VwZGF0ZV9iYnQ6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm5hbmRfdXBkYXRlX2JidDogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtOTM1LDcgKzEwNDYsNyBAQAogCiAJLyogRG8gd2UgaGF2ZSBhIGJidCBwZXIgY2hpcCA/ICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfUEVSQ0hJUCkgewotCQljaGlwID0gKGludCkgKG9mZnMgPj4gdGhpcy0+Y2hpcF9zaGlmdCk7CisJCWNoaXAgPSAoaW50KShvZmZzID4+IHRoaXMtPmNoaXBfc2hpZnQpOwogCQljaGlwc2VsID0gY2hpcDsKIAl9IGVsc2UgewogCQljaGlwID0gMDsKQEAgLTk0OCwxNyArMTA1OSwxNyBAQAogCiAJLyogV3JpdGUgdGhlIGJhZCBibG9jayB0YWJsZSB0byB0aGUgZGV2aWNlID8gKi8KIAlpZiAoKHdyaXRlb3BzICYgMHgwMSkgJiYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfV1JJVEUpKSB7Ci0JCXJlcyA9IHdyaXRlX2JidCAobXRkLCBidWYsIHRkLCBtZCwgY2hpcHNlbCk7CisJCXJlcyA9IHdyaXRlX2JidChtdGQsIGJ1ZiwgdGQsIG1kLCBjaGlwc2VsKTsKIAkJaWYgKHJlcyA8IDApCiAJCQlnb3RvIG91dDsKIAl9CiAJLyogV3JpdGUgdGhlIG1pcnJvciBiYWQgYmxvY2sgdGFibGUgdG8gdGhlIGRldmljZSA/ICovCiAJaWYgKCh3cml0ZW9wcyAmIDB4MDIpICYmIG1kICYmIChtZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1dSSVRFKSkgewotCQlyZXMgPSB3cml0ZV9iYnQgKG10ZCwgYnVmLCBtZCwgdGQsIGNoaXBzZWwpOworCQlyZXMgPSB3cml0ZV9iYnQobXRkLCBidWYsIG1kLCB0ZCwgY2hpcHNlbCk7CiAJfQogCi1vdXQ6Ci0Ja2ZyZWUgKGJ1Zik7Cisgb3V0OgorCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtOTgxLDE0ICsxMDkyLDE0IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHNtYWxscGFnZV9mbGFzaGJhc2VkID0gewotCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTkVNUFRZIHwgTkFORF9CQlRfU0NBTkFMTFBBR0VTLAorCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTjJORFBBR0UsCiAJLm9mZnMgPSA1LAogCS5sZW4gPSAxLAogCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCiB9OwogCiBzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGxhcmdlcGFnZV9mbGFzaGJhc2VkID0gewotCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTkVNUFRZIHwgTkFORF9CQlRfU0NBTkFMTFBBR0VTLAorCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTjJORFBBR0UsCiAJLm9mZnMgPSAwLAogCS5sZW4gPSAyLAogCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCkBAIC0xMDM2LDcgKzExNDcsNyBAQAogICogc3VwcG9ydCBmb3IgdGhlIGRldmljZSBhbmQgY2FsbHMgdGhlIG5hbmRfc2Nhbl9iYnQgZnVuY3Rpb24KICAqCiAqLwotaW50IG5hbmRfZGVmYXVsdF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoraW50IG5hbmRfZGVmYXVsdF9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIApAQCAtMTA0Niw3ICsxMTU3LDcgQEAKIAkgKiBvZiB0aGUgZ29vZCAvIGJhZCBpbmZvcm1hdGlvbiwgc28gd2UgX211c3RfIHN0b3JlCiAJICogdGhpcyBpbmZvcm1hdGlvbiBpbiBhIGdvb2QgLyBiYWQgdGFibGUgZHVyaW5nCiAJICogc3RhcnR1cAotCSovCisJICovCiAJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0lTX0FORCkgewogCQkvKiBVc2UgdGhlIGRlZmF1bHQgcGF0dGVybiBkZXNjcmlwdG9ycyAqLwogCQlpZiAoIXRoaXMtPmJidF90ZCkgewpAQCAtMTA1NCwxMCArMTE2NSw5IEBACiAJCQl0aGlzLT5iYnRfbWQgPSAmYmJ0X21pcnJvcl9kZXNjcjsKIAkJfQogCQl0aGlzLT5vcHRpb25zIHw9IE5BTkRfVVNFX0ZMQVNIX0JCVDsKLQkJcmV0dXJuIG5hbmRfc2Nhbl9iYnQgKG10ZCwgJmFnYW5kX2ZsYXNoYmFzZWQpOworCQlyZXR1cm4gbmFuZF9zY2FuX2JidChtdGQsICZhZ2FuZF9mbGFzaGJhc2VkKTsKIAl9CiAKLQogCS8qIElzIGEgZmxhc2ggYmFzZWQgYmFkIGJsb2NrIHRhYmxlIHJlcXVlc3RlZCA/ICovCiAJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX1VTRV9GTEFTSF9CQlQpIHsKIAkJLyogVXNlIHRoZSBkZWZhdWx0IHBhdHRlcm4gZGVzY3JpcHRvcnMgKi8KQEAgLTEwNjYsMTggKzExNzYsMTcgQEAKIAkJCXRoaXMtPmJidF9tZCA9ICZiYnRfbWlycm9yX2Rlc2NyOwogCQl9CiAJCWlmICghdGhpcy0+YmFkYmxvY2tfcGF0dGVybikgewotCQkJdGhpcy0+YmFkYmxvY2tfcGF0dGVybiA9IChtdGQtPm9vYmJsb2NrID4gNTEyKSA/Ci0JCQkJJmxhcmdlcGFnZV9mbGFzaGJhc2VkIDogJnNtYWxscGFnZV9mbGFzaGJhc2VkOworCQkJdGhpcy0+YmFkYmxvY2tfcGF0dGVybiA9IChtdGQtPndyaXRlc2l6ZSA+IDUxMikgPyAmbGFyZ2VwYWdlX2ZsYXNoYmFzZWQgOiAmc21hbGxwYWdlX2ZsYXNoYmFzZWQ7CiAJCX0KIAl9IGVsc2UgewogCQl0aGlzLT5iYnRfdGQgPSBOVUxMOwogCQl0aGlzLT5iYnRfbWQgPSBOVUxMOwogCQlpZiAoIXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4pIHsKLQkJCXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4gPSAobXRkLT5vb2JibG9jayA+IDUxMikgPwotCQkJCSZsYXJnZXBhZ2VfbWVtb3J5YmFzZWQgOiAmc21hbGxwYWdlX21lbW9yeWJhc2VkOworCQkJdGhpcy0+YmFkYmxvY2tfcGF0dGVybiA9IChtdGQtPndyaXRlc2l6ZSA+IDUxMikgPworCQkJICAgICZsYXJnZXBhZ2VfbWVtb3J5YmFzZWQgOiAmc21hbGxwYWdlX21lbW9yeWJhc2VkOwogCQl9CiAJfQotCXJldHVybiBuYW5kX3NjYW5fYmJ0IChtdGQsIHRoaXMtPmJhZGJsb2NrX3BhdHRlcm4pOworCXJldHVybiBuYW5kX3NjYW5fYmJ0KG10ZCwgdGhpcy0+YmFkYmxvY2tfcGF0dGVybik7CiB9CiAKIC8qKgpAQCAtMTA4NywyNiArMTE5NiwyOSBAQAogICogQGFsbG93YmJ0OglhbGxvdyBhY2Nlc3MgdG8gYmFkIGJsb2NrIHRhYmxlIHJlZ2lvbgogICoKICovCi1pbnQgbmFuZF9pc2JhZF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcywgaW50IGFsbG93YmJ0KQoraW50IG5hbmRfaXNiYWRfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcywgaW50IGFsbG93YmJ0KQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IGJsb2NrOwotCXVpbnQ4X3QJcmVzOworCXVpbnQ4X3QgcmVzOwogCiAJLyogR2V0IGJsb2NrIG51bWJlciAqIDIgKi8KLQlibG9jayA9IChpbnQpIChvZmZzID4+ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKSk7CisJYmxvY2sgPSAoaW50KShvZmZzID4+ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKSk7CiAJcmVzID0gKHRoaXMtPmJidFtibG9jayA+PiAzXSA+PiAoYmxvY2sgJiAweDA2KSkgJiAweDAzOwogCi0JREVCVUcgKE1URF9ERUJVR19MRVZFTDIsICJuYW5kX2lzYmFkX2JidCgpOiBiYnQgaW5mbyBmb3Igb2ZmcyAweCUwOHg6IChibG9jayAlZCkgMHglMDJ4XG4iLAotCQkodW5zaWduZWQgaW50KW9mZnMsIGJsb2NrID4+IDEsIHJlcyk7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMiwgIm5hbmRfaXNiYWRfYmJ0KCk6IGJidCBpbmZvIGZvciBvZmZzIDB4JTA4eDogKGJsb2NrICVkKSAweCUwMnhcbiIsCisJICAgICAgKHVuc2lnbmVkIGludClvZmZzLCBibG9jayA+PiAxLCByZXMpOwogCiAJc3dpdGNoICgoaW50KXJlcykgewotCWNhc2UgMHgwMDoJcmV0dXJuIDA7Ci0JY2FzZSAweDAxOglyZXR1cm4gMTsKLQljYXNlIDB4MDI6CXJldHVybiBhbGxvd2JidCA/IDAgOiAxOworCWNhc2UgMHgwMDoKKwkJcmV0dXJuIDA7CisJY2FzZSAweDAxOgorCQlyZXR1cm4gMTsKKwljYXNlIDB4MDI6CisJCXJldHVybiBhbGxvd2JidCA/IDAgOiAxOwogCX0KIAlyZXR1cm4gMTsKIH0KIAotRVhQT1JUX1NZTUJPTCAobmFuZF9zY2FuX2JidCk7Ci1FWFBPUlRfU1lNQk9MIChuYW5kX2RlZmF1bHRfYmJ0KTsKK0VYUE9SVF9TWU1CT0wobmFuZF9zY2FuX2JidCk7CitFWFBPUlRfU1lNQk9MKG5hbmRfZGVmYXVsdF9iYnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCmluZGV4IDQwYWM5MDkuLjJhMTYzZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKQEAgLTcsNiArNyw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBTdGV2ZW4gSi4gSGlsbCAoc2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKICAqICAgICAgICAgICAgICAgICAgICAgICAgIFRvc2hpYmEgQW1lcmljYSBFbGVjdHJvbmljcyBDb21wb25lbnRzLCBJbmMuCiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICoKICAqICRJZDogbmFuZF9lY2MuYyx2IDEuMTUgMjAwNS8xMS8wNyAxMToxNDozMCBnbGVpeG5lciBFeHAgJAogICoKICAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC02Miw5MCArNjQsNzYgQEAKIAkweDAwLCAweDU1LCAweDU2LCAweDAzLCAweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwCiB9OwogCi0KIC8qKgotICogbmFuZF90cmFuc19yZXN1bHQgLSBbR0VORVJJQ10gY3JlYXRlIG5vbi1pbnZlcnRlZCBFQ0MKLSAqIEByZWcyOglsaW5lIHBhcml0eSByZWcgMgotICogQHJlZzM6CWxpbmUgcGFyaXR5IHJlZyAzCi0gKiBAZWNjX2NvZGU6CWVjYwotICoKLSAqIENyZWF0ZXMgbm9uLWludmVydGVkIEVDQyBjb2RlIGZyb20gbGluZSBwYXJpdHkKLSAqLwotc3RhdGljIHZvaWQgbmFuZF90cmFuc19yZXN1bHQodV9jaGFyIHJlZzIsIHVfY2hhciByZWczLAotCXVfY2hhciAqZWNjX2NvZGUpCi17Ci0JdV9jaGFyIGEsIGIsIGksIHRtcDEsIHRtcDI7Ci0KLQkvKiBJbml0aWFsaXplIHZhcmlhYmxlcyAqLwotCWEgPSBiID0gMHg4MDsKLQl0bXAxID0gdG1wMiA9IDA7Ci0KLQkvKiBDYWxjdWxhdGUgZmlyc3QgRUNDIGJ5dGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWlmIChyZWczICYgYSkJCS8qIExQMTUsMTMsMTEsOSAtLT4gZWNjX2NvZGVbMF0gKi8KLQkJCXRtcDEgfD0gYjsKLQkJYiA+Pj0gMTsKLQkJaWYgKHJlZzIgJiBhKQkJLyogTFAxNCwxMiwxMCw4IC0tPiBlY2NfY29kZVswXSAqLwotCQkJdG1wMSB8PSBiOwotCQliID4+PSAxOwotCQlhID4+PSAxOwotCX0KLQotCS8qIENhbGN1bGF0ZSBzZWNvbmQgRUNDIGJ5dGUgKi8KLQliID0gMHg4MDsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWlmIChyZWczICYgYSkJCS8qIExQNyw1LDMsMSAtLT4gZWNjX2NvZGVbMV0gKi8KLQkJCXRtcDIgfD0gYjsKLQkJYiA+Pj0gMTsKLQkJaWYgKHJlZzIgJiBhKQkJLyogTFA2LDQsMiwwIC0tPiBlY2NfY29kZVsxXSAqLwotCQkJdG1wMiB8PSBiOwotCQliID4+PSAxOwotCQlhID4+PSAxOwotCX0KLQotCS8qIFN0b3JlIHR3byBvZiB0aGUgRUNDIGJ5dGVzICovCi0JZWNjX2NvZGVbMF0gPSB0bXAxOwotCWVjY19jb2RlWzFdID0gdG1wMjsKLX0KLQotLyoqCi0gKiBuYW5kX2NhbGN1bGF0ZV9lY2MgLSBbTkFORCBJbnRlcmZhY2VdIENhbGN1bGF0ZSAzIGJ5dGUgRUNDIGNvZGUgZm9yIDI1NiBieXRlIGJsb2NrCisgKiBuYW5kX2NhbGN1bGF0ZV9lY2MgLSBbTkFORCBJbnRlcmZhY2VdIENhbGN1bGF0ZSAzIGJ5dGUgRUNDIGNvZGUKKyAqCQkJZm9yIDI1NiBieXRlIGJsb2NrCiAgKiBAbXRkOglNVEQgYmxvY2sgc3RydWN0dXJlCiAgKiBAZGF0OglyYXcgZGF0YQogICogQGVjY19jb2RlOglidWZmZXIgZm9yIEVDQwogICovCi1pbnQgbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKK2ludCBuYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LAorCQkgICAgICAgdV9jaGFyICplY2NfY29kZSkKIHsKLQl1X2NoYXIgaWR4LCByZWcxLCByZWcyLCByZWczOwotCWludCBqOworCXVpbnQ4X3QgaWR4LCByZWcxLCByZWcyLCByZWczLCB0bXAxLCB0bXAyOworCWludCBpOwogCiAJLyogSW5pdGlhbGl6ZSB2YXJpYWJsZXMgKi8KIAlyZWcxID0gcmVnMiA9IHJlZzMgPSAwOwotCWVjY19jb2RlWzBdID0gZWNjX2NvZGVbMV0gPSBlY2NfY29kZVsyXSA9IDA7CiAKIAkvKiBCdWlsZCB1cCBjb2x1bW4gcGFyaXR5ICovCi0JZm9yKGogPSAwOyBqIDwgMjU2OyBqKyspIHsKLQorCWZvcihpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCS8qIEdldCBDUDAgLSBDUDUgZnJvbSB0YWJsZSAqLwotCQlpZHggPSBuYW5kX2VjY19wcmVjYWxjX3RhYmxlW2RhdFtqXV07CisJCWlkeCA9IG5hbmRfZWNjX3ByZWNhbGNfdGFibGVbKmRhdCsrXTsKIAkJcmVnMSBePSAoaWR4ICYgMHgzZik7CiAKIAkJLyogQWxsIGJpdCBYT1IgPSAxID8gKi8KIAkJaWYgKGlkeCAmIDB4NDApIHsKLQkJCXJlZzMgXj0gKHVfY2hhcikgajsKLQkJCXJlZzIgXj0gfigodV9jaGFyKSBqKTsKKwkJCXJlZzMgXj0gKHVpbnQ4X3QpIGk7CisJCQlyZWcyIF49IH4oKHVpbnQ4X3QpIGkpOwogCQl9CiAJfQogCiAJLyogQ3JlYXRlIG5vbi1pbnZlcnRlZCBFQ0MgY29kZSBmcm9tIGxpbmUgcGFyaXR5ICovCi0JbmFuZF90cmFuc19yZXN1bHQocmVnMiwgcmVnMywgZWNjX2NvZGUpOworCXRtcDEgID0gKHJlZzMgJiAweDgwKSA+PiAwOyAvKiBCNyAtPiBCNyAqLworCXRtcDEgfD0gKHJlZzIgJiAweDgwKSA+PiAxOyAvKiBCNyAtPiBCNiAqLworCXRtcDEgfD0gKHJlZzMgJiAweDQwKSA+PiAxOyAvKiBCNiAtPiBCNSAqLworCXRtcDEgfD0gKHJlZzIgJiAweDQwKSA+PiAyOyAvKiBCNiAtPiBCNCAqLworCXRtcDEgfD0gKHJlZzMgJiAweDIwKSA+PiAyOyAvKiBCNSAtPiBCMyAqLworCXRtcDEgfD0gKHJlZzIgJiAweDIwKSA+PiAzOyAvKiBCNSAtPiBCMiAqLworCXRtcDEgfD0gKHJlZzMgJiAweDEwKSA+PiAzOyAvKiBCNCAtPiBCMSAqLworCXRtcDEgfD0gKHJlZzIgJiAweDEwKSA+PiA0OyAvKiBCNCAtPiBCMCAqLworCisJdG1wMiAgPSAocmVnMyAmIDB4MDgpIDw8IDQ7IC8qIEIzIC0+IEI3ICovCisJdG1wMiB8PSAocmVnMiAmIDB4MDgpIDw8IDM7IC8qIEIzIC0+IEI2ICovCisJdG1wMiB8PSAocmVnMyAmIDB4MDQpIDw8IDM7IC8qIEIyIC0+IEI1ICovCisJdG1wMiB8PSAocmVnMiAmIDB4MDQpIDw8IDI7IC8qIEIyIC0+IEI0ICovCisJdG1wMiB8PSAocmVnMyAmIDB4MDIpIDw8IDI7IC8qIEIxIC0+IEIzICovCisJdG1wMiB8PSAocmVnMiAmIDB4MDIpIDw8IDE7IC8qIEIxIC0+IEIyICovCisJdG1wMiB8PSAocmVnMyAmIDB4MDEpIDw8IDE7IC8qIEIwIC0+IEIxICovCisJdG1wMiB8PSAocmVnMiAmIDB4MDEpIDw8IDA7IC8qIEI3IC0+IEIwICovCiAKIAkvKiBDYWxjdWxhdGUgZmluYWwgRUNDIGNvZGUgKi8KLQllY2NfY29kZVswXSA9IH5lY2NfY29kZVswXTsKLQllY2NfY29kZVsxXSA9IH5lY2NfY29kZVsxXTsKKyNpZmRlZiBDT05GSUdfTkFORF9FQ0NfU01DCisJZWNjX2NvZGVbMF0gPSB+dG1wMjsKKwllY2NfY29kZVsxXSA9IH50bXAxOworI2Vsc2UKKwllY2NfY29kZVswXSA9IH50bXAxOworCWVjY19jb2RlWzFdID0gfnRtcDI7CisjZW5kaWYKIAllY2NfY29kZVsyXSA9ICgofnJlZzEpIDw8IDIpIHwgMHgwMzsKKwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChuYW5kX2NhbGN1bGF0ZV9lY2MpOworCitzdGF0aWMgaW5saW5lIGludCBjb3VudGJpdHModWludDMyX3QgYnl0ZSkKK3sKKwlpbnQgcmVzID0gMDsKKworCWZvciAoO2J5dGU7IGJ5dGUgPj49IDEpCisJCXJlcyArPSBieXRlICYgMHgwMTsKKwlyZXR1cm4gcmVzOworfQogCiAvKioKICAqIG5hbmRfY29ycmVjdF9kYXRhIC0gW05BTkQgSW50ZXJmYWNlXSBEZXRlY3QgYW5kIGNvcnJlY3QgYml0IGVycm9yKHMpCkBAIC0xNTYsOTMgKzE0NCw1NCBAQAogICoKICAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciAyNTYgYnl0ZSBibG9jawogICovCi1pbnQgbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LCB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQoraW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKKwkJICAgICAgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKIHsKLQl1X2NoYXIgYSwgYiwgYywgZDEsIGQyLCBkMywgYWRkLCBiaXQsIGk7CisJdWludDhfdCBzMCwgczEsIHMyOwogCi0JLyogRG8gZXJyb3IgZGV0ZWN0aW9uICovCi0JZDEgPSBjYWxjX2VjY1swXSBeIHJlYWRfZWNjWzBdOwotCWQyID0gY2FsY19lY2NbMV0gXiByZWFkX2VjY1sxXTsKLQlkMyA9IGNhbGNfZWNjWzJdIF4gcmVhZF9lY2NbMl07Ci0KLQlpZiAoKGQxIHwgZDIgfCBkMykgPT0gMCkgewotCQkvKiBObyBlcnJvcnMgKi8KKyNpZmRlZiBDT05GSUdfTkFORF9FQ0NfU01DCisJczAgPSBjYWxjX2VjY1swXSBeIHJlYWRfZWNjWzBdOworCXMxID0gY2FsY19lY2NbMV0gXiByZWFkX2VjY1sxXTsKKwlzMiA9IGNhbGNfZWNjWzJdIF4gcmVhZF9lY2NbMl07CisjZWxzZQorCXMxID0gY2FsY19lY2NbMF0gXiByZWFkX2VjY1swXTsKKwlzMCA9IGNhbGNfZWNjWzFdIF4gcmVhZF9lY2NbMV07CisJczIgPSBjYWxjX2VjY1syXSBeIHJlYWRfZWNjWzJdOworI2VuZGlmCisJaWYgKChzMCB8IHMxIHwgczIpID09IDApCiAJCXJldHVybiAwOwotCX0KLQllbHNlIHsKLQkJYSA9IChkMSBeIChkMSA+PiAxKSkgJiAweDU1OwotCQliID0gKGQyIF4gKGQyID4+IDEpKSAmIDB4NTU7Ci0JCWMgPSAoZDMgXiAoZDMgPj4gMSkpICYgMHg1NDsKIAotCQkvKiBGb3VuZCBhbmQgd2lsbCBjb3JyZWN0IHNpbmdsZSBiaXQgZXJyb3IgaW4gdGhlIGRhdGEgKi8KLQkJaWYgKChhID09IDB4NTUpICYmIChiID09IDB4NTUpICYmIChjID09IDB4NTQpKSB7Ci0JCQljID0gMHg4MDsKLQkJCWFkZCA9IDA7Ci0JCQlhID0gMHg4MDsKLQkJCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQkJCWlmIChkMSAmIGMpCi0JCQkJCWFkZCB8PSBhOwotCQkJCWMgPj49IDI7Ci0JCQkJYSA+Pj0gMTsKLQkJCX0KLQkJCWMgPSAweDgwOwotCQkJZm9yIChpPTA7IGk8NDsgaSsrKSB7Ci0JCQkJaWYgKGQyICYgYykKLQkJCQkJYWRkIHw9IGE7Ci0JCQkJYyA+Pj0gMjsKLQkJCQlhID4+PSAxOwotCQkJfQotCQkJYml0ID0gMDsKLQkJCWIgPSAweDA0OwotCQkJYyA9IDB4ODA7Ci0JCQlmb3IgKGk9MDsgaTwzOyBpKyspIHsKLQkJCQlpZiAoZDMgJiBjKQotCQkJCQliaXQgfD0gYjsKLQkJCQljID4+PSAyOwotCQkJCWIgPj49IDE7Ci0JCQl9Ci0JCQliID0gMHgwMTsKLQkJCWEgPSBkYXRbYWRkXTsKLQkJCWEgXj0gKGIgPDwgYml0KTsKLQkJCWRhdFthZGRdID0gYTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWVsc2UgewotCQkJaSA9IDA7Ci0JCQl3aGlsZSAoZDEpIHsKLQkJCQlpZiAoZDEgJiAweDAxKQotCQkJCQkrK2k7Ci0JCQkJZDEgPj49IDE7Ci0JCQl9Ci0JCQl3aGlsZSAoZDIpIHsKLQkJCQlpZiAoZDIgJiAweDAxKQotCQkJCQkrK2k7Ci0JCQkJZDIgPj49IDE7Ci0JCQl9Ci0JCQl3aGlsZSAoZDMpIHsKLQkJCQlpZiAoZDMgJiAweDAxKQotCQkJCQkrK2k7Ci0JCQkJZDMgPj49IDE7Ci0JCQl9Ci0JCQlpZiAoaSA9PSAxKSB7Ci0JCQkJLyogRUNDIENvZGUgRXJyb3IgQ29ycmVjdGlvbiAqLwotCQkJCXJlYWRfZWNjWzBdID0gY2FsY19lY2NbMF07Ci0JCQkJcmVhZF9lY2NbMV0gPSBjYWxjX2VjY1sxXTsKLQkJCQlyZWFkX2VjY1syXSA9IGNhbGNfZWNjWzJdOwotCQkJCXJldHVybiAyOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLyogVW5jb3JyZWN0YWJsZSBFcnJvciAqLwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJfQorCS8qIENoZWNrIGZvciBhIHNpbmdsZSBiaXQgZXJyb3IgKi8KKwlpZiggKChzMCBeIChzMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCisJICAgICgoczEgXiAoczEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSAmJgorCSAgICAoKHMyIF4gKHMyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHsKKworCQl1aW50MzJfdCBieXRlb2ZmcywgYml0bnVtOworCisJCWJ5dGVvZmZzID0gKHMxIDw8IDApICYgMHg4MDsKKwkJYnl0ZW9mZnMgfD0gKHMxIDw8IDEpICYgMHg0MDsKKwkJYnl0ZW9mZnMgfD0gKHMxIDw8IDIpICYgMHgyMDsKKwkJYnl0ZW9mZnMgfD0gKHMxIDw8IDMpICYgMHgxMDsKKworCQlieXRlb2ZmcyB8PSAoczAgPj4gNCkgJiAweDA4OworCQlieXRlb2ZmcyB8PSAoczAgPj4gMykgJiAweDA0OworCQlieXRlb2ZmcyB8PSAoczAgPj4gMikgJiAweDAyOworCQlieXRlb2ZmcyB8PSAoczAgPj4gMSkgJiAweDAxOworCisJCWJpdG51bSA9IChzMiA+PiA1KSAmIDB4MDQ7CisJCWJpdG51bSB8PSAoczIgPj4gNCkgJiAweDAyOworCQliaXRudW0gfD0gKHMyID4+IDMpICYgMHgwMTsKKworCQlkYXRbYnl0ZW9mZnNdIF49ICgxIDw8IGJpdG51bSk7CisKKwkJcmV0dXJuIDE7CiAJfQogCi0JLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCWlmKGNvdW50Yml0cyhzMCB8ICgodWludDMyX3QpczEgPDwgOCkgfCAoKHVpbnQzMl90KXMyIDw8MTYpKSA9PSAxKQorCQlyZXR1cm4gMTsKKwogCXJldHVybiAtMTsKIH0KLQotRVhQT1JUX1NZTUJPTChuYW5kX2NhbGN1bGF0ZV9lY2MpOwogRVhQT1JUX1NZTUJPTChuYW5kX2NvcnJlY3RfZGF0YSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9pZHMuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9pZHMuYwppbmRleCBkYmM3ZTU1Li4yZTJjZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfaWRzLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2lkcy5jCkBAIC0xOCw5OSArMTgsMTEwIEBACiAqCU5hbWUuIElEIGNvZGUsIHBhZ2VzaXplLCBjaGlwc2l6ZSBpbiBNZWdhQnl0ZSwgZXJhc2VibG9jayBzaXplLAogKglvcHRpb25zCiAqCi0qIAlQYWdlc2l6ZTsgMCwgMjU2LCA1MTIKLSoJMCAJZ2V0IHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgZXh0ZW5kZWQgY2hpcCBJRAorKglQYWdlc2l6ZTsgMCwgMjU2LCA1MTIKKyoJMAlnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBleHRlbmRlZCBjaGlwIElECiArCTI1NgkyNTYgQnl0ZSBwYWdlIHNpemUKICoJNTEyCTUxMiBCeXRlIHBhZ2Ugc2l6ZQogKi8KIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiBuYW5kX2ZsYXNoX2lkc1tdID0gewotCXsiTkFORCAxTWlCIDVWIDgtYml0IiwgCQkweDZlLCAyNTYsIDEsIDB4MTAwMCwgMH0sCi0JeyJOQU5EIDJNaUIgNVYgOC1iaXQiLCAJCTB4NjQsIDI1NiwgMiwgMHgxMDAwLCAwfSwKLQl7Ik5BTkQgNE1pQiA1ViA4LWJpdCIsIAkJMHg2YiwgNTEyLCA0LCAweDIwMDAsIDB9LAotCXsiTkFORCAxTWlCIDMsM1YgOC1iaXQiLCAJMHhlOCwgMjU2LCAxLCAweDEwMDAsIDB9LAotCXsiTkFORCAxTWlCIDMsM1YgOC1iaXQiLCAJMHhlYywgMjU2LCAxLCAweDEwMDAsIDB9LAotCXsiTkFORCAyTWlCIDMsM1YgOC1iaXQiLCAJMHhlYSwgMjU2LCAyLCAweDEwMDAsIDB9LAotCXsiTkFORCA0TWlCIDMsM1YgOC1iaXQiLCAJMHhkNSwgNTEyLCA0LCAweDIwMDAsIDB9LAotCXsiTkFORCA0TWlCIDMsM1YgOC1iaXQiLCAJMHhlMywgNTEyLCA0LCAweDIwMDAsIDB9LAotCXsiTkFORCA0TWlCIDMsM1YgOC1iaXQiLCAJMHhlNSwgNTEyLCA0LCAweDIwMDAsIDB9LAotCXsiTkFORCA4TWlCIDMsM1YgOC1iaXQiLCAJMHhkNiwgNTEyLCA4LCAweDIwMDAsIDB9LAorCXsiTkFORCAxTWlCIDVWIDgtYml0IiwJCTB4NmUsIDI1NiwgMSwgMHgxMDAwLCAwfSwKKwl7Ik5BTkQgMk1pQiA1ViA4LWJpdCIsCQkweDY0LCAyNTYsIDIsIDB4MTAwMCwgMH0sCisJeyJOQU5EIDRNaUIgNVYgOC1iaXQiLAkJMHg2YiwgNTEyLCA0LCAweDIwMDAsIDB9LAorCXsiTkFORCAxTWlCIDMsM1YgOC1iaXQiLAkweGU4LCAyNTYsIDEsIDB4MTAwMCwgMH0sCisJeyJOQU5EIDFNaUIgMywzViA4LWJpdCIsCTB4ZWMsIDI1NiwgMSwgMHgxMDAwLCAwfSwKKwl7Ik5BTkQgMk1pQiAzLDNWIDgtYml0IiwJMHhlYSwgMjU2LCAyLCAweDEwMDAsIDB9LAorCXsiTkFORCA0TWlCIDMsM1YgOC1iaXQiLAkweGQ1LCA1MTIsIDQsIDB4MjAwMCwgMH0sCisJeyJOQU5EIDRNaUIgMywzViA4LWJpdCIsCTB4ZTMsIDUxMiwgNCwgMHgyMDAwLCAwfSwKKwl7Ik5BTkQgNE1pQiAzLDNWIDgtYml0IiwJMHhlNSwgNTEyLCA0LCAweDIwMDAsIDB9LAorCXsiTkFORCA4TWlCIDMsM1YgOC1iaXQiLAkweGQ2LCA1MTIsIDgsIDB4MjAwMCwgMH0sCiAKLQl7Ik5BTkQgOE1pQiAxLDhWIDgtYml0IiwgCTB4MzksIDUxMiwgOCwgMHgyMDAwLCAwfSwKLQl7Ik5BTkQgOE1pQiAzLDNWIDgtYml0IiwgCTB4ZTYsIDUxMiwgOCwgMHgyMDAwLCAwfSwKLQl7Ik5BTkQgOE1pQiAxLDhWIDE2LWJpdCIsIAkweDQ5LCA1MTIsIDgsIDB4MjAwMCwgTkFORF9CVVNXSURUSF8xNn0sCi0JeyJOQU5EIDhNaUIgMywzViAxNi1iaXQiLCAJMHg1OSwgNTEyLCA4LCAweDIwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCA4TWlCIDEsOFYgOC1iaXQiLAkweDM5LCA1MTIsIDgsIDB4MjAwMCwgMH0sCisJeyJOQU5EIDhNaUIgMywzViA4LWJpdCIsCTB4ZTYsIDUxMiwgOCwgMHgyMDAwLCAwfSwKKwl7Ik5BTkQgOE1pQiAxLDhWIDE2LWJpdCIsCTB4NDksIDUxMiwgOCwgMHgyMDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgOE1pQiAzLDNWIDE2LWJpdCIsCTB4NTksIDUxMiwgOCwgMHgyMDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKIAotCXsiTkFORCAxNk1pQiAxLDhWIDgtYml0IiwgCTB4MzMsIDUxMiwgMTYsIDB4NDAwMCwgMH0sCi0JeyJOQU5EIDE2TWlCIDMsM1YgOC1iaXQiLCAJMHg3MywgNTEyLCAxNiwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMTZNaUIgMSw4ViAxNi1iaXQiLCAJMHg0MywgNTEyLCAxNiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKLQl7Ik5BTkQgMTZNaUIgMywzViAxNi1iaXQiLCAJMHg1MywgNTEyLCAxNiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMTZNaUIgMSw4ViA4LWJpdCIsCTB4MzMsIDUxMiwgMTYsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDE2TWlCIDMsM1YgOC1iaXQiLAkweDczLCA1MTIsIDE2LCAweDQwMDAsIDB9LAorCXsiTkFORCAxNk1pQiAxLDhWIDE2LWJpdCIsCTB4NDMsIDUxMiwgMTYsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDE2TWlCIDMsM1YgMTYtYml0IiwJMHg1MywgNTEyLCAxNiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKIAotCXsiTkFORCAzMk1pQiAxLDhWIDgtYml0IiwgCTB4MzUsIDUxMiwgMzIsIDB4NDAwMCwgMH0sCi0JeyJOQU5EIDMyTWlCIDMsM1YgOC1iaXQiLCAJMHg3NSwgNTEyLCAzMiwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMzJNaUIgMSw4ViAxNi1iaXQiLCAJMHg0NSwgNTEyLCAzMiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKLQl7Ik5BTkQgMzJNaUIgMywzViAxNi1iaXQiLCAJMHg1NSwgNTEyLCAzMiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMzJNaUIgMSw4ViA4LWJpdCIsCTB4MzUsIDUxMiwgMzIsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDMyTWlCIDMsM1YgOC1iaXQiLAkweDc1LCA1MTIsIDMyLCAweDQwMDAsIDB9LAorCXsiTkFORCAzMk1pQiAxLDhWIDE2LWJpdCIsCTB4NDUsIDUxMiwgMzIsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDMyTWlCIDMsM1YgMTYtYml0IiwJMHg1NSwgNTEyLCAzMiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKIAotCXsiTkFORCA2NE1pQiAxLDhWIDgtYml0IiwgCTB4MzYsIDUxMiwgNjQsIDB4NDAwMCwgMH0sCi0JeyJOQU5EIDY0TWlCIDMsM1YgOC1iaXQiLCAJMHg3NiwgNTEyLCA2NCwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgNjRNaUIgMSw4ViAxNi1iaXQiLCAJMHg0NiwgNTEyLCA2NCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKLQl7Ik5BTkQgNjRNaUIgMywzViAxNi1iaXQiLCAJMHg1NiwgNTEyLCA2NCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgNjRNaUIgMSw4ViA4LWJpdCIsCTB4MzYsIDUxMiwgNjQsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDY0TWlCIDMsM1YgOC1iaXQiLAkweDc2LCA1MTIsIDY0LCAweDQwMDAsIDB9LAorCXsiTkFORCA2NE1pQiAxLDhWIDE2LWJpdCIsCTB4NDYsIDUxMiwgNjQsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDY0TWlCIDMsM1YgMTYtYml0IiwJMHg1NiwgNTEyLCA2NCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKIAotCXsiTkFORCAxMjhNaUIgMSw4ViA4LWJpdCIsIAkweDc4LCA1MTIsIDEyOCwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMTI4TWlCIDEsOFYgOC1iaXQiLCAJMHgzOSwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCi0JeyJOQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwgCTB4NzksIDUxMiwgMTI4LCAweDQwMDAsIDB9LAotCXsiTkFORCAxMjhNaUIgMSw4ViAxNi1iaXQiLCAJMHg3MiwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCi0JeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsIAkweDQ5LCA1MTIsIDEyOCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKLQl7Ik5BTkQgMTI4TWlCIDMsM1YgMTYtYml0IiwgCTB4NzQsIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAotCXsiTkFORCAxMjhNaUIgMywzViAxNi1iaXQiLCAJMHg1OSwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDgtYml0IiwJMHg3OCwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDgtYml0IiwJMHgzOSwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwJMHg3OSwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsCTB4NzIsIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCAxMjhNaUIgMSw4ViAxNi1iaXQiLAkweDQ5LCA1MTIsIDEyOCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMTI4TWlCIDMsM1YgMTYtYml0IiwJMHg3NCwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDEyOE1pQiAzLDNWIDE2LWJpdCIsCTB4NTksIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAogCi0JeyJOQU5EIDI1Nk1pQiAzLDNWIDgtYml0IiwgCTB4NzEsIDUxMiwgMjU2LCAweDQwMDAsIDB9LAorCXsiTkFORCAyNTZNaUIgMywzViA4LWJpdCIsCTB4NzEsIDUxMiwgMjU2LCAweDQwMDAsIDB9LAogCi0JLyogVGhlc2UgYXJlIHRoZSBuZXcgY2hpcHMgd2l0aCBsYXJnZSBwYWdlIHNpemUuIFRoZSBwYWdlc2l6ZQotCSogYW5kIHRoZSBlcmFzZXNpemUgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBleHRlbmRlZCBpZCBieXRlcwotCSovCisJLyoKKwkgKiBUaGVzZSBhcmUgdGhlIG5ldyBjaGlwcyB3aXRoIGxhcmdlIHBhZ2Ugc2l6ZS4gVGhlIHBhZ2VzaXplIGFuZCB0aGUKKwkgKiBlcmFzZXNpemUgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBleHRlbmRlZCBpZCBieXRlcworCSAqLworI2RlZmluZSBMUF9PUFRJT05TIChOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fUkVBRFJEWSB8IE5BTkRfTk9fQVVUT0lOQ1IpCisjZGVmaW5lIExQX09QVElPTlMxNiAoTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYpCisKIAkvKjUxMiBNZWdhYml0ICovCi0JeyJOQU5EIDY0TWlCIDEsOFYgOC1iaXQiLCAJMHhBMiwgMCwgIDY0LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCA2NE1pQiAzLDNWIDgtYml0IiwgCTB4RjIsIDAsICA2NCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgNjRNaUIgMSw4ViAxNi1iaXQiLCAJMHhCMiwgMCwgIDY0LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgNjRNaUIgMywzViAxNi1iaXQiLCAJMHhDMiwgMCwgIDY0LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKKwl7Ik5BTkQgNjRNaUIgMSw4ViA4LWJpdCIsCTB4QTIsIDAsICA2NCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDY0TWlCIDMsM1YgOC1iaXQiLAkweEYyLCAwLCAgNjQsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCA2NE1pQiAxLDhWIDE2LWJpdCIsCTB4QjIsIDAsICA2NCwgMCwgTFBfT1BUSU9OUzE2fSwKKwl7Ik5BTkQgNjRNaUIgMywzViAxNi1iaXQiLAkweEMyLCAwLCAgNjQsIDAsIExQX09QVElPTlMxNn0sCiAKIAkvKiAxIEdpZ2FiaXQgKi8KLQl7Ik5BTkQgMTI4TWlCIDEsOFYgOC1iaXQiLCAJMHhBMSwgMCwgMTI4LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAxMjhNaUIgMywzViA4LWJpdCIsIAkweEYxLCAwLCAxMjgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsIAkweEIxLCAwLCAxMjgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAxMjhNaUIgMywzViAxNi1iaXQiLCAJMHhDMSwgMCwgMTI4LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKKwl7Ik5BTkQgMTI4TWlCIDEsOFYgOC1iaXQiLAkweEExLCAwLCAxMjgsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAxMjhNaUIgMywzViA4LWJpdCIsCTB4RjEsIDAsIDEyOCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsCTB4QjEsIDAsIDEyOCwgMCwgTFBfT1BUSU9OUzE2fSwKKwl7Ik5BTkQgMTI4TWlCIDMsM1YgMTYtYml0IiwJMHhDMSwgMCwgMTI4LCAwLCBMUF9PUFRJT05TMTZ9LAogCiAJLyogMiBHaWdhYml0ICovCi0JeyJOQU5EIDI1Nk1pQiAxLDhWIDgtYml0IiwgCTB4QUEsIDAsIDI1NiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgMjU2TWlCIDMsM1YgOC1iaXQiLCAJMHhEQSwgMCwgMjU2LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAyNTZNaUIgMSw4ViAxNi1iaXQiLCAJMHhCQSwgMCwgMjU2LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgMjU2TWlCIDMsM1YgMTYtYml0IiwgCTB4Q0EsIDAsIDI1NiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCisJeyJOQU5EIDI1Nk1pQiAxLDhWIDgtYml0IiwJMHhBQSwgMCwgMjU2LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMjU2TWlCIDMsM1YgOC1iaXQiLAkweERBLCAwLCAyNTYsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAyNTZNaUIgMSw4ViAxNi1iaXQiLAkweEJBLCAwLCAyNTYsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDI1Nk1pQiAzLDNWIDE2LWJpdCIsCTB4Q0EsIDAsIDI1NiwgMCwgTFBfT1BUSU9OUzE2fSwKIAogCS8qIDQgR2lnYWJpdCAqLwotCXsiTkFORCA1MTJNaUIgMSw4ViA4LWJpdCIsIAkweEFDLCAwLCA1MTIsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDUxMk1pQiAzLDNWIDgtYml0IiwgCTB4REMsIDAsIDUxMiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgNTEyTWlCIDEsOFYgMTYtYml0IiwgCTB4QkMsIDAsIDUxMiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDUxMk1pQiAzLDNWIDE2LWJpdCIsIAkweENDLCAwLCA1MTIsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAorCXsiTkFORCA1MTJNaUIgMSw4ViA4LWJpdCIsCTB4QUMsIDAsIDUxMiwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDUxMk1pQiAzLDNWIDgtYml0IiwJMHhEQywgMCwgNTEyLCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgNTEyTWlCIDEsOFYgMTYtYml0IiwJMHhCQywgMCwgNTEyLCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCA1MTJNaUIgMywzViAxNi1iaXQiLAkweENDLCAwLCA1MTIsIDAsIExQX09QVElPTlMxNn0sCiAKIAkvKiA4IEdpZ2FiaXQgKi8KLQl7Ik5BTkQgMUdpQiAxLDhWIDgtYml0IiwgCTB4QTMsIDAsIDEwMjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDFHaUIgMywzViA4LWJpdCIsIAkweEQzLCAwLCAxMDI0LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAxR2lCIDEsOFYgMTYtYml0IiwgCTB4QjMsIDAsIDEwMjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAxR2lCIDMsM1YgMTYtYml0IiwgCTB4QzMsIDAsIDEwMjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAorCXsiTkFORCAxR2lCIDEsOFYgOC1iaXQiLAkweEEzLCAwLCAxMDI0LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMUdpQiAzLDNWIDgtYml0IiwJMHhEMywgMCwgMTAyNCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDFHaUIgMSw4ViAxNi1iaXQiLAkweEIzLCAwLCAxMDI0LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCAxR2lCIDMsM1YgMTYtYml0IiwJMHhDMywgMCwgMTAyNCwgMCwgTFBfT1BUSU9OUzE2fSwKIAogCS8qIDE2IEdpZ2FiaXQgKi8KLQl7Ik5BTkQgMkdpQiAxLDhWIDgtYml0IiwgCTB4QTUsIDAsIDIwNDgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDJHaUIgMywzViA4LWJpdCIsIAkweEQ1LCAwLCAyMDQ4LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAyR2lCIDEsOFYgMTYtYml0IiwgCTB4QjUsIDAsIDIwNDgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAyR2lCIDMsM1YgMTYtYml0IiwgCTB4QzUsIDAsIDIwNDgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAorCXsiTkFORCAyR2lCIDEsOFYgOC1iaXQiLAkweEE1LCAwLCAyMDQ4LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMkdpQiAzLDNWIDgtYml0IiwJMHhENSwgMCwgMjA0OCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDJHaUIgMSw4ViAxNi1iaXQiLAkweEI1LCAwLCAyMDQ4LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCAyR2lCIDMsM1YgMTYtYml0IiwJMHhDNSwgMCwgMjA0OCwgMCwgTFBfT1BUSU9OUzE2fSwKIAotCS8qIFJlbmVzYXMgQU5EIDEgR2lnYWJpdC4gVGhvc2UgY2hpcHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgaWQgYW5kIGhhdmUgYSBzdHJhbmdlIHBhZ2UvYmxvY2sgbGF5b3V0ICEKLQkgKiBUaGUgY2hvc2VuIG1pbmltdW0gZXJhc2VzaXplIGlzIDQgKiAyICogMjA0OCA9IDE2Mzg0IEJ5dGUsIGFzIHRob3NlIGNoaXBzIGhhdmUgYW4gYXJyYXkgb2YgNCBwYWdlIHBsYW5lcwotCSAqIDEgYmxvY2sgPSAyIHBhZ2VzLCBidXQgZHVlIHRvIHBsYW5lIGFycmFuZ2VtZW50IHRoZSBibG9ja3MgMC0zIGNvbnNpc3RzIG9mIHBhZ2UgMCArIDQsMSArIDUsIDIgKyA2LCAzICsgNwotCSAqIEFueXdheSBKRkZTMiB3b3VsZCBpbmNyZWFzZSB0aGUgZXJhc2VibG9jayBzaXplIHNvIHdlIGNob3NlIGEgY29tYmluZWQgb25lIHdoaWNoIGNhbiBiZSBlcmFzZWQgaW4gb25lIGdvCi0JICogVGhlcmUgYXJlIG1vcmUgc3BlZWQgaW1wcm92ZW1lbnRzIGZvciByZWFkcyBhbmQgd3JpdGVzIHBvc3NpYmxlLCBidXQgbm90IGltcGxlbWVudGVkIG5vdworCS8qCisJICogUmVuZXNhcyBBTkQgMSBHaWdhYml0LiBUaG9zZSBjaGlwcyBkbyBub3Qgc3VwcG9ydCBleHRlbmRlZCBpZCBhbmQKKwkgKiBoYXZlIGEgc3RyYW5nZSBwYWdlL2Jsb2NrIGxheW91dCAhICBUaGUgY2hvc2VuIG1pbmltdW0gZXJhc2VzaXplIGlzCisJICogNCAqIDIgKiAyMDQ4ID0gMTYzODQgQnl0ZSwgYXMgdGhvc2UgY2hpcHMgaGF2ZSBhbiBhcnJheSBvZiA0IHBhZ2UKKwkgKiBwbGFuZXMgMSBibG9jayA9IDIgcGFnZXMsIGJ1dCBkdWUgdG8gcGxhbmUgYXJyYW5nZW1lbnQgdGhlIGJsb2NrcworCSAqIDAtMyBjb25zaXN0cyBvZiBwYWdlIDAgKyA0LDEgKyA1LCAyICsgNiwgMyArIDcgQW55d2F5IEpGRlMyIHdvdWxkCisJICogaW5jcmVhc2UgdGhlIGVyYXNlYmxvY2sgc2l6ZSBzbyB3ZSBjaG9zZSBhIGNvbWJpbmVkIG9uZSB3aGljaCBjYW4gYmUKKwkgKiBlcmFzZWQgaW4gb25lIGdvIFRoZXJlIGFyZSBtb3JlIHNwZWVkIGltcHJvdmVtZW50cyBmb3IgcmVhZHMgYW5kCisJICogd3JpdGVzIHBvc3NpYmxlLCBidXQgbm90IGltcGxlbWVudGVkIG5vdwogCSAqLwotCXsiQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwJMHgwMSwgMjA0OCwgMTI4LCAweDQwMDAsIE5BTkRfSVNfQU5EIHwgTkFORF9OT19BVVRPSU5DUiB8IE5BTkRfNFBBR0VfQVJSQVkgfCBCQlRfQVVUT19SRUZSRVNIfSwKKwl7IkFORCAxMjhNaUIgMywzViA4LWJpdCIsCTB4MDEsIDIwNDgsIDEyOCwgMHg0MDAwLAorCSBOQU5EX0lTX0FORCB8IE5BTkRfTk9fQVVUT0lOQ1IgfE5BTkRfTk9fUkVBRFJEWSB8IE5BTkRfNFBBR0VfQVJSQVkgfAorCSBCQlRfQVVUT19SRUZSRVNICisJfSwKIAogCXtOVUxMLH0KIH07CkBAIC0xMjUsMTMgKzEzNiwxMyBAQAogCXtOQU5EX01GUl9OQVRJT05BTCwgIk5hdGlvbmFsIn0sCiAJe05BTkRfTUZSX1JFTkVTQVMsICJSZW5lc2FzIn0sCiAJe05BTkRfTUZSX1NUTUlDUk8sICJTVCBNaWNybyJ9LAotICAgICAgICB7TkFORF9NRlJfSFlOSVgsICJIeW5peCJ9LAorCXtOQU5EX01GUl9IWU5JWCwgIkh5bml4In0sCiAJezB4MCwgIlVua25vd24ifQogfTsKIAotRVhQT1JUX1NZTUJPTCAobmFuZF9tYW51Zl9pZHMpOwotRVhQT1JUX1NZTUJPTCAobmFuZF9mbGFzaF9pZHMpOworRVhQT1JUX1NZTUJPTChuYW5kX21hbnVmX2lkcyk7CitFWFBPUlRfU1lNQk9MKG5hbmRfZmxhc2hfaWRzKTsKIAotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IgKCJUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIk5hbmQgZGV2aWNlICYgbWFudWZhY3R1cmVyIElEJ3MiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOYW5kIGRldmljZSAmIG1hbnVmYWN0dXJlciBJRHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMKaW5kZXggYTBhZjkyYy4uZWJkNjRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMKQEAgLTM2OSw3ICszNjksNyBAQAogCS8qIEluaXRpYWxpemUgdGhlIE5BTkQgZmxhc2ggcGFyYW1ldGVycyAqLwogCW5zLT5idXN3ID0gY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYgPyAxNiA6IDg7CiAJbnMtPmdlb20udG90c3ogICAgPSBtdGQtPnNpemU7Ci0JbnMtPmdlb20ucGdzeiAgICAgPSBtdGQtPm9vYmJsb2NrOworCW5zLT5nZW9tLnBnc3ogICAgID0gbXRkLT53cml0ZXNpemU7CiAJbnMtPmdlb20ub29ic3ogICAgPSBtdGQtPm9vYnNpemU7CiAJbnMtPmdlb20uc2Vjc3ogICAgPSBtdGQtPmVyYXNlc2l6ZTsKIAlucy0+Z2VvbS5wZ3N6b29iICA9IG5zLT5nZW9tLnBnc3ogKyBucy0+Z2VvbS5vb2JzejsKQEAgLTEwNzEsNjggKzEwNzEsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLW5zX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgbmFuZHNpbSAqbnMgPSAoc3RydWN0IG5hbmRzaW0gKikoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5wcml2OwotCi0Jc3dpdGNoIChjbWQpIHsKLQotCS8qIHNldCBDTEUgbGluZSBoaWdoICovCi0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6Ci0JCU5TX0RCRygibnNfaHdjb250cm9sOiBzdGFydCBjb21tYW5kIGxhdGNoIGN5Y2xlc1xuIik7Ci0JCW5zLT5saW5lcy5jbGUgID0gMTsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgQ0xFIGxpbmUgbG93ICovCi0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6Ci0JCU5TX0RCRygibnNfaHdjb250cm9sOiBzdG9wIGNvbW1hbmQgbGF0Y2ggY3ljbGVzXG4iKTsKLQkJbnMtPmxpbmVzLmNsZSAgPSAwOwotCQlicmVhazsKLQotCS8qIHNldCBBTEUgbGluZSBoaWdoICovCi0JY2FzZSBOQU5EX0NUTF9TRVRBTEU6Ci0JCU5TX0RCRygibnNfaHdjb250cm9sOiBzdGFydCBhZGRyZXNzIGxhdGNoIGN5Y2xlc1xuIik7Ci0JCW5zLT5saW5lcy5hbGUgICA9IDE7Ci0JCWJyZWFrOwotCi0JLyogc2V0IEFMRSBsaW5lIGxvdyAqLwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotCQlOU19EQkcoIm5zX2h3Y29udHJvbDogc3RvcCBhZGRyZXNzIGxhdGNoIGN5Y2xlc1xuIik7Ci0JCW5zLT5saW5lcy5hbGUgID0gMDsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgV1AgbGluZSBoaWdoICovCi0JY2FzZSBOQU5EX0NUTF9TRVRXUDoKLQkJTlNfREJHKCJuc19od2NvbnRyb2w6IGVuYWJsZSB3cml0ZSBwcm90ZWN0aW9uXG4iKTsKLQkJbnMtPmxpbmVzLndwID0gMTsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgV1AgbGluZSBsb3cgKi8KLQljYXNlIE5BTkRfQ1RMX0NMUldQOgotCQlOU19EQkcoIm5zX2h3Y29udHJvbDogZGlzYWJsZSB3cml0ZSBwcm90ZWN0aW9uXG4iKTsKLQkJbnMtPmxpbmVzLndwID0gMDsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgQ0UgbGluZSBsb3cgKi8KLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKLQkJTlNfREJHKCJuc19od2NvbnRyb2w6IGVuYWJsZSBjaGlwXG4iKTsKLQkJbnMtPmxpbmVzLmNlID0gMTsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgQ0UgbGluZSBoaWdoICovCi0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCU5TX0RCRygibnNfaHdjb250cm9sOiBkaXNhYmxlIGNoaXBcbiIpOwotCQlucy0+bGluZXMuY2UgPSAwOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCU5TX0VSUigiaHdjb250cm9sOiB1bmtub3duIGNvbW1hbmRcbiIpOwotICAgICAgICB9Ci0KLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyB1X2NoYXIKIG5zX25hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewpAQCAtMTM1OSw2ICsxMjk3LDE4IEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgdm9pZCBuc19od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBiaXRtYXNrKQoreworCXN0cnVjdCBuYW5kc2ltICpucyA9ICgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPnByaXY7CisKKwlucy0+bGluZXMuY2xlID0gYml0bWFzayAmIE5BTkRfQ0xFID8gMSA6IDA7CisJbnMtPmxpbmVzLmFsZSA9IGJpdG1hc2sgJiBOQU5EX0FMRSA/IDEgOiAwOworCW5zLT5saW5lcy5jZSA9IGJpdG1hc2sgJiBOQU5EX05DRSA/IDEgOiAwOworCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQluc19uYW5kX3dyaXRlX2J5dGUobXRkLCBjbWQpOworfQorCiBzdGF0aWMgaW50CiBuc19kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CkBAIC0xMzc3LDE3ICsxMzI3LDYgQEAKIH0KIAogc3RhdGljIHZvaWQKLW5zX25hbmRfd3JpdGVfd29yZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDE2X3Qgd29yZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXY7Ci0KLQlOU19EQkcoIndyaXRlX3dvcmRcbiIpOwotCi0JY2hpcC0+d3JpdGVfYnl0ZShtdGQsIHdvcmQgJiAweEZGKTsKLQljaGlwLT53cml0ZV9ieXRlKG10ZCwgd29yZCA+PiA4KTsKLX0KLQotc3RhdGljIHZvaWQKIG5zX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKICAgICAgICAgc3RydWN0IG5hbmRzaW0gKm5zID0gKHN0cnVjdCBuYW5kc2ltICopKChzdHJ1Y3QgbmFuZF9jaGlwICopbXRkLT5wcml2KS0+cHJpdjsKQEAgLTE1MTQsMTYgKzE0NTMsMTQgQEAKIAkvKgogCSAqIFJlZ2lzdGVyIHNpbXVsYXRvcidzIGNhbGxiYWNrcy4KIAkgKi8KLQljaGlwLT5od2NvbnRyb2wgID0gbnNfaHdjb250cm9sOworCWNoaXAtPmNtZF9jdHJsCSA9IG5zX2h3Y29udHJvbDsKIAljaGlwLT5yZWFkX2J5dGUgID0gbnNfbmFuZF9yZWFkX2J5dGU7CiAJY2hpcC0+ZGV2X3JlYWR5ICA9IG5zX2RldmljZV9yZWFkeTsKLQljaGlwLT53cml0ZV9ieXRlID0gbnNfbmFuZF93cml0ZV9ieXRlOwogCWNoaXAtPndyaXRlX2J1ZiAgPSBuc19uYW5kX3dyaXRlX2J1ZjsKIAljaGlwLT5yZWFkX2J1ZiAgID0gbnNfbmFuZF9yZWFkX2J1ZjsKIAljaGlwLT52ZXJpZnlfYnVmID0gbnNfbmFuZF92ZXJpZnlfYnVmOwotCWNoaXAtPndyaXRlX3dvcmQgPSBuc19uYW5kX3dyaXRlX3dvcmQ7CiAJY2hpcC0+cmVhZF93b3JkICA9IG5zX25hbmRfcmVhZF93b3JkOwotCWNoaXAtPmVjY21vZGUgICAgPSBOQU5EX0VDQ19TT0ZUOworCWNoaXAtPmVjYy5tb2RlICAgPSBOQU5EX0VDQ19TT0ZUOwogCWNoaXAtPm9wdGlvbnMgICB8PSBOQU5EX1NLSVBfQkJUU0NBTjsKIAogCS8qCkBAIC0xNTQ2LDYgKzE0ODMsOCBAQAogCQljaGlwLT5vcHRpb25zIHw9IE5BTkRfQlVTV0lEVEhfMTY7CiAJfQogCisJbnNtdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKIAlpZiAoKHJldHZhbCA9IG5hbmRfc2Nhbihuc210ZCwgMSkpICE9IDApIHsKIAkJTlNfRVJSKCJjYW4ndCByZWdpc3RlciBOQU5EIFNpbXVsYXRvclxuIik7CiAJCWlmIChyZXR2YWwgPiAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMgYi9kcml2ZXJzL210ZC9uYW5kL25kZmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZThkMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiAgZHJpdmVycy9tdGQvbmRmYy5jCisgKgorICogIE92ZXJ2aWV3OgorICogICBQbGF0Zm9ybSBpbmRlcGVuZGVuZCBkcml2ZXIgZm9yIE5ERkMgKE5hbkQgRmxhc2ggQ29udHJvbGxlcikKKyAqICAgaW50ZWdyYXRlZCBpbnRvIEVQNDQwIGNvcmVzCisgKgorICogIEF1dGhvcjogVGhvbWFzIEdsZWl4bmVyCisgKgorICogIENvcHlyaWdodCAyMDA2IElCTQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mCSB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQlMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uZGZjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2libTQ0eC5oPgorCitzdHJ1Y3QgbmRmY19uYW5kX210ZCB7CisJc3RydWN0IG10ZF9pbmZvCQkJbXRkOworCXN0cnVjdCBuYW5kX2NoaXAJCWNoaXA7CisJc3RydWN0IHBsYXRmb3JtX25hbmRfY2hpcAkqcGxfY2hpcDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmRmY19uYW5kX210ZCBuZGZjX210ZFtOREZDX01BWF9CQU5LU107CisKK3N0cnVjdCBuZGZjX2NvbnRyb2xsZXIgeworCXZvaWQgX19pb21lbQkJKm5kZmNiYXNlOworCXN0cnVjdCBuYW5kX2h3X2NvbnRyb2wJbmRmY19jb250cm9sOworCWF0b21pY190CQljaGlsZHNfYWN0aXZlOworfTsKKworc3RhdGljIHN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgbmRmY19jdHJsOworCitzdGF0aWMgdm9pZCBuZGZjX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3sKKwl1aW50MzJfdCBjY3I7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9ICZuZGZjX2N0cmw7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZGNoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG5kZmNfbmFuZF9tdGQgKm5hbmRtdGQgPSBuYW5kY2hpcC0+cHJpdjsKKwlzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwICpwY2hpcCA9IG5hbmRtdGQtPnBsX2NoaXA7CisKKwljY3IgPSBfX3Jhd19yZWFkbChuZGZjLT5uZGZjYmFzZSArIE5ERkNfQ0NSKTsKKwlpZiAoY2hpcCA+PSAwKSB7CisJCWNjciAmPSB+TkRGQ19DQ1JfQlNfTUFTSzsKKwkJY2NyIHw9IE5ERkNfQ0NSX0JTKGNoaXAgKyBwY2hpcC0+Y2hpcF9vZmZzZXQpOworCX0gZWxzZQorCQljY3IgfD0gTkRGQ19DQ1JfUkVTRVRfQ0U7CisJd3JpdGVsKGNjciwgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0NDUik7Cit9CisKK3N0YXRpYyB2b2lkIG5kZmNfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CisKKwlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQl3cml0ZWwoY21kICYgMHhGRiwgY2hpcC0+SU9fQUREUl9XICsgTkRGQ19DTUQpOworCWVsc2UKKwkJd3JpdGVsKGNtZCAmIDB4RkYsIGNoaXAtPklPX0FERFJfVyArIE5ERkNfQUxFKTsKK30KKworc3RhdGljIGludCBuZGZjX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCisJcmV0dXJuIF9fcmF3X3JlYWRsKG5kZmMtPm5kZmNiYXNlICsgTkRGQ19TVEFUKSAmIE5ERkNfU1RBVF9JU19SRUFEWTsKK30KKworc3RhdGljIHZvaWQgbmRmY19lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQoreworCXVpbnQzMl90IGNjcjsKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyICpuZGZjID0gJm5kZmNfY3RybDsKKworCWNjciA9IF9fcmF3X3JlYWRsKG5kZmMtPm5kZmNiYXNlICsgTkRGQ19DQ1IpOworCWNjciB8PSBOREZDX0NDUl9SRVNFVF9FQ0M7CisJX19yYXdfd3JpdGVsKGNjciwgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0NDUik7CisJd21iKCk7Cit9CisKK3N0YXRpYyBpbnQgbmRmY19jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJICAgICAgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCit7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9ICZuZGZjX2N0cmw7CisJdWludDMyX3QgZWNjOworCXVpbnQ4X3QgKnAgPSAodWludDhfdCAqKSZlY2M7CisKKwl3bWIoKTsKKwllY2MgPSBfX3Jhd19yZWFkbChuZGZjLT5uZGZjYmFzZSArIE5ERkNfRUNDKTsKKwllY2NfY29kZVswXSA9IHBbMV07CisJZWNjX2NvZGVbMV0gPSBwWzJdOworCWVjY19jb2RlWzJdID0gcFszXTsKKworCXJldHVybiAwOworfQorCisvKgorICogU3BlZWR1cHMgZm9yIGJ1ZmZlciByZWFkL3dyaXRlL3ZlcmlmeQorICoKKyAqIE5ERkMgYWxsb3dzIDMyYml0IHJlYWQvd3JpdGUgb2YgZGF0YS4gU28gd2UgY2FuIHNwZWVkIHVwIHRoZSBidWZmZXIKKyAqIGZ1bmN0aW9ucy4gTm8gZnVydGhlciBjaGVja2luZywgYXMgbmFuZF9iYXNlIHdpbGwgYWx3YXlzIHJlYWQvd3JpdGUKKyAqIHBhZ2UgYWxpZ25lZC4KKyAqLworc3RhdGljIHZvaWQgbmRmY19yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCXVpbnQzMl90ICpwID0gKHVpbnQzMl90ICopIGJ1ZjsKKworCWZvcig7bGVuID4gMDsgbGVuIC09IDQpCisJCSpwKysgPSBfX3Jhd19yZWFkbChuZGZjLT5uZGZjYmFzZSArIE5ERkNfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkIG5kZmNfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9ICZuZGZjX2N0cmw7CisJdWludDMyX3QgKnAgPSAodWludDMyX3QgKikgYnVmOworCisJZm9yKDtsZW4gPiAwOyBsZW4gLT0gNCkKKwkJX19yYXdfd3JpdGVsKCpwKyssIG5kZmMtPm5kZmNiYXNlICsgTkRGQ19EQVRBKTsKK30KKworc3RhdGljIGludCBuZGZjX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyICpuZGZjID0gJm5kZmNfY3RybDsKKwl1aW50MzJfdCAqcCA9ICh1aW50MzJfdCAqKSBidWY7CisKKwlmb3IoO2xlbiA+IDA7IGxlbiAtPSA0KQorCQlpZiAoKnArKyAhPSBfX3Jhd19yZWFkbChuZGZjLT5uZGZjYmFzZSArIE5ERkNfREFUQSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgY2hpcCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgbmRmY19jaGlwX2luaXQoc3RydWN0IG5kZmNfbmFuZF9tdGQgKm10ZCkKK3sKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyICpuZGZjID0gJm5kZmNfY3RybDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gJm10ZC0+Y2hpcDsKKworCWNoaXAtPklPX0FERFJfUiA9IG5kZmMtPm5kZmNiYXNlICsgTkRGQ19EQVRBOworCWNoaXAtPklPX0FERFJfVyA9IG5kZmMtPm5kZmNiYXNlICsgTkRGQ19EQVRBOworCWNoaXAtPmNtZF9jdHJsID0gbmRmY19od2NvbnRyb2w7CisJY2hpcC0+ZGV2X3JlYWR5ID0gbmRmY19yZWFkeTsKKwljaGlwLT5zZWxlY3RfY2hpcCA9IG5kZmNfc2VsZWN0X2NoaXA7CisJY2hpcC0+Y2hpcF9kZWxheSA9IDUwOworCWNoaXAtPnByaXYgPSBtdGQ7CisJY2hpcC0+b3B0aW9ucyA9IG10ZC0+cGxfY2hpcC0+b3B0aW9uczsKKwljaGlwLT5jb250cm9sbGVyID0gJm5kZmMtPm5kZmNfY29udHJvbDsKKwljaGlwLT5yZWFkX2J1ZiA9IG5kZmNfcmVhZF9idWY7CisJY2hpcC0+d3JpdGVfYnVmID0gbmRmY193cml0ZV9idWY7CisJY2hpcC0+dmVyaWZ5X2J1ZiA9IG5kZmNfdmVyaWZ5X2J1ZjsKKwljaGlwLT5lY2MuY29ycmVjdCA9IG5hbmRfY29ycmVjdF9kYXRhOworCWNoaXAtPmVjYy5od2N0bCA9IG5kZmNfZW5hYmxlX2h3ZWNjOworCWNoaXAtPmVjYy5jYWxjdWxhdGUgPSBuZGZjX2NhbGN1bGF0ZV9lY2M7CisJY2hpcC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKKwljaGlwLT5lY2Muc2l6ZSA9IDI1NjsKKwljaGlwLT5lY2MuYnl0ZXMgPSAzOworCWNoaXAtPmVjY2xheW91dCA9IG10ZC0+cGxfY2hpcC0+ZWNjbGF5b3V0OworCW10ZC0+bXRkLnByaXYgPSBjaGlwOworCW10ZC0+bXRkLm93bmVyID0gVEhJU19NT0RVTEU7Cit9CisKK3N0YXRpYyBpbnQgbmRmY19jaGlwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX25hbmRfY2hpcCAqbmMgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbmRmY19jaGlwX3NldHRpbmdzICpzZXR0aW5ncyA9IG5jLT5wcml2OworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCXN0cnVjdCBuZGZjX25hbmRfbXRkICpuYW5kbXRkOworCisJaWYgKG5jLT5jaGlwX29mZnNldCA+PSBOREZDX01BWF9CQU5LUyB8fCBuYy0+bnJfY2hpcHMgPiBOREZDX01BWF9CQU5LUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXQgdGhlIGJhbmsgc2V0dGluZ3MgKi8KKwlfX3Jhd193cml0ZWwoc2V0dGluZ3MtPmJhbmtfc2V0dGluZ3MsCisJCSAgICAgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0JDRkcwICsgKG5jLT5jaGlwX29mZnNldCA8PCAyKSk7CisKKwluYW5kbXRkID0gJm5kZmNfbXRkW3BkZXYtPmlkXTsKKwlpZiAobmFuZG10ZC0+cGxfY2hpcCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW5hbmRtdGQtPnBsX2NoaXAgPSBuYzsKKwluZGZjX2NoaXBfaW5pdChuYW5kbXRkKTsKKworCS8qIFNjYW4gZm9yIGNoaXBzICovCisJaWYgKG5hbmRfc2NhbigmbmFuZG10ZC0+bXRkLCBuYy0+bnJfY2hpcHMpKSB7CisJCW5hbmRtdGQtPnBsX2NoaXAgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlwcmludGsoIk51bWJlciBvZiBwYXJ0aXRpb25zICVkXG4iLCBuYy0+bnJfcGFydGl0aW9ucyk7CisJaWYgKG5jLT5ucl9wYXJ0aXRpb25zKSB7CisJCS8qIEFkZCB0aGUgZnVsbCBkZXZpY2UsIHNvIGNvbXBsZXRlIGR1bXBzIGNhbiBiZSBtYWRlICovCisJCWFkZF9tdGRfZGV2aWNlKCZuYW5kbXRkLT5tdGQpOworCQlhZGRfbXRkX3BhcnRpdGlvbnMoJm5hbmRtdGQtPm10ZCwgbmMtPnBhcnRpdGlvbnMsCisJCQkJICAgbmMtPm5yX3BhcnRpdGlvbnMpOworCisJfSBlbHNlCisjZWxzZQorCQlhZGRfbXRkX2RldmljZSgmbmFuZG10ZC0+bXRkKTsKKyNlbmRpZgorCisJYXRvbWljX2luYygmbmRmYy0+Y2hpbGRzX2FjdGl2ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmRmY19jaGlwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5kZmNfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9uYW5kX2N0cmwgKm5jID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG5kZmNfY29udHJvbGxlcl9zZXR0aW5ncyAqc2V0dGluZ3MgPSBuYy0+cHJpdjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlOworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBwaHlzID0gc2V0dGluZ3MtPm5kZmNfZXJwbiB8IHJlcy0+c3RhcnQ7CisKKwluZGZjLT5uZGZjYmFzZSA9IGlvcmVtYXA2NChwaHlzLCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIW5kZmMtPm5kZmNiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTkRGQzogaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlfX3Jhd193cml0ZWwoc2V0dGluZ3MtPmNjcl9zZXR0aW5ncywgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0NDUik7CisKKwlzcGluX2xvY2tfaW5pdCgmbmRmYy0+bmRmY19jb250cm9sLmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5kZmMtPm5kZmNfY29udHJvbC53cSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGZjKTsKKworCXByaW50aygiTkRGQyBOQU5EIERyaXZlciBpbml0aWFsaXplZC4gQ2hpcC1SZXY6IDB4JTA4eFxuIiwKKwkgICAgICAgX19yYXdfcmVhZGwobmRmYy0+bmRmY2Jhc2UgKyBOREZDX1JFVklEKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZGZjX25hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGF0b21pY19yZWFkKCZuZGZjLT5jaGlsZHNfYWN0aXZlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChuZGZjKSB7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCQlpb3VubWFwKG5kZmNfY3RybC5uZGZjYmFzZSk7CisJCW5kZmNfY3RybC5uZGZjYmFzZSA9IE5VTEw7CisJfQorCXJldHVybiAwOworfQorCisvKiBkcml2ZXIgZGV2aWNlIHJlZ2lzdHJhdGlvbiAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBuZGZjX2NoaXBfZHJpdmVyID0geworCS5wcm9iZQkJPSBuZGZjX2NoaXBfcHJvYmUsCisJLnJlbW92ZQkJPSBuZGZjX2NoaXBfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJuZGZjLWNoaXAiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbmRmY19uYW5kX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbmRmY19uYW5kX3Byb2JlLAorCS5yZW1vdmUJCT0gbmRmY19uYW5kX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibmRmYy1uYW5kIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5kZmNfbmFuZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pbml0KCZuZGZjX2N0cmwubmRmY19jb250cm9sLmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5kZmNfY3RybC5uZGZjX2NvbnRyb2wud3EpOworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZuZGZjX25hbmRfZHJpdmVyKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZuZGZjX2NoaXBfZHJpdmVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbmRmY19uYW5kX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbmRmY19jaGlwX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm5kZmNfbmFuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChuZGZjX25hbmRfaW5pdCk7Cittb2R1bGVfZXhpdChuZGZjX25hbmRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQbGF0Zm9ybSBkcml2ZXIgZm9yIE5ERkMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcHBjaGFtZWxlb25ldmIuYyBiL2RyaXZlcnMvbXRkL25hbmQvcHBjaGFtZWxlb25ldmIuYwppbmRleCA5MWE5NWYzLi4yMmZhNjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3BwY2hhbWVsZW9uZXZiLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9wcGNoYW1lbGVvbmV2Yi5jCkBAIC01OCwyMSArNTgsMjEgQEAKIC8qCiAgKiBNVEQgc3RydWN0dXJlIGZvciBQUENoYW1lbGVvbkVWQiBib2FyZAogICovCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpwcGNoYW1lbGVvbl9tdGQgCT0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKnBwY2hhbWVsZW9uX210ZCA9IE5VTEw7CiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpwcGNoYW1lbGVvbmV2Yl9tdGQgPSBOVUxMOwogCiAvKgogICogTW9kdWxlIHN0dWZmCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBwY2hhbWVsZW9uX2Zpb19wYmFzZSAJPSBDRkdfTkFORDBfUEFERFI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGNoYW1lbGVvbl9maW9fcGJhc2UgPSBDRkdfTkFORDBfUEFERFI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGNoYW1lbGVvbmV2Yl9maW9fcGJhc2UgPSBDRkdfTkFORDFfUEFERFI7CiAKICNpZmRlZiBNT0RVTEUKIG1vZHVsZV9wYXJhbShwcGNoYW1lbGVvbl9maW9fcGJhc2UsIHVsb25nLCAwKTsKIG1vZHVsZV9wYXJhbShwcGNoYW1lbGVvbmV2Yl9maW9fcGJhc2UsIHVsb25nLCAwKTsKICNlbHNlCi1fX3NldHVwKCJwcGNoYW1lbGVvbl9maW9fcGJhc2U9IixwcGNoYW1lbGVvbl9maW9fcGJhc2UpOwotX19zZXR1cCgicHBjaGFtZWxlb25ldmJfZmlvX3BiYXNlPSIscHBjaGFtZWxlb25ldmJfZmlvX3BiYXNlKTsKK19fc2V0dXAoInBwY2hhbWVsZW9uX2Zpb19wYmFzZT0iLCBwcGNoYW1lbGVvbl9maW9fcGJhc2UpOworX19zZXR1cCgicHBjaGFtZWxlb25ldmJfZmlvX3BiYXNlPSIsIHBwY2hhbWVsZW9uZXZiX2Zpb19wYmFzZSk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwpAQCAtODAsODIgKzgwLDk2IEBACiAgKiBEZWZpbmUgc3RhdGljIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZXMKICAqLwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvX2hpW10gPSB7Ci0JeyBuYW1lOiAiUFBDaGFtZWxlb24gSEkgTmFuZCBGbGFzaCIsCi0JCSAgb2Zmc2V0OiAwLAotCQkgIHNpemU6IDEyOCoxMDI0KjEwMjQgfQorICAgICAgeyAubmFtZSA9ICJQUENoYW1lbGVvbiBISSBOYW5kIEZsYXNoIiwKKwlvZmZzZXQgPSAwLAorCS5zaXplID0gMTI4ICogMTAyNCAqIDEwMjQKKyAgICAgIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb19tZVtdID0gewotCXsgbmFtZTogIlBQQ2hhbWVsZW9uIE1FIE5hbmQgRmxhc2giLAotCQkgIG9mZnNldDogMCwKLQkJICBzaXplOiAzMioxMDI0KjEwMjQgfQorICAgICAgeyAubmFtZSA9ICJQUENoYW1lbGVvbiBNRSBOYW5kIEZsYXNoIiwKKwkub2Zmc2V0ID0gMCwKKwkuc2l6ZSA9IDMyICogMTAyNCAqIDEwMjQKKyAgICAgIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb19ldmJbXSA9IHsKLQl7IG5hbWU6ICJQUENoYW1lbGVvbkVWQiBOYW5kIEZsYXNoIiwKLQkJICBvZmZzZXQ6IDAsCi0JCSAgc2l6ZTogMzIqMTAyNCoxMDI0IH0KKyAgICAgIHsgLm5hbWUgPSAiUFBDaGFtZWxlb25FVkIgTmFuZCBGbGFzaCIsCisJLm9mZnNldCA9IDAsCisJLnNpemUgPSAzMiAqIDEwMjQgKiAxMDI0CisgICAgICB9CiB9OwogCiAjZGVmaW5lIE5VTV9QQVJUSVRJT05TIDEKIAotZXh0ZXJuIGludCBwYXJzZV9jbWRsaW5lX3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCi0JCQkJICAgIHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAotCQkJCSAgICBjb25zdCBjaGFyICptdGRfaWQpOworZXh0ZXJuIGludCBwYXJzZV9jbWRsaW5lX3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsIHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLCBjb25zdCBjaGFyICptdGRfaWQpOwogI2VuZGlmCiAKLQogLyoKICAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCiAgKi8KLXN0YXRpYyB2b2lkIHBwY2hhbWVsZW9uX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGludCBjbWQpCitzdGF0aWMgdm9pZCBwcGNoYW1lbGVvbl9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGRpbmZvLCBpbnQgY21kLAorCQkJCSAgdW5zaWduZWQgaW50IGN0cmwpCiB7Ci0Jc3dpdGNoKGNtZCkgeworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLSAgICAgICAgCU1BQ1JPX05BTkRfQ1RMX1NFVENMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUkNMRToKLSAgICAgICAgCU1BQ1JPX05BTkRfQ1RMX0NMUkNMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKLSAgICAgICAgCU1BQ1JPX05BTkRfQ1RMX1NFVEFMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUkFMRToKLSAgICAgICAgCU1BQ1JPX05BTkRfQ1RMX0NMUkFMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKyNlcnJvciBNaXNzaW5nIGhlYWRlcmZpbGVzLiBObyB3YXkgdG8gZml4IHRoaXMuIC10Z2x4CisJCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgTkFORF9DVExfU0VUQ0xFOgorCQkJTUFDUk9fTkFORF9DVExfU0VUQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7CisJCQlicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9DTFJDTEU6CisJCQlNQUNST19OQU5EX0NUTF9DTFJDTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQwX1BBRERSKTsKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKKwkJCU1BQ1JPX05BTkRfQ1RMX1NFVEFMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOworCQkJYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSQUxFOgorCQkJTUFDUk9fTkFORF9DVExfQ0xSQUxFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7CisJCQlicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9TRVROQ0U6CiAJCQlNQUNST19OQU5EX0VOQUJMRV9DRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKIAkJCU1BQ1JPX05BTkRfRElTQUJMRV9DRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKKwkJCWJyZWFrOworCQl9CiAJfQorCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKIH0KIAotc3RhdGljIHZvaWQgcHBjaGFtZWxlb25ldmJfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkaW5mbywgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHBwY2hhbWVsZW9uZXZiX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGludCBjbWQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY3RybCkKIHsKLQlzd2l0Y2goY21kKSB7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfU0VUQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfQ0xSQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfU0VUQUxFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfQ0xSQUxFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfU0VUTkNFOgotICAgICAgICAJTUFDUk9fTkFORF9FTkFCTEVfQ0UoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0gICAgICAgIAlNQUNST19OQU5EX0RJU0FCTEVfQ0UoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKLQkJYnJlYWs7CisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisjZXJyb3IgTWlzc2luZyBoZWFkZXJmaWxlcy4gTm8gd2F5IHRvIGZpeCB0aGlzLiAtdGdseAorCQlzd2l0Y2ggKGNtZCkgeworCQljYXNlIE5BTkRfQ1RMX1NFVENMRToKKwkJCU1BQ1JPX05BTkRfQ1RMX1NFVENMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDFfUEFERFIpOworCQkJYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgorCQkJTUFDUk9fTkFORF9DVExfQ0xSQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7CisJCQlicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9TRVRBTEU6CisJCQlNQUNST19OQU5EX0NUTF9TRVRBTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX0NMUkFMRToKKwkJCU1BQ1JPX05BTkRfQ1RMX0NMUkFMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDFfUEFERFIpOworCQkJYnJlYWs7CisJCWNhc2UgTkFORF9DVExfU0VUTkNFOgorCQkJTUFDUk9fTkFORF9FTkFCTEVfQ0UoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKKwkJCU1BQ1JPX05BTkRfRElTQUJMRV9DRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDFfUEFERFIpOworCQkJYnJlYWs7CisJCX0KIAl9CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOwogfQogCiAjaWZkZWYgVVNFX1JFQURZX0JVU1lfUElOCkBAIC0xNjQsMTUgKzE3OCwxNSBAQAogICovCiBzdGF0aWMgaW50IHBwY2hhbWVsZW9uX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm1pbmZvKQogewotCWlmIChpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfSVIpICYgTkFORF9SQl9HUElPX1BJTikKKwlpZiAoaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9JUikgJiBOQU5EX1JCX0dQSU9fUElOKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwcGNoYW1lbGVvbmV2Yl9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptaW5mbykKIHsKLQlpZiAoaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX0lSKSAmIE5BTkRfRVZCX1JCX0dQSU9fUElOKQotCXJldHVybiAxOworCWlmIChpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX0lSKSAmIE5BTkRfRVZCX1JCX0dQSU9fUElOKQorCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMTg1LDcgKzE5OSw3IEBACiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHBwY2hhbWVsZW9uZXZiX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBwcGNoYW1lbGVvbmV2Yl9pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAljb25zdCBjaGFyICpwYXJ0X3R5cGUgPSAwOwpAQCAtMTk0LDEzICsyMDgsMTEgQEAKIAl2b2lkIF9faW9tZW0gKnBwY2hhbWVsZW9uX2Zpb19iYXNlOwogCXZvaWQgX19pb21lbSAqcHBjaGFtZWxlb25ldmJfZmlvX2Jhc2U7CiAKLQogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkqIFByb2Nlc3NvciBtb2R1bGUgTkFORCAoaWYgYW55KSAqCiAJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLwotCXBwY2hhbWVsZW9uX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKwotCQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlwcGNoYW1lbGVvbl9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBwY2hhbWVsZW9uX210ZCkgewogCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBQUENoYW1lbGVvbiBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjA4LDYzICsyMjAsNjUgQEAKIAogCS8qIG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCiAJcHBjaGFtZWxlb25fZmlvX2Jhc2UgPSBpb3JlbWFwKHBwY2hhbWVsZW9uX2Zpb19wYmFzZSwgU1pfNE0pOwotCWlmKCFwcGNoYW1lbGVvbl9maW9fYmFzZSkgeworCWlmICghcHBjaGFtZWxlb25fZmlvX2Jhc2UpIHsKIAkJcHJpbnRrKCJpb3JlbWFwIFBQQ2hhbWVsZW9uIE5BTkQgZmxhc2ggZmFpbGVkXG4iKTsKIAkJa2ZyZWUocHBjaGFtZWxlb25fbXRkKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmcHBjaGFtZWxlb25fbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnBwY2hhbWVsZW9uX210ZFsxXSk7CiAKIAkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KLQltZW1zZXQoKGNoYXIgKikgcHBjaGFtZWxlb25fbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KHBwY2hhbWVsZW9uX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAlwcGNoYW1lbGVvbl9tdGQtPnByaXYgPSB0aGlzOworCXBwY2hhbWVsZW9uX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotICAgICAgICAvKiBJbml0aWFsaXplIEdQSU9zICovCisJLyogSW5pdGlhbGl6ZSBHUElPcyAqLwogCS8qIFBpbiBtYXBwaW5nIGZvciBOQU5EIGNoaXAgKi8KIAkvKgotCQlDRQlHUElPXzAxCi0JCUNMRQlHUElPXzAyCi0JCUFMRQlHUElPXzAzCi0JCVIvQglHUElPXzA0Ci0JKi8KKwkgICBDRSAgIEdQSU9fMDEKKwkgICBDTEUgIEdQSU9fMDIKKwkgICBBTEUgIEdQSU9fMDMKKwkgICBSL0IgIEdQSU9fMDQKKwkgKi8KIAkvKiBvdXRwdXQgc2VsZWN0ICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9PU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfT1NSSCkgJiAweEMwRkZGRkZGKTsKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9PU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX09TUkgpICYgMHhDMEZGRkZGRik7CiAJLyogdGhyZWUtc3RhdGUgc2VsZWN0ICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVFNSSCkgJiAweEMwRkZGRkZGKTsKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkgpICYgMHhDMEZGRkZGRik7CiAJLyogZW5hYmxlIG91dHB1dCBkcml2ZXIgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RDUiwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RDUikgfCBOQU5EX25DRV9HUElPX1BJTiB8IE5BTkRfQ0xFX0dQSU9fUElOIHwgTkFORF9BTEVfR1BJT19QSU4pOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RDUiwKKwkJIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVENSKSB8IE5BTkRfbkNFX0dQSU9fUElOIHwgTkFORF9DTEVfR1BJT19QSU4gfCBOQU5EX0FMRV9HUElPX1BJTik7CiAjaWZkZWYgVVNFX1JFQURZX0JVU1lfUElOCiAJLyogdGhyZWUtc3RhdGUgc2VsZWN0ICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVFNSSCkgJiAweEZGM0ZGRkZGKTsKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkgpICYgMHhGRjNGRkZGRik7CiAJLyogaGlnaC1pbXBlZGVjZW5jZSAqLwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVENSLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVENSKSAmICh+TkFORF9SQl9HUElPX1BJTikpOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RDUiwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UQ1IpICYgKH5OQU5EX1JCX0dQSU9fUElOKSk7CiAJLyogaW5wdXQgc2VsZWN0ICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9JU1IxSCwgKGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9JU1IxSCkgJiAweEZGM0ZGRkZGKSB8IDB4MDA0MDAwMDApOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX0lTUjFILAorCQkgKGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfSVNSMUgpICYgMHhGRjNGRkZGRikgfCAweDAwNDAwMDAwKTsKICNlbmRpZgogCiAJLyogaW5zZXJ0IGNhbGxiYWNrcyAqLwogCXRoaXMtPklPX0FERFJfUiA9IHBwY2hhbWVsZW9uX2Zpb19iYXNlOwogCXRoaXMtPklPX0FERFJfVyA9IHBwY2hhbWVsZW9uX2Zpb19iYXNlOwotCXRoaXMtPmh3Y29udHJvbCA9IHBwY2hhbWVsZW9uX2h3Y29udHJvbDsKKwl0aGlzLT5jbWRfY3RybCA9IHBwY2hhbWVsZW9uX2h3Y29udHJvbDsKICNpZmRlZiBVU0VfUkVBRFlfQlVTWV9QSU4KIAl0aGlzLT5kZXZfcmVhZHkgPSBwcGNoYW1lbGVvbl9kZXZpY2VfcmVhZHk7CiAjZW5kaWYKIAl0aGlzLT5jaGlwX2RlbGF5ID0gTkFORF9CSUdfREVMQVlfVVM7CiAJLyogRUNDIG1vZGUgKi8KLQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CiAKIAkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKGl0IGNvdWxkIG5vdCBiZSBtb3VudGVkKSAqLwotCWlmIChuYW5kX3NjYW4gKHBwY2hhbWVsZW9uX210ZCwgMSkpIHsKKwlpZiAobmFuZF9zY2FuKHBwY2hhbWVsZW9uX210ZCwgMSkpIHsKIAkJaW91bm1hcCgodm9pZCAqKXBwY2hhbWVsZW9uX2Zpb19iYXNlKTsKLQkJa2ZyZWUgKHBwY2hhbWVsZW9uX210ZCk7CisJCWtmcmVlKHBwY2hhbWVsZW9uX210ZCk7CiAJCWdvdG8gbmFuZF9ldmJfaW5pdDsKIAl9Ci0KICNpZm5kZWYgVVNFX1JFQURZX0JVU1lfUElOCiAJLyogQWRqdXN0IGRlbGF5IGlmIG5lY2Vzc2FyeSAqLwogCWlmIChwcGNoYW1lbGVvbl9tdGQtPnNpemUgPT0gTkFORF9TTUFMTF9TSVpFKQpAQCAtMjc1LDEyICsyODksMTEgQEAKIAlwcGNoYW1lbGVvbl9tdGQtPm5hbWUgPSAicHBjaGFtZWxlb24tbmFuZCI7CiAJbXRkX3BhcnRzX25iID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMocHBjaGFtZWxlb25fbXRkLCBwYXJ0X3Byb2JlcywgJm10ZF9wYXJ0cywgMCk7CiAJaWYgKG10ZF9wYXJ0c19uYiA+IDApCi0JICBwYXJ0X3R5cGUgPSAiY29tbWFuZCBsaW5lIjsKKwkJcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CiAJZWxzZQotCSAgbXRkX3BhcnRzX25iID0gMDsKKwkJbXRkX3BhcnRzX25iID0gMDsKICNlbmRpZgotCWlmIChtdGRfcGFydHNfbmIgPT0gMCkKLQl7CisJaWYgKG10ZF9wYXJ0c19uYiA9PSAwKSB7CiAJCWlmIChwcGNoYW1lbGVvbl9tdGQtPnNpemUgPT0gTkFORF9TTUFMTF9TSVpFKQogCQkJbXRkX3BhcnRzID0gcGFydGl0aW9uX2luZm9fbWU7CiAJCWVsc2UKQEAgLTI5MywxMyArMzA2LDEyIEBACiAJcHJpbnRrKEtFUk5fTk9USUNFICJVc2luZyAlcyBwYXJ0aXRpb24gZGVmaW5pdGlvblxuIiwgcGFydF90eXBlKTsKIAlhZGRfbXRkX3BhcnRpdGlvbnMocHBjaGFtZWxlb25fbXRkLCBtdGRfcGFydHMsIG10ZF9wYXJ0c19uYik7CiAKLW5hbmRfZXZiX2luaXQ6CisgbmFuZF9ldmJfaW5pdDoKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCSogRVZCIE5BTkQgKGFsd2F5cyBwcmVzZW50KSAqCiAJKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQlwcGNoYW1lbGVvbmV2Yl9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsKLQkJCQkJCQkgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlwcGNoYW1lbGVvbmV2Yl9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBwY2hhbWVsZW9uZXZiX210ZCkgewogCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBQUENoYW1lbGVvbkVWQiBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzA3LDc3ICszMTksNzYgQEAKIAogCS8qIG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCiAJcHBjaGFtZWxlb25ldmJfZmlvX2Jhc2UgPSBpb3JlbWFwKHBwY2hhbWVsZW9uZXZiX2Zpb19wYmFzZSwgU1pfNE0pOwotCWlmKCFwcGNoYW1lbGVvbmV2Yl9maW9fYmFzZSkgeworCWlmICghcHBjaGFtZWxlb25ldmJfZmlvX2Jhc2UpIHsKIAkJcHJpbnRrKCJpb3JlbWFwIFBQQ2hhbWVsZW9uRVZCIE5BTkQgZmxhc2ggZmFpbGVkXG4iKTsKIAkJa2ZyZWUocHBjaGFtZWxlb25ldmJfbXRkKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmcHBjaGFtZWxlb25ldmJfbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnBwY2hhbWVsZW9uZXZiX210ZFsxXSk7CiAKIAkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KLQltZW1zZXQoKGNoYXIgKikgcHBjaGFtZWxlb25ldmJfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KHBwY2hhbWVsZW9uZXZiX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAlwcGNoYW1lbGVvbmV2Yl9tdGQtPnByaXYgPSB0aGlzOwogCi0gICAgICAgIC8qIEluaXRpYWxpemUgR1BJT3MgKi8KKwkvKiBJbml0aWFsaXplIEdQSU9zICovCiAJLyogUGluIG1hcHBpbmcgZm9yIE5BTkQgY2hpcCAqLwogCS8qCi0JCUNFCUdQSU9fMTQKLQkJQ0xFCUdQSU9fMTUKLQkJQUxFCUdQSU9fMTYKLQkJUi9CCUdQSU9fMzEKLQkqLworCSAgIENFICAgR1BJT18xNAorCSAgIENMRSAgR1BJT18xNQorCSAgIEFMRSAgR1BJT18xNgorCSAgIFIvQiAgR1BJT18zMQorCSAqLwogCS8qIG91dHB1dCBzZWxlY3QgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX09TUkgsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9PU1JIKSAmIDB4RkZGRkZGRjApOwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfT1NSTCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX09TUkwpICYgMHgzRkZGRkZGRik7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfT1NSSCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9PU1JIKSAmIDB4RkZGRkZGRjApOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX09TUkwsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfT1NSTCkgJiAweDNGRkZGRkZGKTsKIAkvKiB0aHJlZS1zdGF0ZSBzZWxlY3QgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RTUkgsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JIKSAmIDB4RkZGRkZGRjApOwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVFNSTCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RTUkwpICYgMHgzRkZGRkZGRik7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVFNSSCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UU1JIKSAmIDB4RkZGRkZGRjApOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkwsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVFNSTCkgJiAweDNGRkZGRkZGKTsKIAkvKiBlbmFibGUgb3V0cHV0IGRyaXZlciAqLwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVENSLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVENSKSB8IE5BTkRfRVZCX25DRV9HUElPX1BJTiB8CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVENSLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RDUikgfCBOQU5EX0VWQl9uQ0VfR1BJT19QSU4gfAogCQkgTkFORF9FVkJfQ0xFX0dQSU9fUElOIHwgTkFORF9FVkJfQUxFX0dQSU9fUElOKTsKICNpZmRlZiBVU0VfUkVBRFlfQlVTWV9QSU4KIAkvKiB0aHJlZS1zdGF0ZSBzZWxlY3QgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RTUkwsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JMKSAmIDB4RkZGRkZGRkMpOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkwsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVFNSTCkgJiAweEZGRkZGRkZDKTsKIAkvKiBoaWdoLWltcGVkZWNlbmNlICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UQ1IsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UQ1IpICYgKH5OQU5EX0VWQl9SQl9HUElPX1BJTikpOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RDUiwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UQ1IpICYgKH5OQU5EX0VWQl9SQl9HUElPX1BJTikpOwogCS8qIGlucHV0IHNlbGVjdCAqLwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfSVNSMUwsIChpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfSVNSMUwpICYgMHhGRkZGRkZGQykgfCAweDAwMDAwMDAxKTsKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9JU1IxTCwKKwkJIChpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX0lTUjFMKSAmIDB4RkZGRkZGRkMpIHwgMHgwMDAwMDAwMSk7CiAjZW5kaWYKIAogCS8qIGluc2VydCBjYWxsYmFja3MgKi8KIAl0aGlzLT5JT19BRERSX1IgPSBwcGNoYW1lbGVvbmV2Yl9maW9fYmFzZTsKIAl0aGlzLT5JT19BRERSX1cgPSBwcGNoYW1lbGVvbmV2Yl9maW9fYmFzZTsKLQl0aGlzLT5od2NvbnRyb2wgPSBwcGNoYW1lbGVvbmV2Yl9od2NvbnRyb2w7CisJdGhpcy0+Y21kX2N0cmwgPSBwcGNoYW1lbGVvbmV2Yl9od2NvbnRyb2w7CiAjaWZkZWYgVVNFX1JFQURZX0JVU1lfUElOCiAJdGhpcy0+ZGV2X3JlYWR5ID0gcHBjaGFtZWxlb25ldmJfZGV2aWNlX3JlYWR5OwogI2VuZGlmCiAJdGhpcy0+Y2hpcF9kZWxheSA9IE5BTkRfU01BTExfREVMQVlfVVM7CiAKIAkvKiBFQ0MgbW9kZSAqLwotCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKIAogCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4gKHBwY2hhbWVsZW9uZXZiX210ZCwgMSkpIHsKKwlpZiAobmFuZF9zY2FuKHBwY2hhbWVsZW9uZXZiX210ZCwgMSkpIHsKIAkJaW91bm1hcCgodm9pZCAqKXBwY2hhbWVsZW9uZXZiX2Zpb19iYXNlKTsKLQkJa2ZyZWUgKHBwY2hhbWVsZW9uZXZiX210ZCk7CisJCWtmcmVlKHBwY2hhbWVsZW9uZXZiX210ZCk7CiAJCXJldHVybiAtRU5YSU87CiAJfQotCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJcHBjaGFtZWxlb25ldmJfbXRkLT5uYW1lID0gTkFORF9FVkJfTVREX05BTUU7CiAJbXRkX3BhcnRzX25iID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMocHBjaGFtZWxlb25ldmJfbXRkLCBwYXJ0X3Byb2Jlc19ldmIsICZtdGRfcGFydHMsIDApOwogCWlmIChtdGRfcGFydHNfbmIgPiAwKQotCSAgcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CisJCXBhcnRfdHlwZSA9ICJjb21tYW5kIGxpbmUiOwogCWVsc2UKLQkgIG10ZF9wYXJ0c19uYiA9IDA7CisJCW10ZF9wYXJ0c19uYiA9IDA7CiAjZW5kaWYKLQlpZiAobXRkX3BhcnRzX25iID09IDApCi0JeworCWlmIChtdGRfcGFydHNfbmIgPT0gMCkgewogCQltdGRfcGFydHMgPSBwYXJ0aXRpb25faW5mb19ldmI7CiAJCW10ZF9wYXJ0c19uYiA9IE5VTV9QQVJUSVRJT05TOwogCQlwYXJ0X3R5cGUgPSAic3RhdGljIjsKQEAgLTM5MCwxOCArNDAxLDE5IEBACiAJLyogUmV0dXJuIGhhcHB5ICovCiAJcmV0dXJuIDA7CiB9CisKIG1vZHVsZV9pbml0KHBwY2hhbWVsZW9uZXZiX2luaXQpOwogCiAvKgogICogQ2xlYW4gdXAgcm91dGluZQogICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgcHBjaGFtZWxlb25ldmJfY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBwcGNoYW1lbGVvbmV2Yl9jbGVhbnVwKHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZShzKSAqLwotCW5hbmRfcmVsZWFzZSAocHBjaGFtZWxlb25fbXRkKTsKLQluYW5kX3JlbGVhc2UgKHBwY2hhbWVsZW9uZXZiX210ZCk7CisJbmFuZF9yZWxlYXNlKHBwY2hhbWVsZW9uX210ZCk7CisJbmFuZF9yZWxlYXNlKHBwY2hhbWVsZW9uZXZiX210ZCk7CiAKIAkvKiBSZWxlYXNlIGlvbWFwcyAqLwogCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAmcHBjaGFtZWxlb25fbXRkWzFdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9ydGNfZnJvbTQuYyBiL2RyaXZlcnMvbXRkL25hbmQvcnRjX2Zyb200LmMKaW5kZXggNDEyOWMwMy4uZjhjNDk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9ydGNfZnJvbTQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3J0Y19mcm9tNC5jCkBAIC05NywxMiArOTcsMTIgQEAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnJ0Y19mcm9tNF9maW9fYmFzZSA9ICh2b2lkICopUDJTRUdBRERSKFJUQ19GUk9NNF9GSU9fQkFTRSk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0gewotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLm5hbWUgICA9ICJSZW5lc2FzIGZsYXNoIHBhcnRpdGlvbiAxIiwKLSAgICAgICAgICAgICAgICAub2Zmc2V0ID0gMCwKLSAgICAgICAgICAgICAgICAuc2l6ZSAgID0gTVREUEFSVF9TSVpfRlVMTAotICAgICAgICB9LAorCXsKKwkgLm5hbWUgPSAiUmVuZXNhcyBmbGFzaCBwYXJ0aXRpb24gMSIsCisJIC5vZmZzZXQgPSAwLAorCSAuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEx9LAogfTsKKwogI2RlZmluZSBOVU1fUEFSVElUSU9OUyAxCiAKIC8qCkBAIC0xMTEsOCArMTExLDggQEAKICAqCQlOQU5EX0JCVF9DUkVBVEUgYW5kL29yIE5BTkRfQkJUX1dSSVRFCiAgKgogICovCi1zdGF0aWMgdWludDhfdCBiYnRfcGF0dGVybltdID0geydCJywgJ2InLCAndCcsICcwJyB9Owotc3RhdGljIHVpbnQ4X3QgbWlycm9yX3BhdHRlcm5bXSA9IHsnMScsICd0JywgJ2InLCAnQicgfTsKK3N0YXRpYyB1aW50OF90IGJidF9wYXR0ZXJuW10gPSB7ICdCJywgJ2InLCAndCcsICcwJyB9Oworc3RhdGljIHVpbnQ4X3QgbWlycm9yX3BhdHRlcm5bXSA9IHsgJzEnLCAndCcsICdiJywgJ0InIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgcnRjX2Zyb200X2JidF9tYWluX2Rlc2NyID0gewogCS5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfQ1JFQVRFIHwgTkFORF9CQlRfV1JJVEUKQEAgLTEzNCw4ICsxMzQsNiBAQAogCS5wYXR0ZXJuID0gbWlycm9yX3BhdHRlcm4KIH07CiAKLQotCiAjaWZkZWYgUlRDX0ZST000X0hXRUNDCiAKIC8qIHRoZSBSZWVkIFNvbG9tb24gY29udHJvbCBzdHJ1Y3R1cmUgKi8KQEAgLTE0NCwxNSArMTQyLDE0IEBACiAvKgogICogICAgICBoYXJkd2FyZSBzcGVjaWZpYyBPdXQgT2YgQmFuZCBpbmZvcm1hdGlvbgogICovCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBydGNfZnJvbTRfbmFuZF9vb2JpbmZvID0gewotCS51c2VlY2MgPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IHJ0Y19mcm9tNF9uYW5kX29vYmluZm8gPSB7CiAJLmVjY2J5dGVzID0gMzIsCiAJLmVjY3BvcyA9IHsKLQkJIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LAotCQkgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCi0JCTE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywKLQkJMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxfSwKLQkub29iZnJlZSA9IHsgezMyLCAzMn0gfQorCQkgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAorCQkgICA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LAorCQkgICAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsCisJCSAgIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMX0sCisJLm9vYmZyZWUgPSB7ezMyLCAzMn19CiB9OwogCiAvKiBBYXJnaC4gSSBtaXNzZWQgdGhlIHJldmVyc2VkIGJpdCBvcmRlciwgd2hlbiBJCkBAIC0xNjIsNDQgKzE1OSw0MiBAQAogICogb2YgdGhlIGVjYyBieXRlIHdoaWNoIHdlIGdldCBmcm9tIHRoZSBGUEdBCiAgKi8KIHN0YXRpYyB1aW50OF90IHJldmJpdHNbMjU2XSA9IHsKLSAgICAgICAgMHgwMCwgMHg4MCwgMHg0MCwgMHhjMCwgMHgyMCwgMHhhMCwgMHg2MCwgMHhlMCwKLSAgICAgICAgMHgxMCwgMHg5MCwgMHg1MCwgMHhkMCwgMHgzMCwgMHhiMCwgMHg3MCwgMHhmMCwKLSAgICAgICAgMHgwOCwgMHg4OCwgMHg0OCwgMHhjOCwgMHgyOCwgMHhhOCwgMHg2OCwgMHhlOCwKLSAgICAgICAgMHgxOCwgMHg5OCwgMHg1OCwgMHhkOCwgMHgzOCwgMHhiOCwgMHg3OCwgMHhmOCwKLSAgICAgICAgMHgwNCwgMHg4NCwgMHg0NCwgMHhjNCwgMHgyNCwgMHhhNCwgMHg2NCwgMHhlNCwKLSAgICAgICAgMHgxNCwgMHg5NCwgMHg1NCwgMHhkNCwgMHgzNCwgMHhiNCwgMHg3NCwgMHhmNCwKLSAgICAgICAgMHgwYywgMHg4YywgMHg0YywgMHhjYywgMHgyYywgMHhhYywgMHg2YywgMHhlYywKLSAgICAgICAgMHgxYywgMHg5YywgMHg1YywgMHhkYywgMHgzYywgMHhiYywgMHg3YywgMHhmYywKLSAgICAgICAgMHgwMiwgMHg4MiwgMHg0MiwgMHhjMiwgMHgyMiwgMHhhMiwgMHg2MiwgMHhlMiwKLSAgICAgICAgMHgxMiwgMHg5MiwgMHg1MiwgMHhkMiwgMHgzMiwgMHhiMiwgMHg3MiwgMHhmMiwKLSAgICAgICAgMHgwYSwgMHg4YSwgMHg0YSwgMHhjYSwgMHgyYSwgMHhhYSwgMHg2YSwgMHhlYSwKLSAgICAgICAgMHgxYSwgMHg5YSwgMHg1YSwgMHhkYSwgMHgzYSwgMHhiYSwgMHg3YSwgMHhmYSwKLSAgICAgICAgMHgwNiwgMHg4NiwgMHg0NiwgMHhjNiwgMHgyNiwgMHhhNiwgMHg2NiwgMHhlNiwKLSAgICAgICAgMHgxNiwgMHg5NiwgMHg1NiwgMHhkNiwgMHgzNiwgMHhiNiwgMHg3NiwgMHhmNiwKLSAgICAgICAgMHgwZSwgMHg4ZSwgMHg0ZSwgMHhjZSwgMHgyZSwgMHhhZSwgMHg2ZSwgMHhlZSwKLSAgICAgICAgMHgxZSwgMHg5ZSwgMHg1ZSwgMHhkZSwgMHgzZSwgMHhiZSwgMHg3ZSwgMHhmZSwKLSAgICAgICAgMHgwMSwgMHg4MSwgMHg0MSwgMHhjMSwgMHgyMSwgMHhhMSwgMHg2MSwgMHhlMSwKLSAgICAgICAgMHgxMSwgMHg5MSwgMHg1MSwgMHhkMSwgMHgzMSwgMHhiMSwgMHg3MSwgMHhmMSwKLSAgICAgICAgMHgwOSwgMHg4OSwgMHg0OSwgMHhjOSwgMHgyOSwgMHhhOSwgMHg2OSwgMHhlOSwKLSAgICAgICAgMHgxOSwgMHg5OSwgMHg1OSwgMHhkOSwgMHgzOSwgMHhiOSwgMHg3OSwgMHhmOSwKLSAgICAgICAgMHgwNSwgMHg4NSwgMHg0NSwgMHhjNSwgMHgyNSwgMHhhNSwgMHg2NSwgMHhlNSwKLSAgICAgICAgMHgxNSwgMHg5NSwgMHg1NSwgMHhkNSwgMHgzNSwgMHhiNSwgMHg3NSwgMHhmNSwKLSAgICAgICAgMHgwZCwgMHg4ZCwgMHg0ZCwgMHhjZCwgMHgyZCwgMHhhZCwgMHg2ZCwgMHhlZCwKLSAgICAgICAgMHgxZCwgMHg5ZCwgMHg1ZCwgMHhkZCwgMHgzZCwgMHhiZCwgMHg3ZCwgMHhmZCwKLSAgICAgICAgMHgwMywgMHg4MywgMHg0MywgMHhjMywgMHgyMywgMHhhMywgMHg2MywgMHhlMywKLSAgICAgICAgMHgxMywgMHg5MywgMHg1MywgMHhkMywgMHgzMywgMHhiMywgMHg3MywgMHhmMywKLSAgICAgICAgMHgwYiwgMHg4YiwgMHg0YiwgMHhjYiwgMHgyYiwgMHhhYiwgMHg2YiwgMHhlYiwKLSAgICAgICAgMHgxYiwgMHg5YiwgMHg1YiwgMHhkYiwgMHgzYiwgMHhiYiwgMHg3YiwgMHhmYiwKLSAgICAgICAgMHgwNywgMHg4NywgMHg0NywgMHhjNywgMHgyNywgMHhhNywgMHg2NywgMHhlNywKLSAgICAgICAgMHgxNywgMHg5NywgMHg1NywgMHhkNywgMHgzNywgMHhiNywgMHg3NywgMHhmNywKLSAgICAgICAgMHgwZiwgMHg4ZiwgMHg0ZiwgMHhjZiwgMHgyZiwgMHhhZiwgMHg2ZiwgMHhlZiwKLSAgICAgICAgMHgxZiwgMHg5ZiwgMHg1ZiwgMHhkZiwgMHgzZiwgMHhiZiwgMHg3ZiwgMHhmZiwKKwkweDAwLCAweDgwLCAweDQwLCAweGMwLCAweDIwLCAweGEwLCAweDYwLCAweGUwLAorCTB4MTAsIDB4OTAsIDB4NTAsIDB4ZDAsIDB4MzAsIDB4YjAsIDB4NzAsIDB4ZjAsCisJMHgwOCwgMHg4OCwgMHg0OCwgMHhjOCwgMHgyOCwgMHhhOCwgMHg2OCwgMHhlOCwKKwkweDE4LCAweDk4LCAweDU4LCAweGQ4LCAweDM4LCAweGI4LCAweDc4LCAweGY4LAorCTB4MDQsIDB4ODQsIDB4NDQsIDB4YzQsIDB4MjQsIDB4YTQsIDB4NjQsIDB4ZTQsCisJMHgxNCwgMHg5NCwgMHg1NCwgMHhkNCwgMHgzNCwgMHhiNCwgMHg3NCwgMHhmNCwKKwkweDBjLCAweDhjLCAweDRjLCAweGNjLCAweDJjLCAweGFjLCAweDZjLCAweGVjLAorCTB4MWMsIDB4OWMsIDB4NWMsIDB4ZGMsIDB4M2MsIDB4YmMsIDB4N2MsIDB4ZmMsCisJMHgwMiwgMHg4MiwgMHg0MiwgMHhjMiwgMHgyMiwgMHhhMiwgMHg2MiwgMHhlMiwKKwkweDEyLCAweDkyLCAweDUyLCAweGQyLCAweDMyLCAweGIyLCAweDcyLCAweGYyLAorCTB4MGEsIDB4OGEsIDB4NGEsIDB4Y2EsIDB4MmEsIDB4YWEsIDB4NmEsIDB4ZWEsCisJMHgxYSwgMHg5YSwgMHg1YSwgMHhkYSwgMHgzYSwgMHhiYSwgMHg3YSwgMHhmYSwKKwkweDA2LCAweDg2LCAweDQ2LCAweGM2LCAweDI2LCAweGE2LCAweDY2LCAweGU2LAorCTB4MTYsIDB4OTYsIDB4NTYsIDB4ZDYsIDB4MzYsIDB4YjYsIDB4NzYsIDB4ZjYsCisJMHgwZSwgMHg4ZSwgMHg0ZSwgMHhjZSwgMHgyZSwgMHhhZSwgMHg2ZSwgMHhlZSwKKwkweDFlLCAweDllLCAweDVlLCAweGRlLCAweDNlLCAweGJlLCAweDdlLCAweGZlLAorCTB4MDEsIDB4ODEsIDB4NDEsIDB4YzEsIDB4MjEsIDB4YTEsIDB4NjEsIDB4ZTEsCisJMHgxMSwgMHg5MSwgMHg1MSwgMHhkMSwgMHgzMSwgMHhiMSwgMHg3MSwgMHhmMSwKKwkweDA5LCAweDg5LCAweDQ5LCAweGM5LCAweDI5LCAweGE5LCAweDY5LCAweGU5LAorCTB4MTksIDB4OTksIDB4NTksIDB4ZDksIDB4MzksIDB4YjksIDB4NzksIDB4ZjksCisJMHgwNSwgMHg4NSwgMHg0NSwgMHhjNSwgMHgyNSwgMHhhNSwgMHg2NSwgMHhlNSwKKwkweDE1LCAweDk1LCAweDU1LCAweGQ1LCAweDM1LCAweGI1LCAweDc1LCAweGY1LAorCTB4MGQsIDB4OGQsIDB4NGQsIDB4Y2QsIDB4MmQsIDB4YWQsIDB4NmQsIDB4ZWQsCisJMHgxZCwgMHg5ZCwgMHg1ZCwgMHhkZCwgMHgzZCwgMHhiZCwgMHg3ZCwgMHhmZCwKKwkweDAzLCAweDgzLCAweDQzLCAweGMzLCAweDIzLCAweGEzLCAweDYzLCAweGUzLAorCTB4MTMsIDB4OTMsIDB4NTMsIDB4ZDMsIDB4MzMsIDB4YjMsIDB4NzMsIDB4ZjMsCisJMHgwYiwgMHg4YiwgMHg0YiwgMHhjYiwgMHgyYiwgMHhhYiwgMHg2YiwgMHhlYiwKKwkweDFiLCAweDliLCAweDViLCAweGRiLCAweDNiLCAweGJiLCAweDdiLCAweGZiLAorCTB4MDcsIDB4ODcsIDB4NDcsIDB4YzcsIDB4MjcsIDB4YTcsIDB4NjcsIDB4ZTcsCisJMHgxNywgMHg5NywgMHg1NywgMHhkNywgMHgzNywgMHhiNywgMHg3NywgMHhmNywKKwkweDBmLCAweDhmLCAweDRmLCAweGNmLCAweDJmLCAweGFmLCAweDZmLCAweGVmLAorCTB4MWYsIDB4OWYsIDB4NWYsIDB4ZGYsIDB4M2YsIDB4YmYsIDB4N2YsIDB4ZmYsCiB9OwogCiAjZW5kaWYKIAotCi0KIC8qCiAgKiBydGNfZnJvbTRfaHdjb250cm9sIC0gaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yMTIsMzUgKzIwNywyMCBAQAogICogQWRkcmVzcyBsaW5lcyAoQTI0LUEyMiksIHNvIG5vIGFjdGlvbiBpcyByZXF1aXJlZCBoZXJlLgogICoKICAqLwotc3RhdGljIHZvaWQgcnRjX2Zyb200X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHJ0Y19mcm9tNF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkJdW5zaWduZWQgaW50IGN0cmwpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCogdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopIChtdGQtPnByaXYpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSAobXRkLT5wcml2KTsKIAotCXN3aXRjaChjbWQpIHsKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOgotCQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVyB8IFJUQ19GUk9NNF9DTEUpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUkNMRToKLQkJdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1cgJiB+UlRDX0ZST000X0NMRSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NUTF9TRVRBTEU6Ci0JCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XIHwgUlRDX0ZST000X0FMRSk7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotCQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVyAmIH5SVENfRlJPTTRfQUxFKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCWJyZWFrOwotCi0JfQorCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyB8IFJUQ19GUk9NNF9DTEUpOworCWVsc2UKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XIHwgUlRDX0ZST000X0FMRSk7CiB9CiAKLQogLyoKICAqIHJ0Y19mcm9tNF9uYW5kX3NlbGVjdF9jaGlwIC0gaGFyZHdhcmUgc3BlY2lmaWMgY2hpcCBzZWxlY3QKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yNTIsMjYgKzIzMiwyNSBAQAogICovCiBzdGF0aWMgdm9pZCBydGNfZnJvbTRfbmFuZF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCiB7Ci0gICAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAogCXRoaXMtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9SICYgflJUQ19GUk9NNF9OQU5EX0FERFJfTUFTSyk7CiAJdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1cgJiB+UlRDX0ZST000X05BTkRfQUREUl9NQVNLKTsKIAotICAgICAgICBzd2l0Y2goY2hpcCkgeworCXN3aXRjaCAoY2hpcCkgewogCi0gICAgICAgIGNhc2UgMDoJCS8qIHNlbGVjdCBzbG90IDMgY2hpcCAqLworCWNhc2UgMDoJCS8qIHNlbGVjdCBzbG90IDMgY2hpcCAqLwogCQl0aGlzLT5JT19BRERSX1IgPSAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfUiB8IFJUQ19GUk9NNF9OQU5EX0FERFJfU0xPVDMpOwogCQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVyB8IFJUQ19GUk9NNF9OQU5EX0FERFJfU0xPVDMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6CQkvKiBzZWxlY3Qgc2xvdCA0IGNoaXAgKi8KKwkJYnJlYWs7CisJY2FzZSAxOgkJLyogc2VsZWN0IHNsb3QgNCBjaGlwICovCiAJCXRoaXMtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9SIHwgUlRDX0ZST000X05BTkRfQUREUl9TTE9UNCk7CiAJCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XIHwgUlRDX0ZST000X05BTkRfQUREUl9TTE9UNCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJCWJyZWFrOwogCi0gICAgICAgIH0KKwl9CiB9CiAKLQogLyoKICAqIHJ0Y19mcm9tNF9uYW5kX2RldmljZV9yZWFkeSAtIGhhcmR3YXJlIHNwZWNpZmljIHJlYWR5L2J1c3kgY2hlY2sKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yOTAsNyArMjY5LDYgQEAKIAogfQogCi0KIC8qCiAgKiBkZXBsZXRlIC0gY29kZSB0byBwZXJmb3JtIGRldmljZSByZWNvdmVyeSBpbiBjYXNlIHRoZXJlIHdhcyBhIHBvd2VyIGxvc3MKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0zMDYsMjQgKzI4NCwyMyBAQAogICovCiBzdGF0aWMgdm9pZCBkZXBsZXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKIHsKLSAgICAgICAgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCi0gICAgICAgIC8qIHdhaXQgdW50aWwgZGV2aWNlIGlzIHJlYWR5ICovCi0gICAgICAgIHdoaWxlICghdGhpcy0+ZGV2X3JlYWR5KG10ZCkpOworCS8qIHdhaXQgdW50aWwgZGV2aWNlIGlzIHJlYWR5ICovCisJd2hpbGUgKCF0aGlzLT5kZXZfcmVhZHkobXRkKSkgOwogCiAJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwKTsKIAogCS8qIFNlbmQgdGhlIGNvbW1hbmRzIGZvciBkZXZpY2UgcmVjb3ZlcnksIHBoYXNlIDEgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0RFUExFVEUxLCAweDAwMDAsIDB4MDAwMCk7Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9ERVBMRVRFMiwgLTEsIC0xKTsKKwl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfREVQTEVURTEsIDB4MDAwMCwgMHgwMDAwKTsKKwl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfREVQTEVURTIsIC0xLCAtMSk7CiAKIAkvKiBTZW5kIHRoZSBjb21tYW5kcyBmb3IgZGV2aWNlIHJlY292ZXJ5LCBwaGFzZSAyICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9ERVBMRVRFMSwgMHgwMDAwLCAweDAwMDQpOwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfREVQTEVURTIsIC0xLCAtMSk7CisJdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0RFUExFVEUxLCAweDAwMDAsIDB4MDAwNCk7CisJdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0RFUExFVEUyLCAtMSwgLTEpOwogCiB9CiAKLQogI2lmZGVmIFJUQ19GUk9NNF9IV0VDQwogLyoKICAqIHJ0Y19mcm9tNF9lbmFibGVfaHdlY2MgLSBoYXJkd2FyZSBzcGVjaWZpYyBoYXJkd2FyZSBFQ0MgZW5hYmxlIGZ1bmN0aW9uCkBAIC0zMzUsMzkgKzMxMiwzNSBAQAogICovCiBzdGF0aWMgdm9pZCBydGNfZnJvbTRfZW5hYmxlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqIHJzX2VjY19jdGwgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikocnRjX2Zyb200X2Zpb19iYXNlICsgUlRDX0ZST000X1JTX0VDQ19DVEwpOworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpyc19lY2NfY3RsID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHJ0Y19mcm9tNF9maW9fYmFzZSArIFJUQ19GUk9NNF9SU19FQ0NfQ1RMKTsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKLQkgICAgY2FzZSBOQU5EX0VDQ19SRUFEIDoKLQkJc3RhdHVzID0gIFJUQ19GUk9NNF9SU19FQ0NfQ1RMX0NMUgotCQkJfCBSVENfRlJPTTRfUlNfRUNDX0NUTF9GRF9FOworCWNhc2UgTkFORF9FQ0NfUkVBRDoKKwkJc3RhdHVzID0gUlRDX0ZST000X1JTX0VDQ19DVExfQ0xSIHwgUlRDX0ZST000X1JTX0VDQ19DVExfRkRfRTsKIAogCQkqcnNfZWNjX2N0bCA9IHN0YXR1czsKIAkJYnJlYWs7CiAKLQkgICAgY2FzZSBOQU5EX0VDQ19SRUFEU1lOIDoKLQkJc3RhdHVzID0gIDB4MDA7CisJY2FzZSBOQU5EX0VDQ19SRUFEU1lOOgorCQlzdGF0dXMgPSAweDAwOwogCiAJCSpyc19lY2NfY3RsID0gc3RhdHVzOwogCQlicmVhazsKIAotCSAgICBjYXNlIE5BTkRfRUNDX1dSSVRFIDoKLQkJc3RhdHVzID0gIFJUQ19GUk9NNF9SU19FQ0NfQ1RMX0NMUgotCQkJfCBSVENfRlJPTTRfUlNfRUNDX0NUTF9HRU4KLQkJCXwgUlRDX0ZST000X1JTX0VDQ19DVExfRkRfRTsKKwljYXNlIE5BTkRfRUNDX1dSSVRFOgorCQlzdGF0dXMgPSBSVENfRlJPTTRfUlNfRUNDX0NUTF9DTFIgfCBSVENfRlJPTTRfUlNfRUNDX0NUTF9HRU4gfCBSVENfRlJPTTRfUlNfRUNDX0NUTF9GRF9FOwogCiAJCSpyc19lY2NfY3RsID0gc3RhdHVzOwogCQlicmVhazsKIAotCSAgICBkZWZhdWx0OgorCWRlZmF1bHQ6CiAJCUJVRygpOwogCQlicmVhazsKIAl9CiAKIH0KIAotCiAvKgogICogcnRjX2Zyb200X2NhbGN1bGF0ZV9lY2MgLSBoYXJkd2FyZSBzcGVjaWZpYyBjb2RlIHRvIHJlYWQgRUNDIGNvZGUKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0zODMsNyArMzU2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcnRjX2Zyb200X2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKQogewotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICogcnNfZWNjbiA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShydGNfZnJvbTRfZmlvX2Jhc2UgKyBSVENfRlJPTTRfUlNfRUNDTik7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnJzX2VjY24gPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikocnRjX2Zyb200X2Zpb19iYXNlICsgUlRDX0ZST000X1JTX0VDQ04pOwogCXVuc2lnbmVkIHNob3J0IHZhbHVlOwogCWludCBpOwogCkBAIC0zOTUsNyArMzY4LDYgQEAKIAllY2NfY29kZVs3XSB8PSAweDBmOwkvKiBzZXQgdGhlIGxhc3QgZm91ciBiaXRzIChub3QgdXNlZCkgKi8KIH0KIAotCiAvKgogICogcnRjX2Zyb200X2NvcnJlY3RfZGF0YSAtIGhhcmR3YXJlIHNwZWNpZmljIGNvZGUgdG8gY29ycmVjdCBkYXRhIHVzaW5nIEVDQyBjb2RlCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQpAQCAtNDE0LDcgKzM4Niw3IEBACiAJdW5zaWduZWQgc2hvcnQgc3RhdHVzOwogCXVpbnQxNl90IHBhcls2XSwgc3luWzZdOwogCXVpbnQ4X3QgZWNjWzhdOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcnNfZWNjOworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpyc19lY2M7CiAKIAlzdGF0dXMgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShydGNfZnJvbTRfZmlvX2Jhc2UgKyBSVENfRlJPTTRfUlNfRUNDX0NISykpOwogCkBAIC00MjQsMjMgKzM5NiwxOCBAQAogCiAJLyogUmVhZCB0aGUgc3luZHJvbSBwYXR0ZXJuIGZyb20gdGhlIEZQR0EgYW5kIGNvcnJlY3QgdGhlIGJpdG9yZGVyICovCiAJcnNfZWNjID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHJ0Y19mcm9tNF9maW9fYmFzZSArIFJUQ19GUk9NNF9SU19FQ0MpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZWNjW2ldID0gcmV2Yml0c1soKnJzX2VjYykgJiAweEZGXTsKLSAgICAgICAgICAgICAgICByc19lY2MrKzsKLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJZWNjW2ldID0gcmV2Yml0c1soKnJzX2VjYykgJiAweEZGXTsKKwkJcnNfZWNjKys7CisJfQogCiAJLyogY29udmVydCBpbnRvIDYgMTBiaXQgc3luZHJvbWUgZmllbGRzICovCi0JcGFyWzVdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpZWNjWzBdID4+IDApICYgMHgwZmYpIHwKLQkJCQkgICAgICAoKCh1aW50MTZfdCllY2NbMV0gPDwgOCkgJiAweDMwMCldOwotCXBhcls0XSA9IHJzX2RlY29kZXItPmluZGV4X29mWygoKHVpbnQxNl90KWVjY1sxXSA+PiAyKSAmIDB4MDNmKSB8Ci0JCQkJICAgICAgKCgodWludDE2X3QpZWNjWzJdIDw8IDYpICYgMHgzYzApXTsKLQlwYXJbM10gPSByc19kZWNvZGVyLT5pbmRleF9vZlsoKCh1aW50MTZfdCllY2NbMl0gPj4gNCkgJiAweDAwZikgfAotCQkJCSAgICAgICgoKHVpbnQxNl90KWVjY1szXSA8PCA0KSAmIDB4M2YwKV07Ci0JcGFyWzJdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpZWNjWzNdID4+IDYpICYgMHgwMDMpIHwKLQkJCQkgICAgICAoKCh1aW50MTZfdCllY2NbNF0gPDwgMikgJiAweDNmYyldOwotCXBhclsxXSA9IHJzX2RlY29kZXItPmluZGV4X29mWygoKHVpbnQxNl90KWVjY1s1XSA+PiAwKSAmIDB4MGZmKSB8Ci0JCQkJICAgICAgKCgodWludDE2X3QpZWNjWzZdIDw8IDgpICYgMHgzMDApXTsKLQlwYXJbMF0gPSAoKCh1aW50MTZfdCllY2NbNl0gPj4gMikgJiAweDAzZikgfCAoKCh1aW50MTZfdCllY2NbN10gPDwgNikgJiAweDNjMCk7CisJcGFyWzVdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpIGVjY1swXSA+PiAwKSAmIDB4MGZmKSB8ICgoKHVpbnQxNl90KSBlY2NbMV0gPDwgOCkgJiAweDMwMCldOworCXBhcls0XSA9IHJzX2RlY29kZXItPmluZGV4X29mWygoKHVpbnQxNl90KSBlY2NbMV0gPj4gMikgJiAweDAzZikgfCAoKCh1aW50MTZfdCkgZWNjWzJdIDw8IDYpICYgMHgzYzApXTsKKwlwYXJbM10gPSByc19kZWNvZGVyLT5pbmRleF9vZlsoKCh1aW50MTZfdCkgZWNjWzJdID4+IDQpICYgMHgwMGYpIHwgKCgodWludDE2X3QpIGVjY1szXSA8PCA0KSAmIDB4M2YwKV07CisJcGFyWzJdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpIGVjY1szXSA+PiA2KSAmIDB4MDAzKSB8ICgoKHVpbnQxNl90KSBlY2NbNF0gPDwgMikgJiAweDNmYyldOworCXBhclsxXSA9IHJzX2RlY29kZXItPmluZGV4X29mWygoKHVpbnQxNl90KSBlY2NbNV0gPj4gMCkgJiAweDBmZikgfCAoKCh1aW50MTZfdCkgZWNjWzZdIDw8IDgpICYgMHgzMDApXTsKKwlwYXJbMF0gPSAoKCh1aW50MTZfdCkgZWNjWzZdID4+IDIpICYgMHgwM2YpIHwgKCgodWludDE2X3QpIGVjY1s3XSA8PCA2KSAmIDB4M2MwKTsKIAogCS8qIENvbnZlcnQgdG8gY29tcHV0YWJsZSBzeW5kcm9tZSAqLwogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKQEAgLTQ1MywxNiArNDIwLDE0IEBACiAJCXN5bltpXSA9IHJzX2RlY29kZXItPmluZGV4X29mW3N5bltpXV07CiAJfQogCi0JLyogTGV0IHRoZSBsaWJyYXJ5IGNvZGUgZG8gaXRzIG1hZ2ljLiovCi0JcmVzID0gZGVjb2RlX3JzOChyc19kZWNvZGVyLCAodWludDhfdCAqKWJ1ZiwgcGFyLCA1MTIsIHN5biwgMCwgTlVMTCwgMHhmZiwgTlVMTCk7CisJLyogTGV0IHRoZSBsaWJyYXJ5IGNvZGUgZG8gaXRzIG1hZ2ljLiAqLworCXJlcyA9IGRlY29kZV9yczgocnNfZGVjb2RlciwgKHVpbnQ4X3QgKikgYnVmLCBwYXIsIDUxMiwgc3luLCAwLCBOVUxMLCAweGZmLCBOVUxMKTsKIAlpZiAocmVzID4gMCkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgInJ0Y19mcm9tNF9jb3JyZWN0X2RhdGE6ICIKLQkJCSJFQ0MgY29ycmVjdGVkICVkIGVycm9ycyBvbiByZWFkXG4iLCByZXMpOworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAicnRjX2Zyb200X2NvcnJlY3RfZGF0YTogIiAiRUNDIGNvcnJlY3RlZCAlZCBlcnJvcnMgb24gcmVhZFxuIiwgcmVzKTsKIAl9CiAJcmV0dXJuIHJlczsKIH0KIAotCiAvKioKICAqIHJ0Y19mcm9tNF9lcnJzdGF0IC0gcGVyZm9ybSBhZGRpdGlvbmFsIGVycm9yIHN0YXR1cyBjaGVja3MKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC00NzgsNTQgKzQ0Myw2NiBAQAogICogbm90ZTogc2VlIHBhZ2VzIDM0Li4zNyBvZiBkYXRhIHNoZWV0IGZvciBkZXRhaWxzLgogICoKICAqLwotc3RhdGljIGludCBydGNfZnJvbTRfZXJyc3RhdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHN0YXRlLCBpbnQgc3RhdHVzLCBpbnQgcGFnZSkKK3N0YXRpYyBpbnQgcnRjX2Zyb200X2VycnN0YXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsCisJCQkgICAgIGludCBzdGF0ZSwgaW50IHN0YXR1cywgaW50IHBhZ2UpCiB7Ci0JaW50CWVyX3N0YXQ9MDsKLQlpbnQJcnRuLCByZXRsZW47Ci0Jc2l6ZV90CWxlbjsKKwlpbnQgZXJfc3RhdCA9IDA7CisJaW50IHJ0biwgcmV0bGVuOworCXNpemVfdCBsZW47CiAJdWludDhfdCAqYnVmOwotCWludAlpOworCWludCBpOwogCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVNfQ0xFQVIsIC0xLCAtMSk7CisJdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NUQVRVU19DTEVBUiwgLTEsIC0xKTsKIAotICAgICAgICBpZiAoc3RhdGUgPT0gRkxfRVJBU0lORykgewotCQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKLQkJCWlmIChzdGF0dXMgJiAxPDwoaSsxKSkgewotCQkJCXRoaXMtPmNtZGZ1bmMgKG10ZCwgKE5BTkRfQ01EX1NUQVRVU19FUlJPUiArIGkgKyAxKSwgLTEsIC0xKTsKLQkJCQlydG4gPSB0aGlzLT5yZWFkX2J5dGUobXRkKTsKLQkJCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NUQVRVU19SRVNFVCwgLTEsIC0xKTsKLQkJCQlpZiAoIShydG4gJiBFUlJfU1RBVF9FQ0NfQVZBSUxBQkxFKSkgewotCQkJCQllcl9zdGF0IHw9IDE8PChpKzEpOwkvKiBlcnJfZWNjX25vdF9hdmFpbCAqLwotCQkJCX0KLQkJCX0KKwlpZiAoc3RhdGUgPT0gRkxfRVJBU0lORykgeworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCWlmICghKHN0YXR1cyAmIDEgPDwgKGkgKyAxKSkpCisJCQkJY29udGludWU7CisJCQl0aGlzLT5jbWRmdW5jKG10ZCwgKE5BTkRfQ01EX1NUQVRVU19FUlJPUiArIGkgKyAxKSwKKwkJCQkgICAgICAtMSwgLTEpOworCQkJcnRuID0gdGhpcy0+cmVhZF9ieXRlKG10ZCk7CisJCQl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU1RBVFVTX1JFU0VULCAtMSwgLTEpOworCisJCQkvKiBlcnJfZWNjX25vdF9hdmFpbCAqLworCQkJaWYgKCEocnRuICYgRVJSX1NUQVRfRUNDX0FWQUlMQUJMRSkpCisJCQkJZXJfc3RhdCB8PSAxIDw8IChpICsgMSk7CiAJCX0KKwogCX0gZWxzZSBpZiAoc3RhdGUgPT0gRkxfV1JJVElORykgeworCisJCXVuc2lnbmVkIGxvbmcgY29ycmVjdGVkID0gbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkOworCiAJCS8qIHNpbmdsZSBiYW5rIHdyaXRlIGxvZ2ljICovCi0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfU1RBVFVTX0VSUk9SLCAtMSwgLTEpOworCQl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU1RBVFVTX0VSUk9SLCAtMSwgLTEpOwogCQlydG4gPSB0aGlzLT5yZWFkX2J5dGUobXRkKTsKLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVNfUkVTRVQsIC0xLCAtMSk7CisJCXRoaXMtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVNfUkVTRVQsIC0xLCAtMSk7CisKIAkJaWYgKCEocnRuICYgRVJSX1NUQVRfRUNDX0FWQUlMQUJMRSkpIHsKLQkJCWVyX3N0YXQgfD0gMTw8MTsJLyogZXJyX2VjY19ub3RfYXZhaWwgKi8KLQkJfSBlbHNlIHsKLQkJCWxlbiA9IG10ZC0+b29iYmxvY2s7Ci0JCQlidWYgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKCFidWYpIHsKLQkJCQlwcmludGsgKEtFUk5fRVJSICJydGNfZnJvbTRfZXJyc3RhdDogT3V0IG9mIG1lbW9yeSFcbiIpOwotCQkJCWVyX3N0YXQgPSAxOwkJCS8qIGlmIHdlIGNhbid0IGNoZWNrLCBhc3N1bWUgZmFpbGVkICovCi0JCQl9IGVsc2UgewotCQkJCS8qIHJlY292ZXJ5IHJlYWQgKi8KLQkJCQkvKiBwYWdlIHJlYWQgKi8KLQkJCQlydG4gPSBuYW5kX2RvX3JlYWRfZWNjIChtdGQsIHBhZ2UsIGxlbiwgJnJldGxlbiwgYnVmLCBOVUxMLCB0aGlzLT5hdXRvb29iLCAxKTsKLQkJCQlpZiAocnRuKSB7CS8qIGlmIHJlYWQgZmFpbGVkIG9yID4gMS1iaXQgZXJyb3IgY29ycmVjdGVkICovCi0JCQkJCWVyX3N0YXQgfD0gMTw8MTsJLyogRUNDIHJlYWQgZmFpbGVkICovCi0JCQkJfQotCQkJCWtmcmVlKGJ1Zik7Ci0JCQl9CisJCQkvKiBlcnJfZWNjX25vdF9hdmFpbCAqLworCQkJZXJfc3RhdCB8PSAxIDw8IDE7CisJCQlnb3RvIG91dDsKIAkJfQorCisJCWxlbiA9IG10ZC0+d3JpdGVzaXplOworCQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInJ0Y19mcm9tNF9lcnJzdGF0OiBPdXQgb2YgbWVtb3J5IVxuIik7CisJCQllcl9zdGF0ID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogcmVjb3ZlcnkgcmVhZCAqLworCQlydG4gPSBuYW5kX2RvX3JlYWQobXRkLCBwYWdlLCBsZW4sICZyZXRsZW4sIGJ1Zik7CisKKwkJLyogaWYgcmVhZCBmYWlsZWQgb3IgPiAxLWJpdCBlcnJvciBjb3JyZWN0ZWQgKi8KKwkJaWYgKHJ0biB8fCAobXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkIC0gY29ycmVjdGVkKSA+IDEpIHsKKwkJCWVyX3N0YXQgfD0gMSA8PCAxOworCQlrZnJlZShidWYpOwogCX0KIAogCXJ0biA9IHN0YXR1czsKLQlpZiAoZXJfc3RhdCA9PSAwKSB7CQkJCS8qIGlmIEVDQyBpcyBhdmFpbGFibGUgICAqLworCWlmIChlcl9zdGF0ID09IDApIHsJLyogaWYgRUNDIGlzIGF2YWlsYWJsZSAgICovCiAJCXJ0biA9IChzdGF0dXMgJiB+TkFORF9TVEFUVVNfRkFJTCk7CS8qICAgY2xlYXIgdGhlIGVycm9yIGJpdCAqLwogCX0KIApAQCAtNTMzLDMzICs1MTAsMzIgQEAKIH0KICNlbmRpZgogCi0KIC8qCiAgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKICAqLwotaW50IF9faW5pdCBydGNfZnJvbTRfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHJ0Y19mcm9tNF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAl1bnNpZ25lZCBzaG9ydCBiY3IxLCBiY3IyLCB3Y3IyOwogCWludCBpOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JcnRjX2Zyb200X210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2YgKHN0cnVjdCBuYW5kX2NoaXApLAotCQkJCUdGUF9LRVJORUwpOworCXJ0Y19mcm9tNF9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJ0Y19mcm9tNF9tdGQpIHsKLQkJcHJpbnRrICgiVW5hYmxlIHRvIGFsbG9jYXRlIFJlbmVzYXMgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBSZW5lc2FzIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmcnRjX2Zyb200X210ZFsxXSk7CisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZydGNfZnJvbTRfbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSBydGNfZnJvbTRfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KHJ0Y19mcm9tNF9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKIAogCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCiAJcnRjX2Zyb200X210ZC0+cHJpdiA9IHRoaXM7CisJcnRjX2Zyb200X210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qIHNldCBhcmVhIDUgYXMgUENNQ0lBIG1vZGUgdG8gY2xlYXIgdGhlIHNwZWMgb2YgdERIKERhdGEgaG9sZCB0aW1lOzlucyBtaW4pICovCiAJYmNyMSA9ICpTSDc3WDlfQkNSMSAmIH4weDAwMDI7CkBAIC01ODAsOSArNTU2LDkgQEAKIAl0aGlzLT5JT19BRERSX1IgPSBydGNfZnJvbTRfZmlvX2Jhc2U7CiAJdGhpcy0+SU9fQUREUl9XID0gcnRjX2Zyb200X2Zpb19iYXNlOwogCS8qIFNldCBhZGRyZXNzIG9mIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQl0aGlzLT5od2NvbnRyb2wgPSBydGNfZnJvbTRfaHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gcnRjX2Zyb200X2h3Y29udHJvbDsKIAkvKiBTZXQgYWRkcmVzcyBvZiBjaGlwIHNlbGVjdCBmdW5jdGlvbiAqLwotICAgICAgICB0aGlzLT5zZWxlY3RfY2hpcCA9IHJ0Y19mcm9tNF9uYW5kX3NlbGVjdF9jaGlwOworCXRoaXMtPnNlbGVjdF9jaGlwID0gcnRjX2Zyb200X25hbmRfc2VsZWN0X2NoaXA7CiAJLyogY29tbWFuZCBkZWxheSB0aW1lIChpbiB1cykgKi8KIAl0aGlzLT5jaGlwX2RlbGF5ID0gMTAwOwogCS8qIHJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBSZWFkeS9CdXN5IGxpbmUgKi8KQEAgLTU5MSwxOSArNTY3LDIwIEBACiAjaWZkZWYgUlRDX0ZST000X0hXRUNDCiAJcHJpbnRrKEtFUk5fSU5GTyAicnRjX2Zyb200X2luaXQ6IHVzaW5nIGhhcmR3YXJlIEVDQyBkZXRlY3Rpb24uXG4iKTsKIAotICAgICAgICB0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfSFc4XzUxMjsKLQl0aGlzLT5vcHRpb25zIHw9IE5BTkRfSFdFQ0NfU1lORFJPTUU7CisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IV19TWU5EUk9NRTsKKwl0aGlzLT5lY2Muc2l6ZSA9IDUxMjsKKwl0aGlzLT5lY2MuYnl0ZXMgPSA4OwogCS8qIHJldHVybiB0aGUgc3RhdHVzIG9mIGV4dHJhIHN0YXR1cyBhbmQgRUNDIGNoZWNrcyAqLwogCXRoaXMtPmVycnN0YXQgPSBydGNfZnJvbTRfZXJyc3RhdDsKIAkvKiBzZXQgdGhlIG5hbmRfb29iaW5mbyB0byBzdXBwb3J0IEZQR0EgSC9XIGVycm9yIGRldGVjdGlvbiAqLwotCXRoaXMtPmF1dG9vb2IgPSAmcnRjX2Zyb200X25hbmRfb29iaW5mbzsKLQl0aGlzLT5lbmFibGVfaHdlY2MgPSBydGNfZnJvbTRfZW5hYmxlX2h3ZWNjOwotCXRoaXMtPmNhbGN1bGF0ZV9lY2MgPSBydGNfZnJvbTRfY2FsY3VsYXRlX2VjYzsKLQl0aGlzLT5jb3JyZWN0X2RhdGEgPSBydGNfZnJvbTRfY29ycmVjdF9kYXRhOworCXRoaXMtPmVjYy5sYXlvdXQgPSAmcnRjX2Zyb200X25hbmRfb29iaW5mbzsKKwl0aGlzLT5lY2MuaHdjdGwgPSBydGNfZnJvbTRfZW5hYmxlX2h3ZWNjOworCXRoaXMtPmVjYy5jYWxjdWxhdGUgPSBydGNfZnJvbTRfY2FsY3VsYXRlX2VjYzsKKwl0aGlzLT5lY2MuY29ycmVjdCA9IHJ0Y19mcm9tNF9jb3JyZWN0X2RhdGE7CiAjZWxzZQogCXByaW50ayhLRVJOX0lORk8gInJ0Y19mcm9tNF9pbml0OiB1c2luZyBzb2Z0d2FyZSBFQ0MgZGV0ZWN0aW9uLlxuIik7CiAKLQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CiAjZW5kaWYKIAogCS8qIHNldCB0aGUgYmFkIGJsb2NrIHRhYmxlcyB0byBzdXBwb3J0IGRlYnVnZ2luZyAqLwpAQCAtNjE3LDcgKzU5NCw3IEBACiAJfQogCiAJLyogUGVyZm9ybSAnZGV2aWNlIHJlY292ZXJ5JyBmb3IgZWFjaCBjaGlwIGluIGNhc2UgdGhlcmUgd2FzIGEgcG93ZXIgbG9zcy4gKi8KLQlmb3IgKGk9MDsgaSA8IHRoaXMtPm51bWNoaXBzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgdGhpcy0+bnVtY2hpcHM7IGkrKykgewogCQlkZXBsZXRlKHJ0Y19mcm9tNF9tdGQsIGkpOwogCX0KIApAQCAtNjQzLDcgKzYyMCw3IEBACiAJICovCiAJcnNfZGVjb2RlciA9IGluaXRfcnMoMTAsIDB4NDA5LCAwLCAxLCA2KTsKIAlpZiAoIXJzX2RlY29kZXIpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAiQ291bGQgbm90IGNyZWF0ZSBhIFJTIGRlY29kZXJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBjcmVhdGUgYSBSUyBkZWNvZGVyXG4iKTsKIAkJbmFuZF9yZWxlYXNlKHJ0Y19mcm9tNF9tdGQpOwogCQlrZnJlZShydGNfZnJvbTRfbXRkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02NTIsMjAgKzYyOSwxOSBAQAogCS8qIFJldHVybiBoYXBweSAqLwogCXJldHVybiAwOwogfQotbW9kdWxlX2luaXQocnRjX2Zyb200X2luaXQpOwogCittb2R1bGVfaW5pdChydGNfZnJvbTRfaW5pdCk7CiAKIC8qCiAgKiBDbGVhbiB1cCByb3V0aW5lCiAgKi8KLSNpZmRlZiBNT0RVTEUKLXN0YXRpYyB2b2lkIF9fZXhpdCBydGNfZnJvbTRfY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBydGNfZnJvbTRfY2xlYW51cCh2b2lkKQogewogCS8qIFJlbGVhc2UgcmVzb3VyY2UsIHVucmVnaXN0ZXIgcGFydGl0aW9ucyAqLwogCW5hbmRfcmVsZWFzZShydGNfZnJvbTRfbXRkKTsKIAogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCi0Ja2ZyZWUgKHJ0Y19mcm9tNF9tdGQpOworCWtmcmVlKHJ0Y19mcm9tNF9tdGQpOwogCiAjaWZkZWYgUlRDX0ZST000X0hXRUNDCiAJLyogRnJlZSB0aGUgcmVlZCBzb2xvbW9uIHJlc291cmNlcyAqLwpAQCAtNjc0LDEwICs2NTAsOSBAQAogCX0KICNlbmRpZgogfQorCiBtb2R1bGVfZXhpdChydGNfZnJvbTRfY2xlYW51cCk7Ci0jZW5kaWYKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiZC5tYXJsaW4gPGRtYXJsaW5AcmVkaGF0LmNvbSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJCb2FyZC1zcGVjaWZpYyBnbHVlIGxheWVyIGZvciBBRy1BTkQgZmxhc2ggb24gUmVuZXNhcyBGUk9NX0JPQVJENCIpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCmluZGV4IDViNTU1OTkuLjJjMjYyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCkBAIC0xOCw4ICsxOCw5IEBACiAgKgkyMC1KdW4tMjAwNSAgQkpEICBVcGRhdGVkIHMzYzI0NDAgc3VwcG9ydCwgZml4ZWQgdGltaW5nIGJ1ZwogICoJMDgtSnVsLTIwMDUgIEJKRCAgRml4IE9PUFMgd2hlbiBubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkCiAgKgkyMC1PY3QtMjAwNSAgQkpEICBGaXggdGltaW5nIGNhbGN1bGF0aW9uIGJ1ZworICoJMTQtSmFuLTIwMDYgIEJKRCAgQWxsb3cgY2xvY2sgdG8gYmUgc3RvcHBlZCB3aGVuIGlkbGUKICAqCi0gKiAkSWQ6IHMzYzI0MTAuYyx2IDEuMjAgMjAwNS8xMS8wNyAxMToxNDozMSBnbGVpeG5lciBFeHAgJAorICogJElkOiBzM2MyNDEwLmMsdiAxLjIzIDIwMDYvMDQvMDEgMTg6MDY6MjkgYmpkIEV4cCAkCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNiw5ICszNyw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwogCi0jaW5jbHVkZSA8Y29uZmlnL210ZC9uYW5kL3MzYzI0MTAvaHdlY2MuaD4KLSNpbmNsdWRlIDxjb25maWcvbXRkL25hbmQvczNjMjQxMC9kZWJ1Zy5oPgotCiAjaWZkZWYgQ09ORklHX01URF9OQU5EX1MzQzI0MTBfREVCVUcKICNkZWZpbmUgREVCVUcKICNlbmRpZgpAQCAtNzMsMTQgKzcxLDIwIEBACiBzdGF0aWMgaW50IGhhcmR3YXJlX2VjYyA9IDA7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NVERfTkFORF9TM0MyNDEwX0NMS1NUT1AKK3N0YXRpYyBpbnQgY2xvY2tfc3RvcCA9IDE7CisjZWxzZQorc3RhdGljIGNvbnN0IGludCBjbG9ja19zdG9wID0gMDsKKyNlbmRpZgorCisKIC8qIG5ldyBvb2IgcGxhY2VtZW50IGJsb2NrIGZvciB1c2Ugd2l0aCBoYXJkd2FyZSBlY2MgZ2VuZXJhdGlvbgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG5hbmRfaHdfZWNjb29iID0gewotCS51c2VlY2MJCT0gTVREX05BTkRFQ0NfQVVUT1BMQUNFLAotCS5lY2NieXRlcwk9IDMsCi0JLmVjY3BvcwkJPSB7MCwgMSwgMiB9LAotCS5vb2JmcmVlCT0geyB7OCwgOH0gfQorc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX2h3X2VjY29vYiA9IHsKKwkuZWNjYnl0ZXMgPSAzLAorCS5lY2Nwb3MgPSB7MCwgMSwgMn0sCisJLm9vYmZyZWUgPSB7ezgsIDh9fQogfTsKIAogLyogY29udHJvbGxlciBhbmQgbXRkIGluZm9ybWF0aW9uICovCkBAIC0xMzUsNiArMTM5LDExIEBACiAJcmV0dXJuIGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGFsbG93X2Nsa19zdG9wKHN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gY2xvY2tfc3RvcDsKK30KKwogLyogdGltaW5nIGNhbGN1bGF0aW9ucyAqLwogCiAjZGVmaW5lIE5TX0lOX0tIWiAxMDAwMDAwCkBAIC0xNDksOCArMTU4LDcgQEAKIAlwcl9kZWJ1ZygicmVzdWx0ICVkIGZyb20gJWxkLCAlZFxuIiwgcmVzdWx0LCBjbGssIHdhbnRlZCk7CiAKIAlpZiAocmVzdWx0ID4gbWF4KSB7Ci0JCXByaW50aygiJWQgbnMgaXMgdG9vIGJpZyBmb3IgY3VycmVudCBjbG9jayByYXRlICVsZFxuIiwKLQkJICAgICAgIHdhbnRlZCwgY2xrKTsKKwkJcHJpbnRrKCIlZCBucyBpcyB0b28gYmlnIGZvciBjdXJyZW50IGNsb2NrIHJhdGUgJWxkXG4iLCB3YW50ZWQsIGNsayk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE2NCw4ICsxNzIsNyBAQAogCiAvKiBjb250cm9sbGVyIHNldHVwICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2luaXRodyhzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2luaXRodyhzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8sIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqcGxhdCA9IHRvX25hbmRfcGxhdChwZGV2KTsKIAl1bnNpZ25lZCBsb25nIGNsa3JhdGUgPSBjbGtfZ2V0X3JhdGUoaW5mby0+Y2xrKTsKQEAgLTE3Nyw3ICsxODQsNyBAQAogCWNsa3JhdGUgLz0gMTAwMDsJLyogdHVybiBjbG9jayBpbnRvIGtIeiBmb3IgZWFzZSBvZiB1c2UgKi8KIAogCWlmIChwbGF0ICE9IE5VTEwpIHsKLQkJdGFjbHMgID0gczNjMjQxMF9uYW5kX2NhbGNfcmF0ZShwbGF0LT50YWNscywgY2xrcmF0ZSwgNCk7CisJCXRhY2xzID0gczNjMjQxMF9uYW5kX2NhbGNfcmF0ZShwbGF0LT50YWNscywgY2xrcmF0ZSwgNCk7CiAJCXR3cnBoMCA9IHMzYzI0MTBfbmFuZF9jYWxjX3JhdGUocGxhdC0+dHdycGgwLCBjbGtyYXRlLCA4KTsKIAkJdHdycGgxID0gczNjMjQxMF9uYW5kX2NhbGNfcmF0ZShwbGF0LT50d3JwaDEsIGNsa3JhdGUsIDgpOwogCX0gZWxzZSB7CkBAIC0xOTMsMTkgKzIwMCwyMiBAQAogCX0KIAogCXByaW50ayhLRVJOX0lORk8gUEZYICJUYWNscz0lZCwgJWRucyBUd3JwaDA9JWQgJWRucywgVHdycGgxPSVkICVkbnNcbiIsCi0JICAgICAgIHRhY2xzLCB0b19ucyh0YWNscywgY2xrcmF0ZSksCi0JICAgICAgIHR3cnBoMCwgdG9fbnModHdycGgwLCBjbGtyYXRlKSwKLQkgICAgICAgdHdycGgxLCB0b19ucyh0d3JwaDEsIGNsa3JhdGUpKTsKKwkgICAgICAgdGFjbHMsIHRvX25zKHRhY2xzLCBjbGtyYXRlKSwgdHdycGgwLCB0b19ucyh0d3JwaDAsIGNsa3JhdGUpLCB0d3JwaDEsIHRvX25zKHR3cnBoMSwgY2xrcmF0ZSkpOwogCiAJaWYgKCFpbmZvLT5pc19zM2MyNDQwKSB7Ci0JCWNmZyAgPSBTM0MyNDEwX05GQ09ORl9FTjsKLQkJY2ZnIHw9IFMzQzI0MTBfTkZDT05GX1RBQ0xTKHRhY2xzLTEpOwotCQljZmcgfD0gUzNDMjQxMF9ORkNPTkZfVFdSUEgwKHR3cnBoMC0xKTsKLQkJY2ZnIHw9IFMzQzI0MTBfTkZDT05GX1RXUlBIMSh0d3JwaDEtMSk7CisJCWNmZyA9IFMzQzI0MTBfTkZDT05GX0VOOworCQljZmcgfD0gUzNDMjQxMF9ORkNPTkZfVEFDTFModGFjbHMgLSAxKTsKKwkJY2ZnIHw9IFMzQzI0MTBfTkZDT05GX1RXUlBIMCh0d3JwaDAgLSAxKTsKKwkJY2ZnIHw9IFMzQzI0MTBfTkZDT05GX1RXUlBIMSh0d3JwaDEgLSAxKTsKIAl9IGVsc2UgewotCQljZmcgICA9IFMzQzI0NDBfTkZDT05GX1RBQ0xTKHRhY2xzLTEpOwotCQljZmcgIHw9IFMzQzI0NDBfTkZDT05GX1RXUlBIMCh0d3JwaDAtMSk7Ci0JCWNmZyAgfD0gUzNDMjQ0MF9ORkNPTkZfVFdSUEgxKHR3cnBoMS0xKTsKKwkJY2ZnID0gUzNDMjQ0MF9ORkNPTkZfVEFDTFModGFjbHMgLSAxKTsKKwkJY2ZnIHw9IFMzQzI0NDBfTkZDT05GX1RXUlBIMCh0d3JwaDAgLSAxKTsKKwkJY2ZnIHw9IFMzQzI0NDBfTkZDT05GX1RXUlBIMSh0d3JwaDEgLSAxKTsKKworCQkvKiBlbmFibGUgdGhlIGNvbnRyb2xsZXIgYW5kIGRlLWFzc2VydCBuRkNFICovCisKKwkJd3JpdGVsKFMzQzI0NDBfTkZDT05UX0VOQUJMRSB8IFMzQzI0NDBfTkZDT05UX0VOQUJMRSwKKwkJICAgICAgIGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GQ09OVCk7CiAJfQogCiAJcHJfZGVidWcoUEZYICJORl9DT05GIGlzIDB4JWx4XG4iLCBjZmcpOwpAQCAtMjI5LDcgKzIzOSwxMCBAQAogCWluZm8gPSBubXRkLT5pbmZvOwogCiAJYml0ID0gKGluZm8tPmlzX3MzYzI0NDApID8gUzNDMjQ0MF9ORkNPTlRfbkZDRSA6IFMzQzI0MTBfTkZDT05GX25GQ0U7Ci0JcmVnID0gaW5mby0+cmVncysoKGluZm8tPmlzX3MzYzI0NDApID8gUzNDMjQ0MF9ORkNPTlQ6UzNDMjQxMF9ORkNPTkYpOworCXJlZyA9IGluZm8tPnJlZ3MgKyAoKGluZm8tPmlzX3MzYzI0NDApID8gUzNDMjQ0MF9ORkNPTlQgOiBTM0MyNDEwX05GQ09ORik7CisKKwlpZiAoY2hpcCAhPSAtMSAmJiBhbGxvd19jbGtfc3RvcChpbmZvKSkKKwkJY2xrX2VuYWJsZShpbmZvLT5jbGspOwogCiAJY3VyID0gcmVhZGwocmVnKTsKIApAQCAtMjQzLDc3ICsyNTYsNTEgQEAKIAogCQlpZiAoaW5mby0+cGxhdGZvcm0gIT0gTlVMTCkgewogCQkJaWYgKGluZm8tPnBsYXRmb3JtLT5zZWxlY3RfY2hpcCAhPSBOVUxMKQotCQkJCShpbmZvLT5wbGF0Zm9ybS0+c2VsZWN0X2NoaXApKG5tdGQtPnNldCwgY2hpcCk7CisJCQkJKGluZm8tPnBsYXRmb3JtLT5zZWxlY3RfY2hpcCkgKG5tdGQtPnNldCwgY2hpcCk7CiAJCX0KIAogCQljdXIgJj0gfmJpdDsKIAl9CiAKIAl3cml0ZWwoY3VyLCByZWcpOworCisJaWYgKGNoaXAgPT0gLTEgJiYgYWxsb3dfY2xrX3N0b3AoaW5mbykpCisJCWNsa19kaXNhYmxlKGluZm8tPmNsayk7CiB9CiAKLS8qIGNvbW1hbmQgYW5kIGNvbnRyb2wgZnVuY3Rpb25zCisvKiBzM2MyNDEwX25hbmRfaHdjb250cm9sCiAgKgotICogTm90ZSwgdGhlc2UgYWxsIHVzZSB0Z2x4J3MgbWV0aG9kIG9mIGNoYW5naW5nIHRoZSBJT19BRERSX1cgZmllbGQKLSAqIHRvIG1ha2UgdGhlIGNvZGUgc2ltcGxlciwgYW5kIHVzZSB0aGUgbmFuZCBsYXllcidzIGNvZGUgdG8gaXNzdWUgdGhlCi0gKiBjb21tYW5kIGFuZCBhZGRyZXNzIHNlcXVlbmNlcyB2aWEgdGhlIHByb3BlciBJTyBwb3J0cy4KLSAqCisgKiBJc3N1ZSBjb21tYW5kIGFuZCBhZGRyZXNzIGN5Y2xlcyB0byB0aGUgY2hpcAogKi8KIAotc3RhdGljIHZvaWQgczNjMjQxMF9uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHMzYzI0MTBfbmFuZF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkJICAgdW5zaWduZWQgaW50IGN0cmwpCiB7CiAJc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvID0gczNjMjQxMF9uYW5kX210ZF90b2luZm8obXRkKTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCQorCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FsbGVkIGZvciBOQ0VcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6Ci0JCWNoaXAtPklPX0FERFJfVyA9IGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GQ01EOwotCQlicmVhazsKLQotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotCQljaGlwLT5JT19BRERSX1cgPSBpbmZvLT5yZWdzICsgUzNDMjQxMF9ORkFERFI7Ci0JCWJyZWFrOwotCi0JCS8qIE5BTkRfQ1RMX0NMUkNMRTogKi8KLQkJLyogTkFORF9DVExfQ0xSQUxFOiAqLwotCWRlZmF1bHQ6Ci0JCWNoaXAtPklPX0FERFJfVyA9IGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GREFUQTsKLQkJYnJlYWs7Ci0JfQorCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GQ01EKTsKKwllbHNlCisJCXdyaXRlYihjbWQsIGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GQUREUik7CiB9CiAKIC8qIGNvbW1hbmQgYW5kIGNvbnRyb2wgZnVuY3Rpb25zICovCiAKLXN0YXRpYyB2b2lkIHMzYzI0NDBfbmFuZF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCitzdGF0aWMgdm9pZCBzM2MyNDQwX25hbmRfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJCSAgIHVuc2lnbmVkIGludCBjdHJsKQogewogCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHMzYzI0MTBfbmFuZF9tdGRfdG9pbmZvKG10ZCk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBOQU5EX0NUTF9TRVROQ0U6Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbGxlZCBmb3IgTkNFXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlicmVhazsKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOgotCQljaGlwLT5JT19BRERSX1cgPSBpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORkNNRDsKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKLQkJY2hpcC0+SU9fQUREUl9XID0gaW5mby0+cmVncyArIFMzQzI0NDBfTkZBRERSOwotCQlicmVhazsKLQotCQkvKiBOQU5EX0NUTF9DTFJDTEU6ICovCi0JCS8qIE5BTkRfQ1RMX0NMUkFMRTogKi8KLQlkZWZhdWx0OgotCQljaGlwLT5JT19BRERSX1cgPSBpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORkRBVEE7Ci0JCWJyZWFrOwotCX0KKwlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQl3cml0ZWIoY21kLCBpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORkNNRCk7CisJZWxzZQorCQl3cml0ZWIoY21kLCBpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORkFERFIpOwogfQogCiAvKiBzM2MyNDEwX25hbmRfZGV2cmVhZHkoKQpAQCAtMzMwLDIyICszMTcsMTYgQEAKIAlyZXR1cm4gcmVhZGIoaW5mby0+cmVncyArIFMzQzI0MTBfTkZTVEFUKSAmIFMzQzI0MTBfTkZTVEFUX0JVU1k7CiB9CiAKLQogLyogRUNDIGhhbmRsaW5nIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgaW50IHMzYzI0MTBfbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAotCQkJCSAgICAgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKK3N0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpCiB7Ci0JcHJfZGVidWcoInMzYzI0MTBfbmFuZF9jb3JyZWN0X2RhdGEoJXAsJXAsJXAsJXApXG4iLAotCQkgbXRkLCBkYXQsIHJlYWRfZWNjLCBjYWxjX2VjYyk7CisJcHJfZGVidWcoInMzYzI0MTBfbmFuZF9jb3JyZWN0X2RhdGEoJXAsJXAsJXAsJXApXG4iLCBtdGQsIGRhdCwgcmVhZF9lY2MsIGNhbGNfZWNjKTsKIAogCXByX2RlYnVnKCJlY2NzOiByZWFkICUwMngsJTAyeCwlMDJ4IHZzIGNhbGMgJTAyeCwlMDJ4LCUwMnhcbiIsCi0JCSByZWFkX2VjY1swXSwgcmVhZF9lY2NbMV0sIHJlYWRfZWNjWzJdLAotCQkgY2FsY19lY2NbMF0sIGNhbGNfZWNjWzFdLCBjYWxjX2VjY1syXSk7CisJCSByZWFkX2VjY1swXSwgcmVhZF9lY2NbMV0sIHJlYWRfZWNjWzJdLCBjYWxjX2VjY1swXSwgY2FsY19lY2NbMV0sIGNhbGNfZWNjWzJdKTsKIAotCWlmIChyZWFkX2VjY1swXSA9PSBjYWxjX2VjY1swXSAmJgotCSAgICByZWFkX2VjY1sxXSA9PSBjYWxjX2VjY1sxXSAmJgotCSAgICByZWFkX2VjY1syXSA9PSBjYWxjX2VjY1syXSkKKwlpZiAocmVhZF9lY2NbMF0gPT0gY2FsY19lY2NbMF0gJiYgcmVhZF9lY2NbMV0gPT0gY2FsY19lY2NbMV0gJiYgcmVhZF9lY2NbMl0gPT0gY2FsY19lY2NbMl0pCiAJCXJldHVybiAwOwogCiAJLyogd2UgY3VyZW50bHkgaGF2ZSBubyBtZXRob2QgZm9yIGNvcnJlY3RpbmcgdGhlIGVycm9yICovCkBAIC0zNzgsOCArMzU5LDcgQEAKIAl3cml0ZWwoY3RybCB8IFMzQzI0NDBfTkZDT05UX0lOSVRFQ0MsIGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GQ09OVCk7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkJICAgICAgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCitzdGF0aWMgaW50IHMzYzI0MTBfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKIHsKIAlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSBzM2MyNDEwX25hbmRfbXRkX3RvaW5mbyhtdGQpOwogCkBAIC0zODcsMTUgKzM2NywxMiBAQAogCWVjY19jb2RlWzFdID0gcmVhZGIoaW5mby0+cmVncyArIFMzQzI0MTBfTkZFQ0MgKyAxKTsKIAllY2NfY29kZVsyXSA9IHJlYWRiKGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GRUNDICsgMik7CiAKLQlwcl9kZWJ1ZygiY2FsY3VsYXRlX2VjYzogcmV0dXJuaW5nIGVjYyAlMDJ4LCUwMngsJTAyeFxuIiwKLQkJIGVjY19jb2RlWzBdLCBlY2NfY29kZVsxXSwgZWNjX2NvZGVbMl0pOworCXByX2RlYnVnKCJjYWxjdWxhdGVfZWNjOiByZXR1cm5pbmcgZWNjICUwMngsJTAyeCwlMDJ4XG4iLCBlY2NfY29kZVswXSwgZWNjX2NvZGVbMV0sIGVjY19jb2RlWzJdKTsKIAogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgczNjMjQ0MF9uYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkJICAgICAgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCitzdGF0aWMgaW50IHMzYzI0NDBfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKIHsKIAlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSBzM2MyNDEwX25hbmRfbXRkX3RvaW5mbyhtdGQpOwogCXVuc2lnbmVkIGxvbmcgZWNjID0gcmVhZGwoaW5mby0+cmVncyArIFMzQzI0NDBfTkZNRUNDMCk7CkBAIC00MDQsMTMgKzM4MSwxMSBAQAogCWVjY19jb2RlWzFdID0gZWNjID4+IDg7CiAJZWNjX2NvZGVbMl0gPSBlY2MgPj4gMTY7CiAKLQlwcl9kZWJ1ZygiY2FsY3VsYXRlX2VjYzogcmV0dXJuaW5nIGVjYyAlMDJ4LCUwMngsJTAyeFxuIiwKLQkJIGVjY19jb2RlWzBdLCBlY2NfY29kZVsxXSwgZWNjX2NvZGVbMl0pOworCXByX2RlYnVnKCJjYWxjdWxhdGVfZWNjOiByZXR1cm5pbmcgZWNjICUwMngsJTAyeCwlMDJ4XG4iLCBlY2NfY29kZVswXSwgZWNjX2NvZGVbMV0sIGVjY19jb2RlWzJdKTsKIAogCXJldHVybiAwOwogfQogCi0KIC8qIG92ZXItcmlkZSB0aGUgc3RhbmRhcmQgZnVuY3Rpb25zIGZvciBhIGxpdHRsZSBtb3JlIHNwZWVkLiBXZSBjYW4KICAqIHVzZSByZWFkL3dyaXRlIGJsb2NrIHRvIG1vdmUgdGhlIGRhdGEgYnVmZmVycyB0by9mcm9tIHRoZSBjb250cm9sbGVyCiAqLwpAQCAtNDIxLDggKzM5Niw3IEBACiAJcmVhZHNiKHRoaXMtPklPX0FERFJfUiwgYnVmLCBsZW4pOwogfQogCi1zdGF0aWMgdm9pZCBzM2MyNDEwX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJCSAgIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgczNjMjQxMF9uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAl3cml0ZXNiKHRoaXMtPklPX0FERFJfVywgYnVmLCBsZW4pOwpAQCAtNDU5LDcgKzQzMyw4IEBACiAJLyogZnJlZSB0aGUgY29tbW9uIHJlc291cmNlcyAqLwogCiAJaWYgKGluZm8tPmNsayAhPSBOVUxMICYmICFJU19FUlIoaW5mby0+Y2xrKSkgewotCQljbGtfZGlzYWJsZShpbmZvLT5jbGspOworCQlpZiAoIWFsbG93X2Nsa19zdG9wKGluZm8pKQorCQkJY2xrX2Rpc2FibGUoaW5mby0+Y2xrKTsKIAkJY2xrX3B1dChpbmZvLT5jbGspOwogCX0KIApAQCAtNDg4LDkgKzQ2Myw3IEBACiAJCXJldHVybiBhZGRfbXRkX2RldmljZSgmbXRkLT5tdGQpOwogCiAJaWYgKHNldC0+bnJfcGFydGl0aW9ucyA+IDAgJiYgc2V0LT5wYXJ0aXRpb25zICE9IE5VTEwpIHsKLQkJcmV0dXJuIGFkZF9tdGRfcGFydGl0aW9ucygmbXRkLT5tdGQsCi0JCQkJCSAgc2V0LT5wYXJ0aXRpb25zLAotCQkJCQkgIHNldC0+bnJfcGFydGl0aW9ucyk7CisJCXJldHVybiBhZGRfbXRkX3BhcnRpdGlvbnMoJm10ZC0+bXRkLCBzZXQtPnBhcnRpdGlvbnMsIHNldC0+bnJfcGFydGl0aW9ucyk7CiAJfQogCiAJcmV0dXJuIGFkZF9tdGRfZGV2aWNlKCZtdGQtPm10ZCk7CkBAIC01MTcsNyArNDkwLDcgQEAKIAogCWNoaXAtPklPX0FERFJfUgkgICA9IGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GREFUQTsKIAljaGlwLT5JT19BRERSX1cgICAgPSBpbmZvLT5yZWdzICsgUzNDMjQxMF9ORkRBVEE7Ci0JY2hpcC0+aHdjb250cm9sICAgID0gczNjMjQxMF9uYW5kX2h3Y29udHJvbDsKKwljaGlwLT5jbWRfY3RybCAgICAgPSBzM2MyNDEwX25hbmRfaHdjb250cm9sOwogCWNoaXAtPmRldl9yZWFkeSAgICA9IHMzYzI0MTBfbmFuZF9kZXZyZWFkeTsKIAljaGlwLT53cml0ZV9idWYgICAgPSBzM2MyNDEwX25hbmRfd3JpdGVfYnVmOwogCWNoaXAtPnJlYWRfYnVmICAgICA9IHMzYzI0MTBfbmFuZF9yZWFkX2J1ZjsKQEAgLTUzMCwyNiArNTAzLDI5IEBACiAJaWYgKGluZm8tPmlzX3MzYzI0NDApIHsKIAkJY2hpcC0+SU9fQUREUl9SCSA9IGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GREFUQTsKIAkJY2hpcC0+SU9fQUREUl9XICA9IGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GREFUQTsKLQkJY2hpcC0+aHdjb250cm9sICA9IHMzYzI0NDBfbmFuZF9od2NvbnRyb2w7CisJCWNoaXAtPmNtZF9jdHJsICAgPSBzM2MyNDQwX25hbmRfaHdjb250cm9sOwogCX0KIAogCW5tdGQtPmluZm8JICAgPSBpbmZvOwogCW5tdGQtPm10ZC5wcml2CSAgID0gY2hpcDsKKwlubXRkLT5tdGQub3duZXIgICAgPSBUSElTX01PRFVMRTsKIAlubXRkLT5zZXQJICAgPSBzZXQ7CiAKIAlpZiAoaGFyZHdhcmVfZWNjKSB7Ci0JCWNoaXAtPmNvcnJlY3RfZGF0YSAgPSBzM2MyNDEwX25hbmRfY29ycmVjdF9kYXRhOwotCQljaGlwLT5lbmFibGVfaHdlY2MgID0gczNjMjQxMF9uYW5kX2VuYWJsZV9od2VjYzsKLQkJY2hpcC0+Y2FsY3VsYXRlX2VjYyA9IHMzYzI0MTBfbmFuZF9jYWxjdWxhdGVfZWNjOwotCQljaGlwLT5lY2Ntb2RlCSAgICA9IE5BTkRfRUNDX0hXM181MTI7Ci0JCWNoaXAtPmF1dG9vb2IgICAgICAgPSAmbmFuZF9od19lY2Nvb2I7CisJCWNoaXAtPmVjYy5jb3JyZWN0ICAgPSBzM2MyNDEwX25hbmRfY29ycmVjdF9kYXRhOworCQljaGlwLT5lY2MuaHdjdGwJICAgID0gczNjMjQxMF9uYW5kX2VuYWJsZV9od2VjYzsKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZSA9IHMzYzI0MTBfbmFuZF9jYWxjdWxhdGVfZWNjOworCQljaGlwLT5lY2MubW9kZQkgICAgPSBOQU5EX0VDQ19IVzsKKwkJY2hpcC0+ZWNjLnNpemUJICAgID0gNTEyOworCQljaGlwLT5lY2MuYnl0ZXMJICAgID0gMzsKKwkJY2hpcC0+ZWNjLmxheW91dCAgICA9ICZuYW5kX2h3X2VjY29vYjsKIAogCQlpZiAoaW5mby0+aXNfczNjMjQ0MCkgewotCQkJY2hpcC0+ZW5hYmxlX2h3ZWNjICA9IHMzYzI0NDBfbmFuZF9lbmFibGVfaHdlY2M7Ci0JCQljaGlwLT5jYWxjdWxhdGVfZWNjID0gczNjMjQ0MF9uYW5kX2NhbGN1bGF0ZV9lY2M7CisJCQljaGlwLT5lY2MuaHdjdGwgICAgID0gczNjMjQ0MF9uYW5kX2VuYWJsZV9od2VjYzsKKwkJCWNoaXAtPmVjYy5jYWxjdWxhdGUgPSBzM2MyNDQwX25hbmRfY2FsY3VsYXRlX2VjYzsKIAkJfQogCX0gZWxzZSB7Ci0JCWNoaXAtPmVjY21vZGUJICAgID0gTkFORF9FQ0NfU09GVDsKKwkJY2hpcC0+ZWNjLm1vZGUJICAgID0gTkFORF9FQ0NfU09GVDsKIAl9CiB9CiAKQEAgLTY1NCwxMyArNjMwLDExIEBACiAJbm10ZCA9IGluZm8tPm10ZHM7CiAKIAlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBucl9zZXRzOyBzZXRubysrLCBubXRkKyspIHsKLQkJcHJfZGVidWcoImluaXRpYWxpc2luZyBzZXQgJWQgKCVwLCBpbmZvICVwKVxuIiwKLQkJCSBzZXRubywgbm10ZCwgaW5mbyk7CisJCXByX2RlYnVnKCJpbml0aWFsaXNpbmcgc2V0ICVkICglcCwgaW5mbyAlcClcbiIsIHNldG5vLCBubXRkLCBpbmZvKTsKIAogCQlzM2MyNDEwX25hbmRfaW5pdF9jaGlwKGluZm8sIG5tdGQsIHNldHMpOwogCi0JCW5tdGQtPnNjYW5fcmVzID0gbmFuZF9zY2FuKCZubXRkLT5tdGQsCi0JCQkJCSAgIChzZXRzKSA/IHNldHMtPm5yX2NoaXBzIDogMSk7CisJCW5tdGQtPnNjYW5fcmVzID0gbmFuZF9zY2FuKCZubXRkLT5tdGQsIChzZXRzKSA/IHNldHMtPm5yX2NoaXBzIDogMSk7CiAKIAkJaWYgKG5tdGQtPnNjYW5fcmVzID09IDApIHsKIAkJCXMzYzI0MTBfbmFuZF9hZGRfcGFydGl0aW9uKGluZm8sIG5tdGQsIHNldHMpOwpAQCAtNjcwLDYgKzY0NCwxMSBAQAogCQkJc2V0cysrOwogCX0KIAorCWlmIChhbGxvd19jbGtfc3RvcChpbmZvKSkgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiY2xvY2sgaWRsZSBzdXBwb3J0IGVuYWJsZWRcbiIpOworCQljbGtfZGlzYWJsZShpbmZvLT5jbGspOworCX0KKwogCXByX2RlYnVnKCJpbml0aWFsaXNlZCBva1xuIik7CiAJcmV0dXJuIDA7CiAKQEAgLTY4MSw2ICs2NjAsNDEgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKiBQTSBTdXBwb3J0ICovCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgczNjMjR4eF9uYW5kX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgcG0pCit7CisJc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpbmZvKSB7CisJCWlmICghYWxsb3dfY2xrX3N0b3AoaW5mbykpCisJCQljbGtfZGlzYWJsZShpbmZvLT5jbGspOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfbmFuZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaW5mbykgeworCQljbGtfZW5hYmxlKGluZm8tPmNsayk7CisJCXMzYzI0MTBfbmFuZF9pbml0aHcoaW5mbywgZGV2KTsKKworCQlpZiAoYWxsb3dfY2xrX3N0b3AoaW5mbykpCisJCQljbGtfZGlzYWJsZShpbmZvLT5jbGspOworCX0KKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBzM2MyNHh4X25hbmRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0eHhfbmFuZF9yZXN1bWUgTlVMTAorI2VuZGlmCisKIC8qIGRyaXZlciBkZXZpY2UgcmVnaXN0cmF0aW9uICovCiAKIHN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKQEAgLTY5Niw2ICs3MTAsOCBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMF9uYW5kX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczNjMjQxMF9uYW5kX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjQxMF9uYW5kX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHMzYzI0eHhfbmFuZF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjR4eF9uYW5kX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiczNjMjQxMC1uYW5kIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCkBAIC03MDUsNiArNzIxLDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0NDBfbmFuZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0NDBfbmFuZF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0MTBfbmFuZF9yZW1vdmUsCisJLnN1c3BlbmQJPSBzM2MyNHh4X25hbmRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0eHhfbmFuZF9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInMzYzI0NDAtbmFuZCIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zaGFycHNsLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYwppbmRleCAxOTI0YTRmLi4yMTc0MzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYwpAQCAtNDYsNyArNDYsNiBAQAogI2RlZmluZSBGTENMRQkJKDEgPDwgMSkKICNkZWZpbmUgRkxDRTAJCSgxIDw8IDApCiAKLQogLyoKICAqIE1URCBzdHJ1Y3R1cmUgZm9yIFNoYXJwU0wKICAqLwpAQCAtNjAsNTAgKzU5LDQ0IEBACiBzdGF0aWMgaW50IG5yX3BhcnRpdGlvbnM7CiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2hhcnBzbF9uYW5kX2RlZmF1bHRfcGFydGl0aW9uX2luZm9bXSA9IHsKIAl7Ci0JLm5hbWUgPSAiU3lzdGVtIEFyZWEiLAotCS5vZmZzZXQgPSAwLAotCS5zaXplID0gNyAqIDEwMjQgKiAxMDI0LAotCX0sCisJIC5uYW1lID0gIlN5c3RlbSBBcmVhIiwKKwkgLm9mZnNldCA9IDAsCisJIC5zaXplID0gNyAqIDEwMjQgKiAxMDI0LAorCSB9LAogCXsKLQkubmFtZSA9ICJSb290IEZpbGVzeXN0ZW0iLAotCS5vZmZzZXQgPSA3ICogMTAyNCAqIDEwMjQsCi0JLnNpemUgPSAzMCAqIDEwMjQgKiAxMDI0LAotCX0sCisJIC5uYW1lID0gIlJvb3QgRmlsZXN5c3RlbSIsCisJIC5vZmZzZXQgPSA3ICogMTAyNCAqIDEwMjQsCisJIC5zaXplID0gMzAgKiAxMDI0ICogMTAyNCwKKwkgfSwKIAl7Ci0JLm5hbWUgPSAiSG9tZSBGaWxlc3lzdGVtIiwKLQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5EICwKLQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwgLAotCX0sCisJIC5uYW1lID0gIkhvbWUgRmlsZXN5c3RlbSIsCisJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJIC5zaXplID0gTVREUEFSVF9TSVpfRlVMTCwKKwkgfSwKIH07CiAKIC8qCiAgKgloYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcworICoJY3RybDoKKyAqCU5BTkRfQ05FOiBiaXQgMCAtPiBiaXQgMCAmIDQKKyAqCU5BTkRfQ0xFOiBiaXQgMSAtPiBiaXQgMQorICoJTkFORF9BTEU6IGJpdCAyIC0+IGJpdCAyCisgKgogICovCi1zdGF0aWMgdm9pZAotc2hhcnBzbF9uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8qIG10ZCwgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHNoYXJwc2xfbmFuZF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkJICAgdW5zaWduZWQgaW50IGN0cmwpCiB7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLQkJd3JpdGViKHJlYWRiKEZMQVNIQ1RMKSB8IEZMQ0xFLCBGTEFTSENUTCk7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgotCQl3cml0ZWIocmVhZGIoRkxBU0hDVEwpICYgfkZMQ0xFLCBGTEFTSENUTCk7Ci0JCWJyZWFrOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKLQkJd3JpdGViKHJlYWRiKEZMQVNIQ1RMKSB8IEZMQUxFLCBGTEFTSENUTCk7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotCQl3cml0ZWIocmVhZGIoRkxBU0hDVEwpICYgfkZMQUxFLCBGTEFTSENUTCk7Ci0JCWJyZWFrOworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl1bnNpZ25lZCBjaGFyIGJpdHMgPSBjdHJsICYgMHgwNzsKIAotCWNhc2UgTkFORF9DVExfU0VUTkNFOgotCQl3cml0ZWIocmVhZGIoRkxBU0hDVEwpICYgfihGTENFMHxGTENFMSksIEZMQVNIQ1RMKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCXdyaXRlYihyZWFkYihGTEFTSENUTCkgfCAoRkxDRTB8RkxDRTEpLCBGTEFTSENUTCk7Ci0JCWJyZWFrOworCQliaXRzIHw9IChjdHJsICYgMHgwMSkgPDwgNDsKKwkJd3JpdGViKChyZWFkYihGTEFTSENUTCkgJiAweDE3KSB8IGJpdHMsIEZMQVNIQ1RMKTsKIAl9CisKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyk7CiB9CiAKIHN0YXRpYyB1aW50OF90IHNjYW5fZmZfcGF0dGVybltdID0geyAweGZmLCAweGZmIH07CkBAIC0xMjIsMzEgKzExNSwyNiBAQAogCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBha2l0YV9vb2JpbmZvID0gewotCS51c2VlY2MgPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGFraXRhX29vYmluZm8gPSB7CiAJLmVjY2J5dGVzID0gMjQsCiAJLmVjY3BvcyA9IHsKLQkJMHg1LCAgMHgxLCAgMHgyLCAgMHgzLCAgMHg2LCAgMHg3LCAgMHgxNSwgMHgxMSwKLQkJMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKLQkJMHgyNiwgMHgyNywgMHgzNSwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNiwgMHgzN30sCi0JLm9vYmZyZWUgPSB7IHsweDA4LCAweDA5fSB9CisJCSAgIDB4NSwgMHgxLCAweDIsIDB4MywgMHg2LCAweDcsIDB4MTUsIDB4MTEsCisJCSAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MjUsIDB4MjEsIDB4MjIsIDB4MjMsCisJCSAgIDB4MjYsIDB4MjcsIDB4MzUsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzYsIDB4Mzd9LAorCS5vb2JmcmVlID0ge3sweDA4LCAweDA5fX0KIH07CiAKLXN0YXRpYyBpbnQKLXNoYXJwc2xfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvKiBtdGQpCitzdGF0aWMgaW50IHNoYXJwc2xfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CiAJcmV0dXJuICEoKHJlYWRiKEZMQVNIQ1RMKSAmIEZMUllCWSkgPT0gMCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1zaGFycHNsX25hbmRfZW5hYmxlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyogbXRkLCBpbnQgbW9kZSkKK3N0YXRpYyB2b2lkIHNoYXJwc2xfbmFuZF9lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQogewotCXdyaXRlYigwICxFQ0NDTFJSKTsKKwl3cml0ZWIoMCwgRUNDQ0xSUik7CiB9CiAKLXN0YXRpYyBpbnQKLXNoYXJwc2xfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyogbXRkLCBjb25zdCB1X2NoYXIqIGRhdCwKLQkJCQl1X2NoYXIqIGVjY19jb2RlKQorc3RhdGljIGludCBzaGFycHNsX25hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICogZGF0LCB1X2NoYXIgKiBlY2NfY29kZSkKIHsKIAllY2NfY29kZVswXSA9IH5yZWFkYihFQ0NMUFVCKTsKIAllY2NfY29kZVsxXSA9IH5yZWFkYihFQ0NMUExCKTsKQEAgLTE1NCw0NyArMTQyLDQ0IEBACiAJcmV0dXJuIHJlYWRiKEVDQ0NOVFIpICE9IDA7CiB9CiAKLQogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogY29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogI2VuZGlmCiAKLQogLyoKICAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQogICovCi1pbnQgX19pbml0Ci1zaGFycHNsX25hbmRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2hhcnBzbF9uYW5kX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwotCXN0cnVjdCBtdGRfcGFydGl0aW9uKiBzaGFycHNsX3BhcnRpdGlvbl9pbmZvOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpzaGFycHNsX3BhcnRpdGlvbl9pbmZvOwogCWludCBlcnIgPSAwOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0Jc2hhcnBzbF9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLAotCQkJCUdGUF9LRVJORUwpOworCXNoYXJwc2xfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzaGFycHNsX210ZCkgewotCQlwcmludGsgKCJVbmFibGUgdG8gYWxsb2NhdGUgU2hhcnBTTCBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CisJCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIFNoYXJwU0wgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBtYXAgcGh5c2ljYWwgYWRyZXNzICovCiAJc2hhcnBzbF9pb19iYXNlID0gaW9yZW1hcChzaGFycHNsX3BoeXNfYmFzZSwgMHgxMDAwKTsKLQlpZighc2hhcnBzbF9pb19iYXNlKXsKKwlpZiAoIXNoYXJwc2xfaW9fYmFzZSkgewogCQlwcmludGsoImlvcmVtYXAgdG8gYWNjZXNzIFNoYXJwIFNMIE5BTkQgY2hpcCBmYWlsZWRcbiIpOwogCQlrZnJlZShzaGFycHNsX210ZCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIEdldCBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSAqLwotCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAoJnNoYXJwc2xfbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnNoYXJwc2xfbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSBzaGFycHNsX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOwotCW1lbXNldCgoY2hhciAqKSB0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOworCW1lbXNldChzaGFycHNsX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAlzaGFycHNsX210ZC0+cHJpdiA9IHRoaXM7CisJc2hhcnBzbF9tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKgogCSAqIFBYQSBpbml0aWFsaXplCkBAIC0yMDUsMjMgKzE5MCwyNSBAQAogCXRoaXMtPklPX0FERFJfUiA9IEZMQVNISU87CiAJdGhpcy0+SU9fQUREUl9XID0gRkxBU0hJTzsKIAkvKiBTZXQgYWRkcmVzcyBvZiBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9uICovCi0JdGhpcy0+aHdjb250cm9sID0gc2hhcnBzbF9uYW5kX2h3Y29udHJvbDsKKwl0aGlzLT5jbWRfY3RybCA9IHNoYXJwc2xfbmFuZF9od2NvbnRyb2w7CiAJdGhpcy0+ZGV2X3JlYWR5ID0gc2hhcnBzbF9uYW5kX2Rldl9yZWFkeTsKIAkvKiAxNSB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KIAl0aGlzLT5jaGlwX2RlbGF5ID0gMTU7CiAJLyogc2V0IGVjY21vZGUgdXNpbmcgaGFyZHdhcmUgRUNDICovCi0JdGhpcy0+ZWNjbW9kZSA9IE5BTkRfRUNDX0hXM18yNTY7CisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKKwl0aGlzLT5lY2Muc2l6ZSA9IDI1NjsKKwl0aGlzLT5lY2MuYnl0ZXMgPSAzOwogCXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4gPSAmc2hhcnBzbF9iYnQ7CiAJaWYgKG1hY2hpbmVfaXNfYWtpdGEoKSB8fCBtYWNoaW5lX2lzX2JvcnpvaSgpKSB7CiAJCXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4gPSAmc2hhcnBzbF9ha2l0YV9iYnQ7Ci0JCXRoaXMtPmF1dG9vb2IgPSAmYWtpdGFfb29iaW5mbzsKKwkJdGhpcy0+ZWNjLmxheW91dCA9ICZha2l0YV9vb2JpbmZvOwogCX0KLQl0aGlzLT5lbmFibGVfaHdlY2MgPSBzaGFycHNsX25hbmRfZW5hYmxlX2h3ZWNjOwotCXRoaXMtPmNhbGN1bGF0ZV9lY2MgPSBzaGFycHNsX25hbmRfY2FsY3VsYXRlX2VjYzsKLQl0aGlzLT5jb3JyZWN0X2RhdGEgPSBuYW5kX2NvcnJlY3RfZGF0YTsKKwl0aGlzLT5lY2MuaHdjdGwgPSBzaGFycHNsX25hbmRfZW5hYmxlX2h3ZWNjOworCXRoaXMtPmVjYy5jYWxjdWxhdGUgPSBzaGFycHNsX25hbmRfY2FsY3VsYXRlX2VjYzsKKwl0aGlzLT5lY2MuY29ycmVjdCA9IG5hbmRfY29ycmVjdF9kYXRhOwogCiAJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCi0JZXJyPW5hbmRfc2NhbihzaGFycHNsX210ZCwxKTsKKwllcnIgPSBuYW5kX3NjYW4oc2hhcnBzbF9tdGQsIDEpOwogCWlmIChlcnIpIHsKIAkJaW91bm1hcChzaGFycHNsX2lvX2Jhc2UpOwogCQlrZnJlZShzaGFycHNsX210ZCk7CkBAIC0yMzAsMjQgKzIxNywyMyBAQAogCiAJLyogUmVnaXN0ZXIgdGhlIHBhcnRpdGlvbnMgKi8KIAlzaGFycHNsX210ZC0+bmFtZSA9ICJzaGFycHNsLW5hbmQiOwotCW5yX3BhcnRpdGlvbnMgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhzaGFycHNsX210ZCwgcGFydF9wcm9iZXMsCi0JCQkJCQkmc2hhcnBzbF9wYXJ0aXRpb25faW5mbywgMCk7CisJbnJfcGFydGl0aW9ucyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKHNoYXJwc2xfbXRkLCBwYXJ0X3Byb2JlcywgJnNoYXJwc2xfcGFydGl0aW9uX2luZm8sIDApOwogCiAJaWYgKG5yX3BhcnRpdGlvbnMgPD0gMCkgewogCQlucl9wYXJ0aXRpb25zID0gREVGQVVMVF9OVU1fUEFSVElUSU9OUzsKIAkJc2hhcnBzbF9wYXJ0aXRpb25faW5mbyA9IHNoYXJwc2xfbmFuZF9kZWZhdWx0X3BhcnRpdGlvbl9pbmZvOwogCQlpZiAobWFjaGluZV9pc19wb29kbGUoKSkgewotCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplPTMwICogMTAyNCAqIDEwMjQ7CisJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemUgPSAyMiAqIDEwMjQgKiAxMDI0OwogCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29yZ2koKSB8fCBtYWNoaW5lX2lzX3NoZXBoZXJkKCkpIHsKLQkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT0yNSAqIDEwMjQgKiAxMDI0OworCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplID0gMjUgKiAxMDI0ICogMTAyNDsKIAkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2h1c2t5KCkpIHsKLQkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT01MyAqIDEwMjQgKiAxMDI0OworCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplID0gNTMgKiAxMDI0ICogMTAyNDsKIAkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX3NwaXR6KCkpIHsKLQkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT01ICogMTAyNCAqIDEwMjQ7CisJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemUgPSA1ICogMTAyNCAqIDEwMjQ7CiAJCX0gZWxzZSBpZiAobWFjaGluZV9pc19ha2l0YSgpKSB7Ci0JCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemU9NTggKiAxMDI0ICogMTAyNDsKKwkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZSA9IDU4ICogMTAyNCAqIDEwMjQ7CiAJCX0gZWxzZSBpZiAobWFjaGluZV9pc19ib3J6b2koKSkgewotCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplPTMyICogMTAyNCAqIDEwMjQ7CisJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwogCQl9CiAJfQogCkBAIC0yNjEsMTUgKzI0NywxNSBAQAogCS8qIFJldHVybiBoYXBweSAqLwogCXJldHVybiAwOwogfQorCiBtb2R1bGVfaW5pdChzaGFycHNsX25hbmRfaW5pdCk7CiAKIC8qCiAgKiBDbGVhbiB1cCByb3V0aW5lCiAgKi8KLSNpZmRlZiBNT0RVTEUKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaGFycHNsX25hbmRfY2xlYW51cCh2b2lkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAmc2hhcnBzbF9tdGRbMV07CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopJnNoYXJwc2xfbXRkWzFdOwogCiAJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCiAJbmFuZF9yZWxlYXNlKHNoYXJwc2xfbXRkKTsKQEAgLTI3OSw4ICsyNjUsOCBAQAogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCiAJa2ZyZWUoc2hhcnBzbF9tdGQpOwogfQorCiBtb2R1bGVfZXhpdChzaGFycHNsX25hbmRfY2xlYW51cCk7Ci0jZW5kaWYKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAcnBzeXMubmV0PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zcGlhLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NwaWEuYwppbmRleCA5Y2YxY2U3Li4xZjZkNDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3NwaWEuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NwaWEuYwpAQCAtMzksMTYgKzM5LDE2IEBACiAgKi8KICNkZWZpbmUgU1BJQV9JT19CQVNFCTB4ZDAwMDAwMDAJLyogU3RhcnQgb2YgRVA3MjEyIElPIGFkZHJlc3Mgc3BhY2UgKi8KICNkZWZpbmUgU1BJQV9GSU9fQkFTRQkweGYwMDAwMDAwCS8qIEFkZHJlc3Mgd2hlcmUgZmxhc2ggaXMgbWFwcGVkICovCi0jZGVmaW5lIFNQSUFfUEVEUgkweDAwODAJCS8qCi0JCQkJCSAqIElPIG9mZnNldCB0byBQb3J0IEUgZGF0YSByZWdpc3RlcgotCQkJCQkgKiB3aGVyZSB0aGUgQ0xFLCBBTEUgYW5kIE5DRSBwaW5zCi0JCQkJCSAqIGFyZSB3aXJlZCB0by4KLQkJCQkJICovCi0jZGVmaW5lIFNQSUFfUEVERFIJMHgwMGMwCQkvKgotCQkJCQkgKiBJTyBvZmZzZXQgdG8gUG9ydCBFIGRhdGEgZGlyZWN0aW9uCi0JCQkJCSAqIHJlZ2lzdGVyIHNvIHdlIGNhbiBjb250cm9sIHRoZSBJTwotCQkJCQkgKiBsaW5lcy4KLQkJCQkJICovCisjZGVmaW5lIFNQSUFfUEVEUgkweDAwODAJLyoKKwkJCQkgKiBJTyBvZmZzZXQgdG8gUG9ydCBFIGRhdGEgcmVnaXN0ZXIKKwkJCQkgKiB3aGVyZSB0aGUgQ0xFLCBBTEUgYW5kIE5DRSBwaW5zCisJCQkJICogYXJlIHdpcmVkIHRvLgorCQkJCSAqLworI2RlZmluZSBTUElBX1BFRERSCTB4MDBjMAkvKgorCQkJCSAqIElPIG9mZnNldCB0byBQb3J0IEUgZGF0YSBkaXJlY3Rpb24KKwkJCQkgKiByZWdpc3RlciBzbyB3ZSBjYW4gY29udHJvbCB0aGUgSU8KKwkJCQkgKiBsaW5lcy4KKwkJCQkgKi8KIAogLyoKICAqIE1vZHVsZSBzdHVmZgpAQCAtNjksNzkgKzY5LDg0IEBACiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0gewogCXsKLQkJLm5hbWUJPSAiU1BJQSBmbGFzaCBwYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IDIqMTAyNCoxMDI0Ci0JfSwKKwkgLm5hbWUgPSAiU1BJQSBmbGFzaCBwYXJ0aXRpb24gMSIsCisJIC5vZmZzZXQgPSAwLAorCSAuc2l6ZSA9IDIgKiAxMDI0ICogMTAyNH0sCiAJewotCQkubmFtZQk9ICJTUElBIGZsYXNoIHBhcnRpdGlvbiAyIiwKLQkJLm9mZnNldAk9IDIqMTAyNCoxMDI0LAotCQkuc2l6ZQk9IDYqMTAyNCoxMDI0Ci0JfQorCSAubmFtZSA9ICJTUElBIGZsYXNoIHBhcnRpdGlvbiAyIiwKKwkgLm9mZnNldCA9IDIgKiAxMDI0ICogMTAyNCwKKwkgLnNpemUgPSA2ICogMTAyNCAqIDEwMjR9CiB9OwotI2RlZmluZSBOVU1fUEFSVElUSU9OUyAyCiAKKyNkZWZpbmUgTlVNX1BBUlRJVElPTlMgMgogCiAvKgogICoJaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKLSovCi1zdGF0aWMgdm9pZCBzcGlhX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCl7CisgKgorICoJY3RybDoKKyAqCU5BTkRfQ05FOiBiaXQgMCAtPiBiaXQgMgorICoJTkFORF9DTEU6IGJpdCAxIC0+IGJpdCAwCisgKglOQU5EX0FMRTogYml0IDIgLT4gYml0IDEKKyAqLworc3RhdGljIHZvaWQgc3BpYV9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotICAgIHN3aXRjaChjbWQpeworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZHI7CisJCXVuc2lnbmVkIGNoYXIgYml0czsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZHIpKSB8PSAgMHgwMTsgYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKHNwaWFfaW9fYmFzZSArIHNwaWFfcGVkcikpICY9IH4weDAxOyBicmVhazsKKwkJYml0cyA9IChjdHJsICYgTkFORF9DTkUpIDw8IDI7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0NMRSB8IE5BTkRfQUxFKSA+PiAxOworCQl3cml0ZWIoKHJlYWRiKGFkZHIpICYgfjB4NykgfCBiaXRzLCBhZGRyKTsKKwl9CiAKLQljYXNlIE5BTkRfQ1RMX1NFVEFMRTogKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoc3BpYV9pb19iYXNlICsgc3BpYV9wZWRyKSkgfD0gIDB4MDI7IGJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZHIpKSAmPSB+MHgwMjsgYnJlYWs7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVE5DRTogKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoc3BpYV9pb19iYXNlICsgc3BpYV9wZWRyKSkgJj0gfjB4MDQ7IGJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSTkNFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZHIpKSB8PSAgMHgwNDsgYnJlYWs7Ci0gICAgfQorCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKIH0KIAogLyoKICAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQogICovCi1pbnQgX19pbml0IHNwaWFfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNwaWFfaW5pdCh2b2lkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQlzcGlhX210ZCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mIChzdHJ1Y3QgbmFuZF9jaGlwKSwKLQkJCQlHRlBfS0VSTkVMKTsKKwlzcGlhX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOwogCWlmICghc3BpYV9tdGQpIHsKLQkJcHJpbnRrICgiVW5hYmxlIHRvIGFsbG9jYXRlIFNQSUEgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBTUElBIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmc3BpYV9tdGRbMV0pOworCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSgmc3BpYV9tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIHNwaWFfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KHNwaWFfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CiAKIAkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLwogCXNwaWFfbXRkLT5wcml2ID0gdGhpczsKKwlzcGlhX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogU2V0IEdQSU8gUG9ydCBFIGNvbnRyb2wgcmVnaXN0ZXIgc28gdGhhdCB0aGUgcGlucyBhcmUgY29uZmlndXJlZAogCSAqIHRvIGJlIG91dHB1dHMgZm9yIGNvbnRyb2xsaW5nIHRoZSBOQU5EIGZsYXNoLgogCSAqLwotCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKHNwaWFfaW9fYmFzZSArIHNwaWFfcGVkZHIpKSA9IDB4MDc7CisJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZGRyKSkgPSAweDA3OwogCiAJLyogU2V0IGFkZHJlc3Mgb2YgTkFORCBJTyBsaW5lcyAqLwotCXRoaXMtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0gKikgc3BpYV9maW9fYmFzZTsKLQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopIHNwaWFfZmlvX2Jhc2U7CisJdGhpcy0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqKXNwaWFfZmlvX2Jhc2U7CisJdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqKXNwaWFfZmlvX2Jhc2U7CiAJLyogU2V0IGFkZHJlc3Mgb2YgaGFyZHdhcmUgY29udHJvbCBmdW5jdGlvbiAqLwotCXRoaXMtPmh3Y29udHJvbCA9IHNwaWFfaHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gc3BpYV9od2NvbnRyb2w7CiAJLyogMTUgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCiAJdGhpcy0+Y2hpcF9kZWxheSA9IDE1OwogCiAJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCi0JaWYgKG5hbmRfc2NhbiAoc3BpYV9tdGQsIDEpKSB7Ci0JCWtmcmVlIChzcGlhX210ZCk7CisJaWYgKG5hbmRfc2NhbihzcGlhX210ZCwgMSkpIHsKKwkJa2ZyZWUoc3BpYV9tdGQpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtMTUxLDIyICsxNTYsMjIgQEAKIAkvKiBSZXR1cm4gaGFwcHkgKi8KIAlyZXR1cm4gMDsKIH0KKwogbW9kdWxlX2luaXQoc3BpYV9pbml0KTsKIAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotI2lmZGVmIE1PRFVMRQotc3RhdGljIHZvaWQgX19leGl0IHNwaWFfY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBzcGlhX2NsZWFudXAodm9pZCkKIHsKIAkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KLQluYW5kX3JlbGVhc2UgKHNwaWFfbXRkKTsKKwluYW5kX3JlbGVhc2Uoc3BpYV9tdGQpOwogCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSAoc3BpYV9tdGQpOworCWtmcmVlKHNwaWFfbXRkKTsKIH0KKwogbW9kdWxlX2V4aXQoc3BpYV9jbGVhbnVwKTsKLSNlbmRpZgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gSi4gSGlsbCA8c2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC90b3RvLmMgYi9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYwppbmRleCA3NjA5YzQzLi5mOWUyZDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYwpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoLW9tYXAxNTEwL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCisjZGVmaW5lIENPTkZJR19OQU5EX1dPUktBUk9VTkQgMQorCiAvKgogICogTVREIHN0cnVjdHVyZSBmb3IgVE9UTyBib2FyZAogICovCkBAIC0zOSwyNSArNDEsNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RvX2lvX2Jhc2UgPSBPTUFQX0ZMQVNIXzFfQkFTRTsKIAotI2RlZmluZSBDT05GSUdfTkFORF9XT1JLQVJPVU5EIDEKLQotI2RlZmluZSBOQU5EX05DRSAweDQwMDAKLSNkZWZpbmUgTkFORF9DTEUgMHgxMDAwCi0jZGVmaW5lIE5BTkRfQUxFIDB4MDAwMgotI2RlZmluZSBOQU5EX01BU0sgKE5BTkRfQ0xFIHwgTkFORF9BTEUgfCBOQU5EX05DRSkKLQotI2RlZmluZSBUX05BTkRfQ1RMX0NMUkFMRShpb2IpICBncGlvc2V0b3V0KE5BTkRfQUxFLCAwKQotI2RlZmluZSBUX05BTkRfQ1RMX1NFVEFMRShpb2IpICBncGlvc2V0b3V0KE5BTkRfQUxFLCBOQU5EX0FMRSkKLSNpZmRlZiBDT05GSUdfTkFORF9XT1JLQVJPVU5EICAgICAvKiAic29tZSIgZGV2IGJvYXJkcyBidXN0ZWQsIGJsdWUgd2lyZWQgdG8gcnRzMiA6KCAqLwotI2RlZmluZSBUX05BTkRfQ1RMX0NMUkNMRShpb2IpICBncGlvc2V0b3V0KE5BTkRfQ0xFLCAwKTsgcnRzMnNldG91dCgyLCAyKQotI2RlZmluZSBUX05BTkRfQ1RMX1NFVENMRShpb2IpICBncGlvc2V0b3V0KE5BTkRfQ0xFLCBOQU5EX0NMRSk7IHJ0czJzZXRvdXQoMiwgMCkKLSNlbHNlCi0jZGVmaW5lIFRfTkFORF9DVExfQ0xSQ0xFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9DTEUsIDApCi0jZGVmaW5lIFRfTkFORF9DVExfU0VUQ0xFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9DTEUsIE5BTkRfQ0xFKQotI2VuZGlmCi0jZGVmaW5lIFRfTkFORF9DVExfU0VUTkNFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9OQ0UsIDApCi0jZGVmaW5lIFRfTkFORF9DVExfQ0xSTkNFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9OQ0UsIE5BTkRfTkNFKQotCiAvKgogICogRGVmaW5lIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZXMKICAqLwpAQCAtOTEsOTEgKzc0LDExMCBAQAogCiAjZGVmaW5lIE5VTV9QQVJUSVRJT05TMzJNIDMKICNkZWZpbmUgTlVNX1BBUlRJVElPTlM2NE0gNAorCiAvKgogICoJaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKLSovCi0KLXN0YXRpYyB2b2lkIHRvdG9faHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQorICoKKyAqCWN0cmw6CisgKglOQU5EX05DRTogYml0IDAgLT4gYml0IDE0ICgweDQwMDApCisgKglOQU5EX0NMRTogYml0IDEgLT4gYml0IDEyICgweDEwMDApCisgKglOQU5EX0FMRTogYml0IDIgLT4gYml0IDEgICgweDAwMDIpCisgKi8KK3N0YXRpYyB2b2lkIHRvdG9faHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJICAgdW5zaWduZWQgaW50IGN0cmwpCiB7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCXVkZWxheSgxKTsgLyogaG9wZWZ1bGx5IGVub3VnaCB0aW1lIGZvciB0YyBtYWtlIHByb2NlZGluZyB3cml0ZSB0byBjbGVhciAqLwotCXN3aXRjaChjbWQpeworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl1bnNpZ25lZCBsb25nIGJpdHM7CiAKLQkJY2FzZSBOQU5EX0NUTF9TRVRDTEU6IFRfTkFORF9DVExfU0VUQ0xFKGNtZCk7IGJyZWFrOwotCQljYXNlIE5BTkRfQ1RMX0NMUkNMRTogVF9OQU5EX0NUTF9DTFJDTEUoY21kKTsgYnJlYWs7CisJCS8qIGhvcGVmdWxseSBlbm91Z2ggdGltZSBmb3IgdGMgbWFrZSBwcm9jZWRpbmcgd3JpdGUgdG8gY2xlYXIgKi8KKwkJdWRlbGF5KDEpOwogCi0JCWNhc2UgTkFORF9DVExfU0VUQUxFOiBUX05BTkRfQ1RMX1NFVEFMRShjbWQpOyBicmVhazsKLQkJY2FzZSBOQU5EX0NUTF9DTFJBTEU6IFRfTkFORF9DVExfQ0xSQUxFKGNtZCk7IGJyZWFrOworCQliaXRzID0gKH5jdHJsICYgTkFORF9OQ0UpIDw8IDE0OworCQliaXRzIHw9IChjdHJsICYgTkFORF9DTEUpIDw8IDEyOworCQliaXRzIHw9IChjdHJsICYgTkFORF9BTEUpID4+IDE7CiAKLQkJY2FzZSBOQU5EX0NUTF9TRVROQ0U6IFRfTkFORF9DVExfU0VUTkNFKGNtZCk7IGJyZWFrOwotCQljYXNlIE5BTkRfQ1RMX0NMUk5DRTogVF9OQU5EX0NUTF9DTFJOQ0UoY21kKTsgYnJlYWs7Cisjd2FybmluZyBXaWxkIGd1ZXNzIGFzIGdwaW9zZXRvdXQoKSBpcyBub3doZXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgLSB0Z2x4CisJCWdwaW9zZXRvdXQoMHg1MDAyLCBiaXRzKTsKKworI2lmZGVmIENPTkZJR19OQU5EX1dPUktBUk9VTkQKKwkJLyogInNvbWUiIGRldiBib2FyZHMgYnVzdGVkLCBibHVlIHdpcmVkIHRvIHJ0czIgOiggKi8KKwkJcnRzMnNldG91dCgyLCAoY3RybCAmIE5BTkRfQ0xFKSA8PCAxKTsKKyNlbmRpZgorCQkvKiBhbGxvdyB0aW1lIHRvIGVuc3VyZSBncGlvIHN0YXRlIHRvIG92ZXIgdGFrZSBtZW1vcnkgd3JpdGUgKi8KKwkJdWRlbGF5KDEpOwogCX0KLQl1ZGVsYXkoMSk7IC8qIGFsbG93IHRpbWUgdG8gZW5zdXJlIGdwaW8gc3RhdGUgdG8gb3ZlciB0YWtlIG1lbW9yeSB3cml0ZSAqLworCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOwogfQogCiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLWludCBfX2luaXQgdG90b19pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdG90b19pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAlpbnQgZXJyID0gMDsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLwotCXRvdG9fbXRkID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2YgKHN0cnVjdCBuYW5kX2NoaXApLAotCQkJCUdGUF9LRVJORUwpOworCXRvdG9fbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0b3RvX210ZCkgewotCQlwcmludGsgKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGFsbG9jYXRlIHRvdG8gTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gYWxsb2NhdGUgdG90byBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIEdldCBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSAqLwotCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAoJnRvdG9fbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnRvdG9fbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSB0b3RvX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOwotCW1lbXNldCgoY2hhciAqKSB0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOworCW1lbXNldCh0b3RvX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAl0b3RvX210ZC0+cHJpdiA9IHRoaXM7CisJdG90b19tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiBTZXQgYWRkcmVzcyBvZiBOQU5EIElPIGxpbmVzICovCiAJdGhpcy0+SU9fQUREUl9SID0gdG90b19pb19iYXNlOwogCXRoaXMtPklPX0FERFJfVyA9IHRvdG9faW9fYmFzZTsKLQl0aGlzLT5od2NvbnRyb2wgPSB0b3RvX2h3Y29udHJvbDsKKwl0aGlzLT5jbWRfY3RybCA9IHRvdG9faHdjb250cm9sOwogCXRoaXMtPmRldl9yZWFkeSA9IE5VTEw7CiAJLyogMjUgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCiAJdGhpcy0+Y2hpcF9kZWxheSA9IDMwOwotCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKIAotICAgICAgICAvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAobmFuZF9zY2FuICh0b3RvX210ZCwgMSkpIHsKKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwlpZiAobmFuZF9zY2FuKHRvdG9fbXRkLCAxKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0X210ZDsKIAl9CiAKIAkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwotCXN3aXRjaCh0b3RvX210ZC0+c2l6ZSl7Ci0JCWNhc2UgU1pfNjRNOiBhZGRfbXRkX3BhcnRpdGlvbnModG90b19tdGQsIHBhcnRpdGlvbl9pbmZvNjRNLCBOVU1fUEFSVElUSU9OUzY0TSk7IGJyZWFrOwotCQljYXNlIFNaXzMyTTogYWRkX210ZF9wYXJ0aXRpb25zKHRvdG9fbXRkLCBwYXJ0aXRpb25faW5mbzMyTSwgTlVNX1BBUlRJVElPTlMzMk0pOyBicmVhazsKLQkJZGVmYXVsdDogewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIlVuc3VwcG9ydGVkIE5hbmQgZGV2aWNlXG4iKTsKKwlzd2l0Y2ggKHRvdG9fbXRkLT5zaXplKSB7CisJY2FzZSBTWl82NE06CisJCWFkZF9tdGRfcGFydGl0aW9ucyh0b3RvX210ZCwgcGFydGl0aW9uX2luZm82NE0sIE5VTV9QQVJUSVRJT05TNjRNKTsKKwkJYnJlYWs7CisJY2FzZSBTWl8zMk06CisJCWFkZF9tdGRfcGFydGl0aW9ucyh0b3RvX210ZCwgcGFydGl0aW9uX2luZm8zMk0sIE5VTV9QQVJUSVRJT05TMzJNKTsKKwkJYnJlYWs7CisJZGVmYXVsdDp7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbnN1cHBvcnRlZCBOYW5kIGRldmljZVxuIik7CiAJCQllcnIgPSAtRU5YSU87CiAJCQlnb3RvIG91dF9idWY7CiAJCX0KIAl9CiAKLSAgICAJZ3Bpb3Jlc2VydmUoTkFORF9NQVNLKTsgIC8qIGNsYWltIG91ciBncGlvcyAqLwotICAgIAlhcmNoZmxhc2h3cCgwLDApOwkgLyogb3BlbiB1cCBmbGFzaCBmb3Igd3JpdGluZyAqLworCWdwaW9yZXNlcnZlKE5BTkRfTUFTSyk7CS8qIGNsYWltIG91ciBncGlvcyAqLworCWFyY2hmbGFzaHdwKDAsIDApOwkvKiBvcGVuIHVwIGZsYXNoIGZvciB3cml0aW5nICovCiAKIAlnb3RvIG91dDsKIAotb3V0X2J1ZjoKLQlrZnJlZSAodGhpcy0+ZGF0YV9idWYpOwotb3V0X210ZDoKLQlrZnJlZSAodG90b19tdGQpOwotb3V0OgorIG91dF9tdGQ6CisJa2ZyZWUodG90b19tdGQpOworIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xODQsMjAgKzE4NiwyMSBAQAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotc3RhdGljIHZvaWQgX19leGl0IHRvdG9fY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0b3RvX2NsZWFudXAodm9pZCkKIHsKIAkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KLQluYW5kX3JlbGVhc2UgKHRvdG9fbXRkKTsKKwluYW5kX3JlbGVhc2UodG90b19tdGQpOwogCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSAodG90b19tdGQpOworCWtmcmVlKHRvdG9fbXRkKTsKIAogCS8qIHN0b3AgZmxhc2ggd3JpdGVzICovCi0JIGFyY2hmbGFzaHdwKDAsMSk7CisJYXJjaGZsYXNod3AoMCwgMSk7CiAKIAkvKiByZWxlYXNlIGdwaW9zIHRvIHN5c3RlbSAqLwotCSBncGlvcmVsZWFzZShOQU5EX01BU0spOworCWdwaW9yZWxlYXNlKE5BTkRfTUFTSyk7CiB9CisKIG1vZHVsZV9leGl0KHRvdG9fY2xlYW51cCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvdHM3MjUwLmMgYi9kcml2ZXJzL210ZC9uYW5kL3RzNzI1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYjRiMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL3RzNzI1MC5jCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogZHJpdmVycy9tdGQvbmFuZC90czcyNTAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZWNobm9sb2dpYyBTeXN0ZW1zIChzdXBwb3J0QGVtYmVkZGVkQVJNLmNvbSkKKyAqCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcml1cyBHcsO2Z2VyIChtYWdAc3lzZ28uZGUpCisgKgorICogRGVyaXZlZCBmcm9tIGRyaXZlcnMvbXRkL25hbmQvYXV0Y3B1MTIuYworICogICBDb3B5cmlnaHQgKGMpIDIwMDEgVGhvbWFzIEdsZWl4bmVyIChnbGVpeG5lckBhdXRyb25peC5kZSkKKyAqCisgKiAkSWQ6IHRzNzI1MC5jLHYgMS40IDIwMDQvMTIvMzAgMjI6MDI6MDcgam9mZiBFeHAgJAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogT3ZlcnZpZXc6CisgKiAgIFRoaXMgaXMgYSBkZXZpY2UgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBkZXZpY2UgZm91bmQgb24gdGhlCisgKiAgIFRTLTcyNTAgYm9hcmQgd2hpY2ggdXRpbGl6ZXMgYSBTYW1zdW5nIDMyIE1ieXRlIHBhcnQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKy8qCisgKiBNVEQgc3RydWN0dXJlIGZvciBUUzcyNTAgYm9hcmQKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqdHM3MjUwX210ZCA9IE5VTEw7CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CisKKyNkZWZpbmUgTlVNX1BBUlRJVElPTlMgMworCisvKgorICogRGVmaW5lIHN0YXRpYyBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2UKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvMzJbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJUUy1CT09UUk9NIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSAweDAwMDA0MDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIkxpbnV4IiwKKwkJLm9mZnNldAkJPSAweDAwMDA0MDAwLAorCQkuc2l6ZQkJPSAweDAxZDAwMDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIlJlZEJvb3QiLAorCQkub2Zmc2V0CQk9IDB4MDFkMDQwMDAsCisJCS5zaXplCQk9IDB4MDAyZmMwMDAsCisJfSwKK307CisKKy8qCisgKiBEZWZpbmUgc3RhdGljIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZQorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm8xMjhbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJUUy1CT09UUk9NIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSAweDAwMDA0MDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIkxpbnV4IiwKKwkJLm9mZnNldAkJPSAweDAwMDA0MDAwLAorCQkuc2l6ZQkJPSAweDA3ZDAwMDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIlJlZEJvb3QiLAorCQkub2Zmc2V0CQk9IDB4MDdkMDQwMDAsCisJCS5zaXplCQk9IDB4MDAyZmMwMDAsCisJfSwKK307CisjZW5kaWYKKworCisvKgorICoJaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKKyAqCisgKgljdHJsOgorICoJTkFORF9OQ0U6IGJpdCAwIC0+IGJpdCAyCisgKglOQU5EX0NMRTogYml0IDEgLT4gYml0IDEKKyAqCU5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgMAorICovCitzdGF0aWMgdm9pZCB0czcyNTBfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IFRTNzJYWF9OQU5EX0NPTlRST0xfVklSVF9CQVNFOworCQl1bnNpZ25lZCBjaGFyIGJpdHM7CisKKwkJYml0cyA9IChjdHJsICYgTkFORF9DTkUpIDw8IDI7CisJCWJpdHMgfD0gY3RybCAmIE5BTkRfQ0xFOworCQliaXRzIHw9IChjdHJsICYgTkFORF9BTEUpID4+IDI7CisKKwkJX19yYXdfd3JpdGViKChfX3Jhd19yZWFkYihhZGRyKSAmIH4weDcpIHwgYml0cywgYWRkcik7CisJfQorCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOworfQorCisvKgorICoJcmVhZCBkZXZpY2UgcmVhZHkgcGluCisgKi8KK3N0YXRpYyBpbnQgdHM3MjUwX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGIoVFM3MlhYX05BTkRfQlVTWV9WSVJUX0JBU0UpICYgMHgyMDsKK30KKworLyoKKyAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQorICovCitzdGF0aWMgaW50IF9faW5pdCB0czcyNTBfaW5pdCh2b2lkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CisJY29uc3QgY2hhciAqcGFydF90eXBlID0gMDsKKwlpbnQgbXRkX3BhcnRzX25iID0gMDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqbXRkX3BhcnRzID0gMDsKKworCWlmICghbWFjaGluZV9pc190czcyeHgoKSB8fCBib2FyZF9pc190czcyMDAoKSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLworCXRzNzI1MF9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRzNzI1MF9tdGQpIHsKKwkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgVFM3MjUwIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZ0czcyNTBfbXRkWzFdKTsKKworCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLworCW1lbXNldCh0czcyNTBfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisKKwkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLworCXRzNzI1MF9tdGQtPnByaXYgPSB0aGlzOworCXRzNzI1MF9tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkvKiBpbnNlcnQgY2FsbGJhY2tzICovCisJdGhpcy0+SU9fQUREUl9SID0gKHZvaWQgKilUUzcyWFhfTkFORF9EQVRBX1ZJUlRfQkFTRTsKKwl0aGlzLT5JT19BRERSX1cgPSAodm9pZCAqKVRTNzJYWF9OQU5EX0RBVEFfVklSVF9CQVNFOworCXRoaXMtPmNtZF9jdHJsID0gdHM3MjUwX2h3Y29udHJvbDsKKwl0aGlzLT5kZXZfcmVhZHkgPSB0czcyNTBfZGV2aWNlX3JlYWR5OworCXRoaXMtPmNoaXBfZGVsYXkgPSAxNTsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisKKwlwcmludGsoIlNlYXJjaGluZyBmb3IgTkFORCBmbGFzaC4uLlxuIik7CisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCisJaWYgKG5hbmRfc2Nhbih0czcyNTBfbXRkLCAxKSkgeworCQlrZnJlZSh0czcyNTBfbXRkKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJdHM3MjUwX210ZC0+bmFtZSA9ICJ0czcyNTAtbmFuZCI7CisJbXRkX3BhcnRzX25iID0gcGFyc2VfbXRkX3BhcnRpdGlvbnModHM3MjUwX210ZCwgcGFydF9wcm9iZXMsICZtdGRfcGFydHMsIDApOworCWlmIChtdGRfcGFydHNfbmIgPiAwKQorCQlwYXJ0X3R5cGUgPSAiY29tbWFuZCBsaW5lIjsKKwllbHNlCisJCW10ZF9wYXJ0c19uYiA9IDA7CisjZW5kaWYKKwlpZiAobXRkX3BhcnRzX25iID09IDApIHsKKwkJbXRkX3BhcnRzID0gcGFydGl0aW9uX2luZm8zMjsKKwkJaWYgKHRzNzI1MF9tdGQtPnNpemUgPj0gKDEyOCAqIDB4MTAwMDAwKSkKKwkJCW10ZF9wYXJ0cyA9IHBhcnRpdGlvbl9pbmZvMTI4OworCQltdGRfcGFydHNfbmIgPSBOVU1fUEFSVElUSU9OUzsKKwkJcGFydF90eXBlID0gInN0YXRpYyI7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIHBhcnRpdGlvbnMgKi8KKwlwcmludGsoS0VSTl9OT1RJQ0UgIlVzaW5nICVzIHBhcnRpdGlvbiBkZWZpbml0aW9uXG4iLCBwYXJ0X3R5cGUpOworCWFkZF9tdGRfcGFydGl0aW9ucyh0czcyNTBfbXRkLCBtdGRfcGFydHMsIG10ZF9wYXJ0c19uYik7CisKKwkvKiBSZXR1cm4gaGFwcHkgKi8KKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQodHM3MjUwX2luaXQpOworCisvKgorICogQ2xlYW4gdXAgcm91dGluZQorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgdHM3MjUwX2NsZWFudXAodm9pZCkKK3sKKwkvKiBVbnJlZ2lzdGVyIHRoZSBkZXZpY2UgKi8KKwlkZWxfbXRkX2RldmljZSh0czcyNTBfbXRkKTsKKworCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCisJa2ZyZWUodHM3MjUwX210ZCk7Cit9CisKK21vZHVsZV9leGl0KHRzNzI1MF9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmVzc2UgT2ZmIDxqb2ZmQGVtYmVkZGVkQVJNLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBkcml2ZXIgZm9yIFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzI1MCBib2FyZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYyBiL2RyaXZlcnMvbXRkL25mdGxjb3JlLmMKaW5kZXggZDdjZDVmYS4uZGM3NTczNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9uZnRsY29yZS5jCkBAIC03MCw4ICs3MCw2IEBACiAJbmZ0bC0+bWJkLmRldm51bSA9IC0xOwogCW5mdGwtPm1iZC5ibGtzaXplID0gNTEyOwogCW5mdGwtPm1iZC50ciA9IHRyOwotCW1lbWNweSgmbmZ0bC0+b29iaW5mbywgJm10ZC0+b29iaW5mbywgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKTsKLQluZnRsLT5vb2JpbmZvLnVzZWVjYyA9IE1URF9OQU5ERUNDX1BMQUNFT05MWTsKIAogICAgICAgICBpZiAoTkZUTF9tb3VudChuZnRsKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTkZUTDogY291bGQgbm90IG1vdW50IGRldmljZVxuIik7CkBAIC0xMzYsNiArMTM0LDY5IEBACiAJa2ZyZWUobmZ0bCk7CiB9CiAKKy8qCisgKiBSZWFkIG9vYiBkYXRhIGZyb20gZmxhc2gKKyAqLworaW50IG5mdGxfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgcmVzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCW9wcy5vb2JvZmZzID0gb2ZmcyAmIChtdGQtPndyaXRlc2l6ZSAtIDEpOworCW9wcy5vb2JsZW4gPSBsZW47CisJb3BzLm9vYmJ1ZiA9IGJ1ZjsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubGVuID0gbGVuOworCisJcmVzID0gbXRkLT5yZWFkX29vYihtdGQsIG9mZnMgJiB+KG10ZC0+d3JpdGVzaXplIC0gMSksICZvcHMpOworCSpyZXRsZW4gPSBvcHMucmV0bGVuOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBXcml0ZSBvb2IgZGF0YSB0byBmbGFzaAorICovCitpbnQgbmZ0bF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkgICBzaXplX3QgKnJldGxlbiwgdWludDhfdCAqYnVmKQoreworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisJaW50IHJlczsKKworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKwlvcHMub29ib2ZmcyA9IG9mZnMgJiAobXRkLT53cml0ZXNpemUgLSAxKTsKKwlvcHMub29ibGVuID0gbGVuOworCW9wcy5vb2JidWYgPSBidWY7CisJb3BzLmRhdGJ1ZiA9IE5VTEw7CisJb3BzLmxlbiA9IGxlbjsKKworCXJlcyA9IG10ZC0+d3JpdGVfb29iKG10ZCwgb2ZmcyAmIH4obXRkLT53cml0ZXNpemUgLSAxKSwgJm9wcyk7CisJKnJldGxlbiA9IG9wcy5yZXRsZW47CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIFdyaXRlIGRhdGEgYW5kIG9vYiB0byBmbGFzaAorICovCitzdGF0aWMgaW50IG5mdGxfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkgICAgICBzaXplX3QgKnJldGxlbiwgdWludDhfdCAqYnVmLCB1aW50OF90ICpvb2IpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgcmVzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCW9wcy5vb2JvZmZzID0gb2ZmczsKKwlvcHMub29ibGVuID0gbXRkLT5vb2JzaXplOworCW9wcy5vb2JidWYgPSBvb2I7CisJb3BzLmRhdGJ1ZiA9IGJ1ZjsKKwlvcHMubGVuID0gbGVuOworCisJcmVzID0gbXRkLT53cml0ZV9vb2IobXRkLCBvZmZzICYgfihtdGQtPndyaXRlc2l6ZSAtIDEpLCAmb3BzKTsKKwkqcmV0bGVuID0gb3BzLnJldGxlbjsKKwlyZXR1cm4gcmVzOworfQorCiAjaWZkZWYgQ09ORklHX05GVExfUlcKIAogLyogQWN0dWFsIE5GVEwgYWNjZXNzIHJvdXRpbmVzICovCkBAIC0xODUsNiArMjQ2LDcgQEAKIAogc3RhdGljIHUxNiBORlRMX2ZvbGRjaGFpbiAoc3RydWN0IE5GVExyZWNvcmQgKm5mdGwsIHVuc2lnbmVkIHRoaXNWVUMsIHVuc2lnbmVkIHBlbmRpbmdibG9jayApCiB7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuZnRsLT5tYmQubXRkOwogCXUxNiBCbG9ja01hcFtNQVhfU0VDVE9SU19QRVJfVU5JVF07CiAJdW5zaWduZWQgY2hhciBCbG9ja0xhc3RTdGF0ZVtNQVhfU0VDVE9SU19QRVJfVU5JVF07CiAJdW5zaWduZWQgY2hhciBCbG9ja0ZyZWVGb3VuZFtNQVhfU0VDVE9SU19QRVJfVU5JVF07CkBAIC0xOTQsNyArMjU2LDcgQEAKIAl1bnNpZ25lZCBpbnQgdGFyZ2V0RVVOOwogCXN0cnVjdCBuZnRsX29vYiBvb2I7CiAJaW50IGlucGxhY2UgPSAxOwotICAgICAgICBzaXplX3QgcmV0bGVuOworCXNpemVfdCByZXRsZW47CiAKIAltZW1zZXQoQmxvY2tNYXAsIDB4ZmYsIHNpemVvZihCbG9ja01hcCkpOwogCW1lbXNldChCbG9ja0ZyZWVGb3VuZCwgMCwgc2l6ZW9mKEJsb2NrRnJlZUZvdW5kKSk7CkBAIC0yMTAsMjEgKzI3MiwyMSBAQAogCS8qIFNjYW4gdG8gZmluZCB0aGUgRXJhc2UgVW5pdCB3aGljaCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgZm9yIGVhY2gKIAkgICA1MTItYnl0ZSBibG9jayB3aXRoaW4gdGhlIENoYWluLgogCSovCi0gICAgICAgIHNpbGx5ID0gTUFYX0xPT1BTOworCXNpbGx5ID0gTUFYX0xPT1BTOwogCXRhcmdldEVVTiA9IEJMT0NLX05JTDsKIAl3aGlsZSAodGhpc0VVTiA8PSBuZnRsLT5sYXN0RVVOICkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGF0dXMsIGZvbGRtYXJrOworCQl1bnNpZ25lZCBpbnQgc3RhdHVzLCBmb2xkbWFyazsKIAogCQl0YXJnZXRFVU4gPSB0aGlzRVVOOwogCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCBuZnRsLT5FcmFzZVNpemUgLyA1MTI7IGJsb2NrICsrKSB7Ci0JCQlNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLAotCQkJCSAgICAodGhpc0VVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyAoYmxvY2sgKiA1MTIpLAotCQkJCSAgICAxNiAsICZyZXRsZW4sIChjaGFyICopJm9vYik7CisJCQluZnRsX3JlYWRfb29iKG10ZCwgKHRoaXNFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsKKwkJCQkgICAgICAoYmxvY2sgKiA1MTIpLCAxNiAsICZyZXRsZW4sCisJCQkJICAgICAgKGNoYXIgKikmb29iKTsKIAkJCWlmIChibG9jayA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRtYXJrID0gb29iLnUuYy5Gb2xkTWFyayB8IG9vYi51LmMuRm9sZE1hcmsxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZG1hcmsgPT0gRk9MRF9NQVJLX0lOX1BST0dSRVNTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUcoTVREX0RFQlVHX0xFVkVMMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV3JpdGUgSW5oaWJpdGVkIG9uIEVVTiAlZFxuIiwgdGhpc0VVTik7CisJCQkJZm9sZG1hcmsgPSBvb2IudS5jLkZvbGRNYXJrIHwgb29iLnUuYy5Gb2xkTWFyazE7CisJCQkJaWYgKGZvbGRtYXJrID09IEZPTERfTUFSS19JTl9QUk9HUkVTUykgeworCQkJCQlERUJVRyhNVERfREVCVUdfTEVWRUwxLAorCQkJCQkgICAgICAiV3JpdGUgSW5oaWJpdGVkIG9uIEVVTiAlZFxuIiwgdGhpc0VVTik7CiAJCQkJCWlucGxhY2UgPSAwOwogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIFRoZXJlJ3Mgbm8gb3RoZXIgcmVhc29uIG5vdCB0byBkbyBpbnBsYWNlLApAQCAtMjMzLDcgKzI5NSw3IEBACiAJCQkJCWlucGxhY2UgPSAxOwogCQkJCX0KIAkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IG9vYi5iLlN0YXR1cyB8IG9vYi5iLlN0YXR1czE7CisJCQlzdGF0dXMgPSBvb2IuYi5TdGF0dXMgfCBvb2IuYi5TdGF0dXMxOwogCQkJQmxvY2tMYXN0U3RhdGVbYmxvY2tdID0gc3RhdHVzOwogCiAJCQlzd2l0Y2goc3RhdHVzKSB7CkBAIC0zMjgsMTUgKzM5MCwxNSBAQAogCQkJcmV0dXJuIEJMT0NLX05JTDsKIAkJfQogCX0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBXZSBwdXQgYSBmb2xkIG1hcmsgaW4gdGhlIGNoYWluIHdlIGFyZSBmb2xkaW5nIG9ubHkgaWYKLSAgICAgICAgICAgICAgIHdlIGZvbGQgaW4gcGxhY2UgdG8gaGVscCB0aGUgbW91bnQgY2hlY2sgY29kZS4gSWYgd2UgZG8KLSAgICAgICAgICAgICAgIG5vdCBmb2xkIGluIHBsYWNlLCBpdCBpcyBwb3NzaWJsZSB0byBmaW5kIHRoZSB2YWxpZAotICAgICAgICAgICAgICAgY2hhaW4gYnkgc2VsZWN0aW5nIHRoZSBsb25nZXIgb25lICovCi0gICAgICAgICAgICBvb2IudS5jLkZvbGRNYXJrID0gb29iLnUuYy5Gb2xkTWFyazEgPSBjcHVfdG9fbGUxNihGT0xEX01BUktfSU5fUFJPR1JFU1MpOwotICAgICAgICAgICAgb29iLnUuYy51bnVzZWQgPSAweGZmZmZmZmZmOwotICAgICAgICAgICAgTVREX1dSSVRFT09CKG5mdGwtPm1iZC5tdGQsIChuZnRsLT5FcmFzZVNpemUgKiB0YXJnZXRFVU4pICsgMiAqIDUxMiArIDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwotICAgICAgICB9CisJCS8qIFdlIHB1dCBhIGZvbGQgbWFyayBpbiB0aGUgY2hhaW4gd2UgYXJlIGZvbGRpbmcgb25seSBpZiB3ZQorICAgICAgICAgICAgICAgZm9sZCBpbiBwbGFjZSB0byBoZWxwIHRoZSBtb3VudCBjaGVjayBjb2RlLiBJZiB3ZSBkbyBub3QgZm9sZCBpbgorICAgICAgICAgICAgICAgcGxhY2UsIGl0IGlzIHBvc3NpYmxlIHRvIGZpbmQgdGhlIHZhbGlkIGNoYWluIGJ5IHNlbGVjdGluZyB0aGUKKyAgICAgICAgICAgICAgIGxvbmdlciBvbmUgKi8KKwkJb29iLnUuYy5Gb2xkTWFyayA9IG9vYi51LmMuRm9sZE1hcmsxID0gY3B1X3RvX2xlMTYoRk9MRF9NQVJLX0lOX1BST0dSRVNTKTsKKwkJb29iLnUuYy51bnVzZWQgPSAweGZmZmZmZmZmOworCQluZnRsX3dyaXRlX29vYihtdGQsIChuZnRsLT5FcmFzZVNpemUgKiB0YXJnZXRFVU4pICsgMiAqIDUxMiArIDgsCisJCQkgICAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCX0KIAogCS8qIE9LLiBXZSBub3cga25vdyB0aGUgbG9jYXRpb24gb2YgZXZlcnkgYmxvY2sgaW4gdGhlIFZpcnR1YWwgVW5pdCBDaGFpbiwKIAkgICBhbmQgdGhlIEVyYXNlIFVuaXQgaW50byB3aGljaCB3ZSBhcmUgc3VwcG9zZWQgdG8gYmUgY29weWluZy4KQEAgLTM1MywzMyArNDE1LDMzIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0gICAgICAgICAgICAgICAgLyogY29weSBvbmx5IGluIG5vbiBmcmVlIGJsb2NrIChmcmVlIGJsb2NrcyBjYW4gb25seQorCQkvKiBjb3B5IG9ubHkgaW4gbm9uIGZyZWUgYmxvY2sgKGZyZWUgYmxvY2tzIGNhbiBvbmx5CiAgICAgICAgICAgICAgICAgICAgaGFwcGVuIGluIGNhc2Ugb2YgbWVkaWEgZXJyb3JzIG9yIGRlbGV0ZWQgYmxvY2tzKSAqLwotICAgICAgICAgICAgICAgIGlmIChCbG9ja01hcFtibG9ja10gPT0gQkxPQ0tfTklMKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisJCWlmIChCbG9ja01hcFtibG9ja10gPT0gQkxPQ0tfTklMKQorCQkJY29udGludWU7CiAKLSAgICAgICAgICAgICAgICByZXQgPSBNVERfUkVBRChuZnRsLT5tYmQubXRkLCAobmZ0bC0+RXJhc2VTaXplICogQmxvY2tNYXBbYmxvY2tdKSArIChibG9jayAqIDUxMiksCi0JCQkJICA1MTIsICZyZXRsZW4sIG1vdmVidWYpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IE1URF9SRUFEKG5mdGwtPm1iZC5tdGQsIChuZnRsLT5FcmFzZVNpemUgKiBCbG9ja01hcFtibG9ja10pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGJsb2NrICogNTEyKSwgNTEyLCAmcmV0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSAtRUlPKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJFcnJvciB3ZW50IGF3YXkgb24gcmV0cnkuXG4iKTsKLSAgICAgICAgICAgICAgICB9CisJCXJldCA9IG10ZC0+cmVhZChtdGQsIChuZnRsLT5FcmFzZVNpemUgKiBCbG9ja01hcFtibG9ja10pICsgKGJsb2NrICogNTEyKSwKKwkJCQk1MTIsICZyZXRsZW4sIG1vdmVidWYpOworCQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVVQ0xFQU4pIHsKKwkJCXJldCA9IG10ZC0+cmVhZChtdGQsIChuZnRsLT5FcmFzZVNpemUgKiBCbG9ja01hcFtibG9ja10pCisJCQkJCSsgKGJsb2NrICogNTEyKSwgNTEyLCAmcmV0bGVuLAorCQkJCQltb3ZlYnVmKTsKKwkJCWlmIChyZXQgIT0gLUVJTykKKwkJCQlwcmludGsoIkVycm9yIHdlbnQgYXdheSBvbiByZXRyeS5cbiIpOworCQl9CiAJCW1lbXNldCgmb29iLCAweGZmLCBzaXplb2Yoc3RydWN0IG5mdGxfb29iKSk7CiAJCW9vYi5iLlN0YXR1cyA9IG9vYi5iLlN0YXR1czEgPSBTRUNUT1JfVVNFRDsKLSAgICAgICAgICAgICAgICBNVERfV1JJVEVFQ0MobmZ0bC0+bWJkLm10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKyAoYmxvY2sgKiA1MTIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTIsICZyZXRsZW4sIG1vdmVidWYsIChjaGFyICopJm9vYiwgJm5mdGwtPm9vYmluZm8pOworCisJCW5mdGxfd3JpdGUobmZ0bC0+bWJkLm10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKworCQkJICAgKGJsb2NrICogNTEyKSwgNTEyLCAmcmV0bGVuLCBtb3ZlYnVmLCAoY2hhciAqKSZvb2IpOwogCX0KIAotICAgICAgICAvKiBhZGQgdGhlIGhlYWRlciBzbyB0aGF0IGl0IGlzIG5vdyBhIHZhbGlkIGNoYWluICovCi0gICAgICAgIG9vYi51LmEuVmlydFVuaXROdW0gPSBvb2IudS5hLlNwYXJlVmlydFVuaXROdW0KLSAgICAgICAgICAgICAgICA9IGNwdV90b19sZTE2KHRoaXNWVUMpOwotICAgICAgICBvb2IudS5hLlJlcGxVbml0TnVtID0gb29iLnUuYS5TcGFyZVJlcGxVbml0TnVtID0gMHhmZmZmOworCS8qIGFkZCB0aGUgaGVhZGVyIHNvIHRoYXQgaXQgaXMgbm93IGEgdmFsaWQgY2hhaW4gKi8KKwlvb2IudS5hLlZpcnRVbml0TnVtID0gb29iLnUuYS5TcGFyZVZpcnRVbml0TnVtID0gY3B1X3RvX2xlMTYodGhpc1ZVQyk7CisJb29iLnUuYS5SZXBsVW5pdE51bSA9IG9vYi51LmEuU3BhcmVSZXBsVW5pdE51bSA9IDB4ZmZmZjsKIAotICAgICAgICBNVERfV1JJVEVPT0IobmZ0bC0+bWJkLm10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKyA4LAotICAgICAgICAgICAgICAgICAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCW5mdGxfd3JpdGVfb29iKG10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKyA4LAorCQkgICAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwogCiAJLyogT0suIFdlJ3ZlIG1vdmVkIHRoZSB3aG9sZSBsb3QgaW50byB0aGUgbmV3IGJsb2NrLiBOb3cgd2UgaGF2ZSB0byBmcmVlIHRoZSBvcmlnaW5hbCBibG9ja3MuICovCiAKQEAgLTM5NiwxOCArNDU4LDE4IEBACiAJd2hpbGUgKHRoaXNFVU4gPD0gbmZ0bC0+bGFzdEVVTiAmJiB0aGlzRVVOICE9IHRhcmdldEVVTikgewogCQl1bnNpZ25lZCBpbnQgRVVOdG1wOwogCi0gICAgICAgICAgICAgICAgRVVOdG1wID0gbmZ0bC0+UmVwbFVuaXRUYWJsZVt0aGlzRVVOXTsKKwkJRVVOdG1wID0gbmZ0bC0+UmVwbFVuaXRUYWJsZVt0aGlzRVVOXTsKIAotICAgICAgICAgICAgICAgIGlmIChORlRMX2Zvcm1hdGJsb2NrKG5mdGwsIHRoaXNFVU4pIDwgMCkgeworCQlpZiAoTkZUTF9mb3JtYXRibG9jayhuZnRsLCB0aGlzRVVOKSA8IDApIHsKIAkJCS8qIGNvdWxkIG5vdCBlcmFzZSA6IG1hcmsgYmxvY2sgYXMgcmVzZXJ2ZWQKIAkJCSAqLwogCQkJbmZ0bC0+UmVwbFVuaXRUYWJsZVt0aGlzRVVOXSA9IEJMT0NLX1JFU0VSVkVEOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBjb3JyZWN0bHkgZXJhc2VkIDogbWFyayBpdCBhcyBmcmVlICovCiAJCQluZnRsLT5SZXBsVW5pdFRhYmxlW3RoaXNFVU5dID0gQkxPQ0tfRlJFRTsKIAkJCW5mdGwtPm51bWZyZWVFVU5zKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXNFVU4gPSBFVU50bXA7CisJCX0KKwkJdGhpc0VVTiA9IEVVTnRtcDsKIAl9CiAKIAkvKiBNYWtlIHRoaXMgdGhlIG5ldyBzdGFydCBvZiBjaGFpbiBmb3IgdGhpc1ZVQyAqLwpAQCAtNDczLDYgKzUzNSw3IEBACiB7CiAJdTE2IGxhc3RFVU47CiAJdTE2IHRoaXNWVUMgPSBibG9jayAvIChuZnRsLT5FcmFzZVNpemUgLyA1MTIpOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKIAl1bnNpZ25lZCBpbnQgd3JpdGVFVU47CiAJdW5zaWduZWQgbG9uZyBibG9ja29mcyA9IChibG9jayAqIDUxMikgJiAobmZ0bC0+RXJhc2VTaXplIC0xKTsKIAlzaXplX3QgcmV0bGVuOwpAQCAtNDg5LDIxICs1NTIsMjIgQEAKIAkJKi8KIAkJbGFzdEVVTiA9IEJMT0NLX05JTDsKIAkJd3JpdGVFVU4gPSBuZnRsLT5FVU50YWJsZVt0aGlzVlVDXTsKLSAgICAgICAgICAgICAgICBzaWxseSA9IE1BWF9MT09QUzsKKwkJc2lsbHkgPSBNQVhfTE9PUFM7CiAJCXdoaWxlICh3cml0ZUVVTiA8PSBuZnRsLT5sYXN0RVVOKSB7CiAJCQlzdHJ1Y3QgbmZ0bF9iY2kgYmNpOwogCQkJc2l6ZV90IHJldGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGF0dXM7CisJCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCiAJCQlsYXN0RVVOID0gd3JpdGVFVU47CiAKLQkJCU1URF9SRUFET09CKG5mdGwtPm1iZC5tdGQsICh3cml0ZUVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyBibG9ja29mcywKLQkJCQkgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKTsKKwkJCW5mdGxfcmVhZF9vb2IobXRkLAorCQkJCSAgICAgICh3cml0ZUVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyBibG9ja29mcywKKwkJCQkgICAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpOwogCiAJCQlERUJVRyhNVERfREVCVUdfTEVWRUwyLCAiU3RhdHVzIG9mIGJsb2NrICVkIGluIEVVTiAlZCBpcyAleFxuIiwKIAkJCSAgICAgIGJsb2NrICwgd3JpdGVFVU4sIGxlMTZfdG9fY3B1KGJjaS5TdGF0dXMpKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gYmNpLlN0YXR1cyB8IGJjaS5TdGF0dXMxOworCQkJc3RhdHVzID0gYmNpLlN0YXR1cyB8IGJjaS5TdGF0dXMxOwogCQkJc3dpdGNoKHN0YXR1cykgewogCQkJY2FzZSBTRUNUT1JfRlJFRToKIAkJCQlyZXR1cm4gd3JpdGVFVU47CkBAIC01NzQsMTAgKzYzOCwxMCBAQAogCQkvKiBXZSd2ZSBmb3VuZCBhIGZyZWUgYmxvY2suIEluc2VydCBpdCBpbnRvIHRoZSBjaGFpbi4gKi8KIAogCQlpZiAobGFzdEVVTiAhPSBCTE9DS19OSUwpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpc1ZVQyB8PSAweDgwMDA7IC8qIEl0J3MgYSByZXBsYWNlbWVudCBibG9jayAqLworCQkJdGhpc1ZVQyB8PSAweDgwMDA7IC8qIEl0J3MgYSByZXBsYWNlbWVudCBibG9jayAqLwogCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvKiBUaGUgZmlyc3QgYmxvY2sgaW4gYSBuZXcgY2hhaW4gKi8KLSAgICAgICAgICAgICAgICAgICAgbmZ0bC0+RVVOdGFibGVbdGhpc1ZVQ10gPSB3cml0ZUVVTjsKKwkJCS8qIFRoZSBmaXJzdCBibG9jayBpbiBhIG5ldyBjaGFpbiAqLworCQkJbmZ0bC0+RVVOdGFibGVbdGhpc1ZVQ10gPSB3cml0ZUVVTjsKIAkJfQogCiAJCS8qIHNldCB1cCB0aGUgYWN0dWFsIEVVTiB3ZSdyZSB3cml0aW5nIGludG8gKi8KQEAgLTU4NSwyOSArNjQ5LDI5IEBACiAJCW5mdGwtPlJlcGxVbml0VGFibGVbd3JpdGVFVU5dID0gQkxPQ0tfTklMOwogCiAJCS8qIC4uLiBhbmQgb24gdGhlIGZsYXNoIGl0c2VsZiAqLwotCQlNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCB3cml0ZUVVTiAqIG5mdGwtPkVyYXNlU2l6ZSArIDgsIDgsCi0JCQkgICAgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQluZnRsX3JlYWRfb29iKG10ZCwgd3JpdGVFVU4gKiBuZnRsLT5FcmFzZVNpemUgKyA4LCA4LAorCQkJICAgICAgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwogCiAJCW9vYi51LmEuVmlydFVuaXROdW0gPSBvb2IudS5hLlNwYXJlVmlydFVuaXROdW0gPSBjcHVfdG9fbGUxNih0aGlzVlVDKTsKIAotCQlNVERfV1JJVEVPT0IobmZ0bC0+bWJkLm10ZCwgd3JpdGVFVU4gKiBuZnRsLT5FcmFzZVNpemUgKyA4LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CisJCW5mdGxfd3JpdGVfb29iKG10ZCwgd3JpdGVFVU4gKiBuZnRsLT5FcmFzZVNpemUgKyA4LCA4LAorCQkJICAgICAgICZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKIAotICAgICAgICAgICAgICAgIC8qIHdlIGxpbmsgdGhlIG5ldyBibG9jayB0byB0aGUgY2hhaW4gb25seSBhZnRlciB0aGUKKwkJLyogd2UgbGluayB0aGUgbmV3IGJsb2NrIHRvIHRoZSBjaGFpbiBvbmx5IGFmdGVyIHRoZQogICAgICAgICAgICAgICAgICAgIGJsb2NrIGlzIHJlYWR5LiBJdCBhdm9pZHMgdGhlIGNhc2Ugd2hlcmUgdGhlIGNoYWluCiAgICAgICAgICAgICAgICAgICAgY291bGQgcG9pbnQgdG8gYSBmcmVlIGJsb2NrICovCi0gICAgICAgICAgICAgICAgaWYgKGxhc3RFVU4gIT0gQkxPQ0tfTklMKSB7CisJCWlmIChsYXN0RVVOICE9IEJMT0NLX05JTCkgewogCQkJLyogQm90aCBpbiBvdXIgY2FjaGUuLi4gKi8KIAkJCW5mdGwtPlJlcGxVbml0VGFibGVbbGFzdEVVTl0gPSB3cml0ZUVVTjsKIAkJCS8qIC4uLiBhbmQgb24gdGhlIGZsYXNoIGl0c2VsZiAqLwotCQkJTVREX1JFQURPT0IobmZ0bC0+bWJkLm10ZCwgKGxhc3RFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsgOCwKLQkJCQkgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQkJbmZ0bF9yZWFkX29vYihtdGQsIChsYXN0RVVOICogbmZ0bC0+RXJhc2VTaXplKSArIDgsCisJCQkJICAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwogCiAJCQlvb2IudS5hLlJlcGxVbml0TnVtID0gb29iLnUuYS5TcGFyZVJlcGxVbml0TnVtCiAJCQkJPSBjcHVfdG9fbGUxNih3cml0ZUVVTik7CiAKLQkJCU1URF9XUklURU9PQihuZnRsLT5tYmQubXRkLCAobGFzdEVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyA4LAotCQkJCSAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQkJbmZ0bF93cml0ZV9vb2IobXRkLCAobGFzdEVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyA4LAorCQkJCSAgICAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CiAJCX0KIAogCQlyZXR1cm4gd3JpdGVFVU47CkBAIC02MzksMTAgKzcwMyw5IEBACiAKIAltZW1zZXQoJm9vYiwgMHhmZiwgc2l6ZW9mKHN0cnVjdCBuZnRsX29vYikpOwogCW9vYi5iLlN0YXR1cyA9IG9vYi5iLlN0YXR1czEgPSBTRUNUT1JfVVNFRDsKLQlNVERfV1JJVEVFQ0MobmZ0bC0+bWJkLm10ZCwgKHdyaXRlRVVOICogbmZ0bC0+RXJhc2VTaXplKSArIGJsb2Nrb2ZzLAotCQkgICAgIDUxMiwgJnJldGxlbiwgKGNoYXIgKilidWZmZXIsIChjaGFyICopJm9vYiwgJm5mdGwtPm9vYmluZm8pOwotICAgICAgICAvKiBuZWVkIHRvIHdyaXRlIFNFQ1RPUl9VU0VEIGZsYWdzIHNpbmNlIHRoZXkgYXJlIG5vdCB3cml0dGVuIGluIG10ZF93cml0ZWVjYyAqLwogCisJbmZ0bF93cml0ZShuZnRsLT5tYmQubXRkLCAod3JpdGVFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsgYmxvY2tvZnMsCisJCSAgIDUxMiwgJnJldGxlbiwgKGNoYXIgKilidWZmZXIsIChjaGFyICopJm9vYik7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX05GVExfUlcgKi8KQEAgLTY1MSwyMCArNzE0LDIyIEBACiAJCQkgIGNoYXIgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3QgTkZUTHJlY29yZCAqbmZ0bCA9ICh2b2lkICopbWJkOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKIAl1MTYgbGFzdGdvb2RFVU47CiAJdTE2IHRoaXNFVU4gPSBuZnRsLT5FVU50YWJsZVtibG9jayAvIChuZnRsLT5FcmFzZVNpemUgLyA1MTIpXTsKIAl1bnNpZ25lZCBsb25nIGJsb2Nrb2ZzID0gKGJsb2NrICogNTEyKSAmIChuZnRsLT5FcmFzZVNpemUgLSAxKTsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCWludCBzaWxseSA9IE1BWF9MT09QUzsKLSAgICAgICAgc2l6ZV90IHJldGxlbjsKLSAgICAgICAgc3RydWN0IG5mdGxfYmNpIGJjaTsKKwlzaXplX3QgcmV0bGVuOworCXN0cnVjdCBuZnRsX2JjaSBiY2k7CiAKIAlsYXN0Z29vZEVVTiA9IEJMT0NLX05JTDsKIAotICAgICAgICBpZiAodGhpc0VVTiAhPSBCTE9DS19OSUwpIHsKKwlpZiAodGhpc0VVTiAhPSBCTE9DS19OSUwpIHsKIAkJd2hpbGUgKHRoaXNFVU4gPCBuZnRsLT5uYl9ibG9ja3MpIHsKLQkJCWlmIChNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCAodGhpc0VVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyBibG9ja29mcywKLQkJCQkJOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCisJCQlpZiAobmZ0bF9yZWFkX29vYihtdGQsICh0aGlzRVVOICogbmZ0bC0+RXJhc2VTaXplKSArCisJCQkJCSAgYmxvY2tvZnMsIDgsICZyZXRsZW4sCisJCQkJCSAgKGNoYXIgKikmYmNpKSA8IDApCiAJCQkJc3RhdHVzID0gU0VDVE9SX0lHTk9SRTsKIAkJCWVsc2UKIAkJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CkBAIC02OTQsNyArNzU5LDcgQEAKIAkJCX0KIAkJCXRoaXNFVU4gPSBuZnRsLT5SZXBsVW5pdFRhYmxlW3RoaXNFVU5dOwogCQl9Ci0gICAgICAgIH0KKwl9CiAKICB0aGVfZW5kOgogCWlmIChsYXN0Z29vZEVVTiA9PSBCTE9DS19OSUwpIHsKQEAgLTcwMyw3ICs3NjgsOSBAQAogCX0gZWxzZSB7CiAJCWxvZmZfdCBwdHIgPSAobGFzdGdvb2RFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsgYmxvY2tvZnM7CiAJCXNpemVfdCByZXRsZW47Ci0JCWlmIChNVERfUkVBRChuZnRsLT5tYmQubXRkLCBwdHIsIDUxMiwgJnJldGxlbiwgYnVmZmVyKSkKKwkJaW50IHJlcyA9IG10ZC0+cmVhZChtdGQsIHB0ciwgNTEyLCAmcmV0bGVuLCBidWZmZXIpOworCisJCWlmIChyZXMgPCAwICYmIHJlcyAhPSAtRVVDTEVBTikKIAkJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25mdGxtb3VudC5jIGIvZHJpdmVycy9tdGQvbmZ0bG1vdW50LmMKaW5kZXggM2IxMDRlYi4uMDY3MjYyZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25mdGxtb3VudC5jCisrKyBiL2RyaXZlcnMvbXRkL25mdGxtb3VudC5jCkBAIC0zMyw2ICszMywxMSBAQAogCiBjaGFyIG5mdGxtb3VudHJldltdPSIkUmV2aXNpb246IDEuNDEgJCI7CiAKK2V4dGVybiBpbnQgbmZ0bF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCQkgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1Zik7CitleHRlcm4gaW50IG5mdGxfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKKwkJCSAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1Zik7CisKIC8qIGZpbmRfYm9vdF9yZWNvcmQ6IEZpbmQgdGhlIE5GVEwgTWVkaWEgSGVhZGVyIGFuZCBpdHMgU3BhcmUgY29weSB3aGljaCBjb250YWlucyB0aGUKICAqCXZhcmlvdXMgZGV2aWNlIGluZm9ybWF0aW9uIG9mIHRoZSBORlRMIHBhcnRpdGlvbiBhbmQgQmFkIFVuaXQgVGFibGUuIFVwZGF0ZQogICoJdGhlIFJlcGxVbml0VGFibGVbXSB0YWJsZSBhY2Nyb2RpbmcgdG8gdGhlIEJhZCBVbml0IFRhYmxlLiBSZXBsVW5pdFRhYmxlW10KQEAgLTQ1LDYgKzUwLDcgQEAKIAlzaXplX3QgcmV0bGVuOwogCXU4IGJ1ZltTRUNUT1JTSVpFXTsKIAlzdHJ1Y3QgTkZUTE1lZGlhSGVhZGVyICptaCA9ICZuZnRsLT5NZWRpYUhkcjsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CiAJdW5zaWduZWQgaW50IGk7CiAKICAgICAgICAgLyogQXNzdW1lIGxvZ2ljYWwgRXJhc2VTaXplID09IHBoeXNpY2FsIGVyYXNlc2l6ZSBmb3Igc3RhcnRpbmcgdGhlIHNjYW4uCkBAIC02NSw3ICs3MSw4IEBACiAKIAkJLyogQ2hlY2sgZm9yIEFOQU5EIGhlYWRlciBmaXJzdC4gVGhlbiBjYW4gd2hpbmdlIGlmIGl0J3MgZm91bmQgYnV0IGxhdGVyCiAJCSAgIGNoZWNrcyBmYWlsICovCi0JCXJldCA9IE1URF9SRUFEKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplLCBTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWYpOworCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSwgU0VDVE9SU0laRSwKKwkJCQkmcmV0bGVuLCBidWYpOwogCQkvKiBXZSBpZ25vcmUgcmV0IGluIGNhc2UgdGhlIEVDQyBvZiB0aGUgTWVkaWFIZWFkZXIgaXMgaW52YWxpZAogCQkgICAod2hpY2ggaXMgYXBwYXJlbnRseSBhY2NlcHRhYmxlKSAqLwogCQlpZiAocmV0bGVuICE9IFNFQ1RPUlNJWkUpIHsKQEAgLTkwLDggKzk3LDkgQEAKIAkJfQogCiAJCS8qIFRvIGJlIHNhZmVyIHdpdGggQklPUywgYWxzbyB1c2UgZXJhc2UgbWFyayBhcyBkaXNjcmltaW5hbnQgKi8KLQkJaWYgKChyZXQgPSBNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LAotCQkJCTgsICZyZXRsZW4sIChjaGFyICopJmgxKSA8IDApKSB7CisJCWlmICgocmV0ID0gbmZ0bF9yZWFkX29vYihtdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsKKwkJCQkJIFNFQ1RPUlNJWkUgKyA4LCA4LCAmcmV0bGVuLAorCQkJCQkgKGNoYXIgKikmaDEpIDwgMCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFOQU5EIGhlYWRlciBmb3VuZCBhdCAweCV4IGluIG10ZCVkLCBidXQgT09CIGRhdGEgcmVhZCBmYWlsZWQgKGVyciAlZClcbiIsCiAJCQkgICAgICAgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUsIG5mdGwtPm1iZC5tdGQtPmluZGV4LCByZXQpOwogCQkJY29udGludWU7CkBAIC0xMDksOCArMTE3LDggQEAKIAkJfQogCiAJCS8qIEZpbmFsbHkgcmVyZWFkIHRvIGNoZWNrIEVDQyAqLwotCQlpZiAoKHJldCA9IE1URF9SRUFERUNDKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplLCBTRUNUT1JTSVpFLAotCQkJCSZyZXRsZW4sIGJ1ZiwgKGNoYXIgKikmb29iLCBOVUxMKSA8IDApKSB7CisJCWlmICgocmV0ID0gbXRkLT5yZWFkKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUsIFNFQ1RPUlNJWkUsCisJCQkJICAgICAmcmV0bGVuLCBidWYpIDwgMCkpIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiQU5BTkQgaGVhZGVyIGZvdW5kIGF0IDB4JXggaW4gbXRkJWQsIGJ1dCBFQ0MgcmVhZCBmYWlsZWQgKGVyciAlZClcbiIsCiAJCQkgICAgICAgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUsIG5mdGwtPm1iZC5tdGQtPmluZGV4LCByZXQpOwogCQkJY29udGludWU7CkBAIC0yMjgsOSArMjM2LDkgQEAKIFRoZSBuZXcgRGlza09uQ2hpcCBkcml2ZXIgYWxyZWFkeSBzY2FubmVkIHRoZSBiYWQgYmxvY2sgdGFibGUuICBKdXN0IHF1ZXJ5IGl0LgogCQkJaWYgKChpICYgKFNFQ1RPUlNJWkUgLSAxKSkgPT0gMCkgewogCQkJCS8qIHJlYWQgb25lIHNlY3RvciBmb3IgZXZlcnkgU0VDVE9SU0laRSBvZiBibG9ja3MgKi8KLQkJCQlpZiAoKHJldCA9IE1URF9SRUFERUNDKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsKLQkJCQkJCSAgICAgICBpICsgU0VDVE9SU0laRSwgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmLAotCQkJCQkJICAgICAgIChjaGFyICopJm9vYiwgTlVMTCkpIDwgMCkgeworCQkJCWlmICgocmV0ID0gbXRkLT5yZWFkKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsKKwkJCQkJCSAgICAgaSArIFNFQ1RPUlNJWkUsIFNFQ1RPUlNJWkUsICZyZXRsZW4sCisJCQkJCQkgICAgIGJ1ZikpIDwgMCkgewogCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlYWQgb2YgYmFkIHNlY3RvciB0YWJsZSBmYWlsZWQgKGVyciAlZClcbiIsCiAJCQkJCSAgICAgICByZXQpOwogCQkJCQlrZnJlZShuZnRsLT5SZXBsVW5pdFRhYmxlKTsKQEAgLTI2OCwxOCArMjc2LDIyIEBACiBzdGF0aWMgaW50IGNoZWNrX2ZyZWVfc2VjdG9ycyhzdHJ1Y3QgTkZUTHJlY29yZCAqbmZ0bCwgdW5zaWduZWQgaW50IGFkZHJlc3MsIGludCBsZW4sCiAJCQkgICAgICBpbnQgY2hlY2tfb29iKQogewotCWludCBpOwotCXNpemVfdCByZXRsZW47CiAJdTggYnVmW1NFQ1RPUlNJWkUgKyBuZnRsLT5tYmQubXRkLT5vb2JzaXplXTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CisJc2l6ZV90IHJldGxlbjsKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gU0VDVE9SU0laRSkgewotCQlpZiAoTVREX1JFQURFQ0MobmZ0bC0+bWJkLm10ZCwgYWRkcmVzcywgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmLCAmYnVmW1NFQ1RPUlNJWkVdLCAmbmZ0bC0+b29iaW5mbykgPCAwKQorCQlpZiAobXRkLT5yZWFkKG10ZCwgYWRkcmVzcywgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmKSkKIAkJCXJldHVybiAtMTsKIAkJaWYgKG1lbWNtcGIoYnVmLCAweGZmLCBTRUNUT1JTSVpFKSAhPSAwKQogCQkJcmV0dXJuIC0xOwogCiAJCWlmIChjaGVja19vb2IpIHsKLQkJCWlmIChtZW1jbXBiKGJ1ZiArIFNFQ1RPUlNJWkUsIDB4ZmYsIG5mdGwtPm1iZC5tdGQtPm9vYnNpemUpICE9IDApCisJCQlpZihuZnRsX3JlYWRfb29iKG10ZCwgYWRkcmVzcywgbXRkLT5vb2JzaXplLAorCQkJCQkgJnJldGxlbiwgJmJ1ZltTRUNUT1JTSVpFXSkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChtZW1jbXBiKGJ1ZiArIFNFQ1RPUlNJWkUsIDB4ZmYsIG10ZC0+b29ic2l6ZSkgIT0gMCkKIAkJCQlyZXR1cm4gLTE7CiAJCX0KIAkJYWRkcmVzcyArPSBTRUNUT1JTSVpFOwpAQCAtMzAxLDEwICszMTMsMTEgQEAKIAl1bnNpZ25lZCBpbnQgbmJfZXJhc2VzLCBlcmFzZV9tYXJrOwogCXN0cnVjdCBuZnRsX3VjaTEgdWNpOwogCXN0cnVjdCBlcmFzZV9pbmZvICppbnN0ciA9ICZuZnRsLT5pbnN0cjsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CiAKIAkvKiBSZWFkIHRoZSBVbml0IENvbnRyb2wgSW5mb3JtYXRpb24gIzEgZm9yIFdlYXItTGV2ZWxpbmcgKi8KLQlpZiAoTVREX1JFQURPT0IobmZ0bC0+bWJkLm10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsgOCwKLQkJCTgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQorCWlmIChuZnRsX3JlYWRfb29iKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsgOCwKKwkJCSAgOCwgJnJldGxlbiwgKGNoYXIgKikmdWNpKSA8IDApCiAJCWdvdG8gZGVmYXVsdF91Y2kxOwogCiAJZXJhc2VfbWFyayA9IGxlMTZfdG9fY3B1ICgodWNpLkVyYXNlTWFyayB8IHVjaS5FcmFzZU1hcmsxKSk7CkBAIC0zMjEsNyArMzM0LDcgQEAKIAlpbnN0ci0+bXRkID0gbmZ0bC0+bWJkLm10ZDsKIAlpbnN0ci0+YWRkciA9IGJsb2NrICogbmZ0bC0+RXJhc2VTaXplOwogCWluc3RyLT5sZW4gPSBuZnRsLT5FcmFzZVNpemU7Ci0JTVREX0VSQVNFKG5mdGwtPm1iZC5tdGQsIGluc3RyKTsKKwltdGQtPmVyYXNlKG10ZCwgaW5zdHIpOwogCiAJaWYgKGluc3RyLT5zdGF0ZSA9PSBNVERfRVJBU0VfRkFJTEVEKSB7CiAJCXByaW50aygiRXJyb3Igd2hpbGUgZm9ybWF0dGluZyBibG9jayAlZFxuIiwgYmxvY2spOwpAQCAtMzQzLDggKzM1Niw4IEBACiAJCQlnb3RvIGZhaWw7CiAKIAkJdWNpLldlYXJJbmZvID0gbGUzMl90b19jcHUobmJfZXJhc2VzKTsKLQkJaWYgKE1URF9XUklURU9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LCA4LAotCQkJCSAmcmV0bGVuLCAoY2hhciAqKSZ1Y2kpIDwgMCkKKwkJaWYgKG5mdGxfd3JpdGVfb29iKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsKKwkJCQkgICA4LCA4LCAmcmV0bGVuLCAoY2hhciAqKSZ1Y2kpIDwgMCkKIAkJCWdvdG8gZmFpbDsKIAkJcmV0dXJuIDA7CiBmYWlsOgpAQCAtMzY1LDYgKzM3OCw3IEBACiAgKgljYXNlLiAqLwogc3RhdGljIHZvaWQgY2hlY2tfc2VjdG9yc19pbl9jaGFpbihzdHJ1Y3QgTkZUTHJlY29yZCAqbmZ0bCwgdW5zaWduZWQgaW50IGZpcnN0X2Jsb2NrKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKIAl1bnNpZ25lZCBpbnQgYmxvY2ssIGksIHN0YXR1czsKIAlzdHJ1Y3QgbmZ0bF9iY2kgYmNpOwogCWludCBzZWN0b3JzX3Blcl9ibG9jazsKQEAgLTM3NCw4ICszODgsOSBAQAogCWJsb2NrID0gZmlyc3RfYmxvY2s7CiAJZm9yICg7OykgewogCQlmb3IgKGkgPSAwOyBpIDwgc2VjdG9yc19wZXJfYmxvY2s7IGkrKykgewotCQkJaWYgKE1URF9SRUFET09CKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgaSAqIFNFQ1RPUlNJWkUsCi0JCQkJCTgsICZyZXRsZW4sIChjaGFyICopJmJjaSkgPCAwKQorCQkJaWYgKG5mdGxfcmVhZF9vb2IobXRkLAorCQkJCQkgIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgaSAqIFNFQ1RPUlNJWkUsCisJCQkJCSAgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCiAJCQkJc3RhdHVzID0gU0VDVE9SX0lHTk9SRTsKIAkJCWVsc2UKIAkJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CkBAIC0zOTQsOSArNDA5LDEwIEBACiAJCQkJCS8qIHNlY3RvciBub3QgZnJlZSBhY3R1YWxseSA6IG1hcmsgaXQgYXMgU0VDVE9SX0lHTk9SRSAgKi8KIAkJCQkJYmNpLlN0YXR1cyA9IFNFQ1RPUl9JR05PUkU7CiAJCQkJCWJjaS5TdGF0dXMxID0gU0VDVE9SX0lHTk9SRTsKLQkJCQkJTVREX1dSSVRFT09CKG5mdGwtPm1iZC5tdGQsCi0JCQkJCQkgICAgIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgaSAqIFNFQ1RPUlNJWkUsCi0JCQkJCQkgICAgIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSk7CisJCQkJCW5mdGxfd3JpdGVfb29iKG10ZCwgYmxvY2sgKgorCQkJCQkJICAgICAgIG5mdGwtPkVyYXNlU2l6ZSArCisJCQkJCQkgICAgICAgaSAqIFNFQ1RPUlNJWkUsIDgsCisJCQkJCQkgICAgICAgJnJldGxlbiwgKGNoYXIgKikmYmNpKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAtNDgxLDEzICs0OTcsMTQgQEAKICAqCTEuICovCiBzdGF0aWMgaW50IGNoZWNrX2FuZF9tYXJrX2ZyZWVfYmxvY2soc3RydWN0IE5GVExyZWNvcmQgKm5mdGwsIGludCBibG9jaykKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CiAJc3RydWN0IG5mdGxfdWNpMSBoMTsKIAl1bnNpZ25lZCBpbnQgZXJhc2VfbWFyazsKIAlzaXplX3QgcmV0bGVuOwogCiAJLyogY2hlY2sgZXJhc2UgbWFyay4gKi8KLQlpZiAoTVREX1JFQURPT0IobmZ0bC0+bWJkLm10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsgOCwgOCwKLQkJCSZyZXRsZW4sIChjaGFyICopJmgxKSA8IDApCisJaWYgKG5mdGxfcmVhZF9vb2IobXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LCA4LAorCQkJICAmcmV0bGVuLCAoY2hhciAqKSZoMSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAllcmFzZV9tYXJrID0gbGUxNl90b19jcHUgKChoMS5FcmFzZU1hcmsgfCBoMS5FcmFzZU1hcmsxKSk7CkBAIC01MDEsOCArNTE4LDkgQEAKIAkJaDEuRXJhc2VNYXJrID0gY3B1X3RvX2xlMTYoRVJBU0VfTUFSSyk7CiAJCWgxLkVyYXNlTWFyazEgPSBjcHVfdG9fbGUxNihFUkFTRV9NQVJLKTsKIAkJaDEuV2VhckluZm8gPSBjcHVfdG9fbGUzMigwKTsKLQkJaWYgKE1URF9XUklURU9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LCA4LAotCQkJCSAmcmV0bGVuLCAoY2hhciAqKSZoMSkgPCAwKQorCQlpZiAobmZ0bF93cml0ZV9vb2IobXRkLAorCQkJCSAgIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgU0VDVE9SU0laRSArIDgsIDgsCisJCQkJICAgJnJldGxlbiwgKGNoYXIgKikmaDEpIDwgMCkKIAkJCXJldHVybiAtMTsKIAl9IGVsc2UgewogI2lmIDAKQEAgLTUxMyw4ICs1MzEsOCBAQAogCQkJCQkJU0VDVE9SU0laRSwgMCkgIT0gMCkKIAkJCQlyZXR1cm4gLTE7CiAKLQkJCWlmIChNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIGksCi0JCQkJCTE2LCAmcmV0bGVuLCBidWYpIDwgMCkKKwkJCWlmIChuZnRsX3JlYWRfb29iKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBpLAorCQkJCQkgIDE2LCAmcmV0bGVuLCBidWYpIDwgMCkKIAkJCQlyZXR1cm4gLTE7CiAJCQlpZiAoaSA9PSBTRUNUT1JTSVpFKSB7CiAJCQkJLyogc2tpcCBlcmFzZSBtYXJrICovCkBAIC01NDAsMTEgKzU1OCwxMiBAQAogICovCiBzdGF0aWMgaW50IGdldF9mb2xkX21hcmsoc3RydWN0IE5GVExyZWNvcmQgKm5mdGwsIHVuc2lnbmVkIGludCBibG9jaykKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CiAJc3RydWN0IG5mdGxfdWNpMiB1Y2k7CiAJc2l6ZV90IHJldGxlbjsKIAotCWlmIChNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIDIgKiBTRUNUT1JTSVpFICsgOCwKLQkJCTgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQorCWlmIChuZnRsX3JlYWRfb29iKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyAyICogU0VDVE9SU0laRSArIDgsCisJCQkgIDgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiBsZTE2X3RvX2NwdSgodWNpLkZvbGRNYXJrIHwgdWNpLkZvbGRNYXJrMSkpOwpAQCAtNTU4LDYgKzU3Nyw3IEBACiAJaW50IGNoYWluX2xlbmd0aCwgZG9fZm9ybWF0X2NoYWluOwogCXN0cnVjdCBuZnRsX3VjaTAgaDA7CiAJc3RydWN0IG5mdGxfdWNpMSBoMTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IHMtPm1iZC5tdGQ7CiAJc2l6ZV90IHJldGxlbjsKIAogCS8qIHNlYXJjaCBmb3IgTkZUTCBNZWRpYUhlYWRlciBhbmQgU3BhcmUgTkZUTCBNZWRpYSBIZWFkZXIgKi8KQEAgLTU4MiwxMCArNjAyLDEzIEBACiAKIAkJCWZvciAoOzspIHsKIAkJCQkvKiByZWFkIHRoZSBibG9jayBoZWFkZXIuIElmIGVycm9yLCB3ZSBmb3JtYXQgdGhlIGNoYWluICovCi0JCQkJaWYgKE1URF9SRUFET09CKHMtPm1iZC5tdGQsIGJsb2NrICogcy0+RXJhc2VTaXplICsgOCwgOCwKLQkJCQkJCSZyZXRsZW4sIChjaGFyICopJmgwKSA8IDAgfHwKLQkJCQkgICAgTVREX1JFQURPT0Iocy0+bWJkLm10ZCwgYmxvY2sgKiBzLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsgOCwgOCwKLQkJCQkJCSZyZXRsZW4sIChjaGFyICopJmgxKSA8IDApIHsKKwkJCQlpZiAobmZ0bF9yZWFkX29vYihtdGQsCisJCQkJCQkgIGJsb2NrICogcy0+RXJhc2VTaXplICsgOCwgOCwKKwkJCQkJCSAgJnJldGxlbiwgKGNoYXIgKikmaDApIDwgMCB8fAorCQkJCSAgICBuZnRsX3JlYWRfb29iKG10ZCwKKwkJCQkJCSAgYmxvY2sgKiBzLT5FcmFzZVNpemUgKworCQkJCQkJICBTRUNUT1JTSVpFICsgOCwgOCwKKwkJCQkJCSAgJnJldGxlbiwgKGNoYXIgKikmaDEpIDwgMCkgewogCQkJCQlzLT5SZXBsVW5pdFRhYmxlW2Jsb2NrXSA9IEJMT0NLX05JTDsKIAkJCQkJZG9fZm9ybWF0X2NoYWluID0gMTsKIAkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKaW5kZXggMTI2ZmY2Yi4uNTkzMGEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwpAQCAtMjksNiArMjksMjAgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBPbmVOQU5EIGZsYXNoIHZpYSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyLgogCitjb25maWcgTVREX09ORU5BTkRfT1RQCisJYm9vbCAiT25lTkFORCBPVFAgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1URF9PTkVOQU5ECisJaGVscAorCSAgT25lIEJsb2NrIG9mIHRoZSBOQU5EIEZsYXNoIEFycmF5IG1lbW9yeSBpcyByZXNlcnZlZCBhcworCSAgYSBPbmUtVGltZSBQcm9ncmFtbWFibGUgQmxvY2sgbWVtb3J5IGFyZWEuCisJICBBbHNvLCAxc3QgQmxvY2sgb2YgTkFORCBGbGFzaCBBcnJheSBjYW4gYmUgdXNlZCBhcyBPVFAuCisKKwkgIFRoZSBPVFAgYmxvY2sgY2FuIGJlIHJlYWQsIHByb2dyYW1tZWQgYW5kIGxvY2tlZCB1c2luZyB0aGUgc2FtZQorCSAgb3BlcmF0aW9ucyBhcyBhbnkgb3RoZXIgTkFORCBGbGFzaCBBcnJheSBtZW1vcnkgYmxvY2suCisJICBPVFAgYmxvY2sgY2Fubm90IGJlIGVyYXNlZC4KKworCSAgT1RQIGJsb2NrIGlzIGZ1bGx5LWd1YXJhbnRlZWQgdG8gYmUgYSB2YWxpZCBibG9jay4KKwogY29uZmlnIE1URF9PTkVOQU5EX1NZTkNfUkVBRAogCWJvb2wgIk9uZU5BTkQgU3luYy4gQnVyc3QgUmVhZCBTdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwppbmRleCBhNTNhNzNmLi44NGVjNDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKQEAgLTIzLDggKzIzLDcgQEAKIC8qKgogICogb25lbmFuZF9vb2JfNjQgLSBvb2IgaW5mbyBmb3IgbGFyZ2UgKDJLQikgcGFnZQogICovCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBvbmVuYW5kX29vYl82NCA9IHsKLQkudXNlZWNjCQk9IE1URF9OQU5ERUNDX0FVVE9QTEFDRSwKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgb25lbmFuZF9vb2JfNjQgPSB7CiAJLmVjY2J5dGVzCT0gMjAsCiAJLmVjY3BvcwkJPSB7CiAJCTgsIDksIDEwLCAxMSwgMTIsCkBAIC0zNCwxNCArMzMsMTQgQEAKIAkJfSwKIAkub29iZnJlZQk9IHsKIAkJezIsIDN9LCB7MTQsIDJ9LCB7MTgsIDN9LCB7MzAsIDJ9LAotCQl7MjQsIDN9LCB7NDYsIDJ9LCB7NDAsIDN9LCB7NjIsIDJ9IH0KKwkJezM0LCAzfSwgezQ2LCAyfSwgezUwLCAzfSwgezYyLCAyfQorCX0KIH07CiAKIC8qKgogICogb25lbmFuZF9vb2JfMzIgLSBvb2IgaW5mbyBmb3IgbWlkZGxlICgxS0IpIHBhZ2UKICAqLwotc3RhdGljIHN0cnVjdCBuYW5kX29vYmluZm8gb25lbmFuZF9vb2JfMzIgPSB7Ci0JLnVzZWVjYwkJPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG9uZW5hbmRfb29iXzMyID0gewogCS5lY2NieXRlcwk9IDEwLAogCS5lY2Nwb3MJCT0gewogCQk4LCA5LCAxMCwgMTEsIDEyLApAQCAtMTkwLDcgKzE4OSw3IEBACiBzdGF0aWMgaW50IG9uZW5hbmRfY29tbWFuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgbG9mZl90IGFkZHIsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgdmFsdWUsIHJlYWRjbWQgPSAwOworCWludCB2YWx1ZSwgcmVhZGNtZCA9IDAsIGJsb2NrX2NtZCA9IDA7CiAJaW50IGJsb2NrLCBwYWdlOwogCS8qIE5vdyB3ZSB1c2UgcGFnZSBzaXplIG9wZXJhdGlvbiAqLwogCWludCBzZWN0b3JzID0gNCwgY291bnQgPSA0OwpAQCAtMjA2LDYgKzIwNSw4IEBACiAKIAljYXNlIE9ORU5BTkRfQ01EX0VSQVNFOgogCWNhc2UgT05FTkFORF9DTURfQlVGRkVSUkFNOgorCWNhc2UgT05FTkFORF9DTURfT1RQX0FDQ0VTUzoKKwkJYmxvY2tfY21kID0gMTsKIAkJYmxvY2sgPSAoaW50KSAoYWRkciA+PiB0aGlzLT5lcmFzZV9zaGlmdCk7CiAJCXBhZ2UgPSAtMTsKIAkJYnJlYWs7CkBAIC0yMzMsNiArMjM0LDEyIEBACiAJCS8qIFdyaXRlICdERlMsIEZCQScgb2YgRmxhc2ggKi8KIAkJdmFsdWUgPSBvbmVuYW5kX2Jsb2NrX2FkZHJlc3ModGhpcywgYmxvY2spOwogCQl0aGlzLT53cml0ZV93b3JkKHZhbHVlLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzEpOworCisJCWlmIChibG9ja19jbWQpIHsKKwkJCS8qIFNlbGVjdCBEYXRhUkFNIGZvciBERFAgKi8KKwkJCXZhbHVlID0gb25lbmFuZF9idWZmZXJyYW1fYWRkcmVzcyh0aGlzLCBibG9jayk7CisJCQl0aGlzLT53cml0ZV93b3JkKHZhbHVlLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzIpOworCQl9CiAJfQogCiAJaWYgKHBhZ2UgIT0gLTEpIHsKQEAgLTMwMSw2ICszMDgsNyBAQAogCiAJCWlmIChzdGF0ZSAhPSBGTF9SRUFESU5HKQogCQkJY29uZF9yZXNjaGVkKCk7CisJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAl9CiAJLyogVG8gZ2V0IGNvcnJlY3QgaW50ZXJydXB0IHN0YXR1cyBpbiB0aW1lb3V0IGNhc2UgKi8KIAlpbnRlcnJ1cHQgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CkBAIC0zNDQsNyArMzUyLDcgQEAKIAogCWlmIChPTkVOQU5EX0NVUlJFTlRfQlVGRkVSUkFNKHRoaXMpKSB7CiAJCWlmIChhcmVhID09IE9ORU5BTkRfREFUQVJBTSkKLQkJCXJldHVybiBtdGQtPm9vYmJsb2NrOworCQkJcmV0dXJuIG10ZC0+d3JpdGVzaXplOwogCQlpZiAoYXJlYSA9PSBPTkVOQU5EX1NQQVJFUkFNKQogCQkJcmV0dXJuIG10ZC0+b29ic2l6ZTsKIAl9CkBAIC0zNzIsNiArMzgwLDE3IEBACiAKIAlidWZmZXJyYW0gKz0gb25lbmFuZF9idWZmZXJyYW1fb2Zmc2V0KG10ZCwgYXJlYSk7CiAKKwlpZiAoT05FTkFORF9DSEVDS19CWVRFX0FDQ0VTUyhjb3VudCkpIHsKKwkJdW5zaWduZWQgc2hvcnQgd29yZDsKKworCQkvKiBBbGlnbiB3aXRoIHdvcmQoMTYtYml0KSBzaXplICovCisJCWNvdW50LS07CisKKwkJLyogUmVhZCB3b3JkIGFuZCBzYXZlIGJ5dGUgKi8KKwkJd29yZCA9IHRoaXMtPnJlYWRfd29yZChidWZmZXJyYW0gKyBvZmZzZXQgKyBjb3VudCk7CisJCWJ1ZmZlcltjb3VudF0gPSAod29yZCAmIDB4ZmYpOworCX0KKwogCW1lbWNweShidWZmZXIsIGJ1ZmZlcnJhbSArIG9mZnNldCwgY291bnQpOwogCiAJcmV0dXJuIDA7CkBAIC0zOTksNiArNDE4LDE3IEBACiAKIAl0aGlzLT5tbWNvbnRyb2wobXRkLCBPTkVOQU5EX1NZU19DRkcxX1NZTkNfUkVBRCk7CiAKKwlpZiAoT05FTkFORF9DSEVDS19CWVRFX0FDQ0VTUyhjb3VudCkpIHsKKwkJdW5zaWduZWQgc2hvcnQgd29yZDsKKworCQkvKiBBbGlnbiB3aXRoIHdvcmQoMTYtYml0KSBzaXplICovCisJCWNvdW50LS07CisKKwkJLyogUmVhZCB3b3JkIGFuZCBzYXZlIGJ5dGUgKi8KKwkJd29yZCA9IHRoaXMtPnJlYWRfd29yZChidWZmZXJyYW0gKyBvZmZzZXQgKyBjb3VudCk7CisJCWJ1ZmZlcltjb3VudF0gPSAod29yZCAmIDB4ZmYpOworCX0KKwogCW1lbWNweShidWZmZXIsIGJ1ZmZlcnJhbSArIG9mZnNldCwgY291bnQpOwogCiAJdGhpcy0+bW1jb250cm9sKG10ZCwgMCk7CkBAIC00MjYsNiArNDU2LDIyIEBACiAKIAlidWZmZXJyYW0gKz0gb25lbmFuZF9idWZmZXJyYW1fb2Zmc2V0KG10ZCwgYXJlYSk7CiAKKwlpZiAoT05FTkFORF9DSEVDS19CWVRFX0FDQ0VTUyhjb3VudCkpIHsKKwkJdW5zaWduZWQgc2hvcnQgd29yZDsKKwkJaW50IGJ5dGVfb2Zmc2V0OworCisJCS8qIEFsaWduIHdpdGggd29yZCgxNi1iaXQpIHNpemUgKi8KKwkJY291bnQtLTsKKworCQkvKiBDYWxjdWxhdGUgYnl0ZSBhY2Nlc3Mgb2Zmc2V0ICovCisJCWJ5dGVfb2Zmc2V0ID0gb2Zmc2V0ICsgY291bnQ7CisKKwkJLyogUmVhZCB3b3JkIGFuZCBzYXZlIGJ5dGUgKi8KKwkJd29yZCA9IHRoaXMtPnJlYWRfd29yZChidWZmZXJyYW0gKyBieXRlX29mZnNldCk7CisJCXdvcmQgPSAod29yZCAmIH4weGZmKSB8IGJ1ZmZlcltjb3VudF07CisJCXRoaXMtPndyaXRlX3dvcmQod29yZCwgYnVmZmVycmFtICsgYnl0ZV9vZmZzZXQpOworCX0KKwogCW1lbWNweShidWZmZXJyYW0gKyBvZmZzZXQsIGJ1ZmZlciwgY291bnQpOwogCiAJcmV0dXJuIDA7CkBAIC01NDksMzEgKzU5NSwyOCBAQAogfQogCiAvKioKLSAqIG9uZW5hbmRfcmVhZF9lY2MgLSBbTVREIEludGVyZmFjZV0gUmVhZCBkYXRhIHdpdGggRUNDCisgKiBvbmVuYW5kX3JlYWQgLSBbTVREIEludGVyZmFjZV0gUmVhZCBkYXRhIGZyb20gZmxhc2gKICAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAcGFyYW0gZnJvbQkJb2Zmc2V0IHRvIHJlYWQgZnJvbQogICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKICAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKICAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHB1dCBkYXRhCi0gKiBAcGFyYW0gb29iX2J1ZglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlcgotICogQHBhcmFtIG9vYnNlbAlvb2Igc2VsZWN0aW9uIHN0cnVjdHVyZQogICoKLSAqIE9uZU5BTkQgcmVhZCB3aXRoIEVDQwotICovCi1zdGF0aWMgaW50IG9uZW5hbmRfcmVhZF9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwKLQl1X2NoYXIgKm9vYl9idWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKKyAqIFJlYWQgd2l0aCBlY2MKKyovCitzdGF0aWMgaW50IG9uZW5hbmRfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHJlYWQgPSAwLCBjb2x1bW47CiAJaW50IHRoaXNsZW47CiAJaW50IHJldCA9IDA7CiAKLQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAib25lbmFuZF9yZWFkX2VjYzogZnJvbSA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIGZyb20sIChpbnQpIGxlbik7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfcmVhZDogZnJvbSA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIGZyb20sIChpbnQpIGxlbik7CiAKIAkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCiAJaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF9yZWFkX2VjYzogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfcmVhZDogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJKnJldGxlbiA9IDA7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU4NCwxNCArNjI3LDE0IEBACiAJLyogVE9ETyBoYW5kbGluZyBvb2IgKi8KIAogCXdoaWxlIChyZWFkIDwgbGVuKSB7Ci0JCXRoaXNsZW4gPSBtaW5fdChpbnQsIG10ZC0+b29iYmxvY2ssIGxlbiAtIHJlYWQpOworCQl0aGlzbGVuID0gbWluX3QoaW50LCBtdGQtPndyaXRlc2l6ZSwgbGVuIC0gcmVhZCk7CiAKLQkJY29sdW1uID0gZnJvbSAmIChtdGQtPm9vYmJsb2NrIC0gMSk7Ci0JCWlmIChjb2x1bW4gKyB0aGlzbGVuID4gbXRkLT5vb2JibG9jaykKLQkJCXRoaXNsZW4gPSBtdGQtPm9vYmJsb2NrIC0gY29sdW1uOworCQljb2x1bW4gPSBmcm9tICYgKG10ZC0+d3JpdGVzaXplIC0gMSk7CisJCWlmIChjb2x1bW4gKyB0aGlzbGVuID4gbXRkLT53cml0ZXNpemUpCisJCQl0aGlzbGVuID0gbXRkLT53cml0ZXNpemUgLSBjb2x1bW47CiAKIAkJaWYgKCFvbmVuYW5kX2NoZWNrX2J1ZmZlcnJhbShtdGQsIGZyb20pKSB7Ci0JCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVBRCwgZnJvbSwgbXRkLT5vb2JibG9jayk7CisJCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVBRCwgZnJvbSwgbXRkLT53cml0ZXNpemUpOwogCiAJCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CiAJCQkvKiBGaXJzdCBjb3B5IGRhdGEgYW5kIGNoZWNrIHJldHVybiB2YWx1ZSBmb3IgRUNDIGhhbmRsaW5nICovCkBAIC02MDYsNyArNjQ5LDcgQEAKIAkJCWJyZWFrOwogCiAJCWlmIChyZXQpIHsKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3JlYWRfZWNjOiByZWFkIGZhaWxlZCA9ICVkXG4iLCByZXQpOworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfcmVhZDogcmVhZCBmYWlsZWQgPSAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTYyOCwyMyArNjcxLDcgQEAKIH0KIAogLyoqCi0gKiBvbmVuYW5kX3JlYWQgLSBbTVREIEludGVyZmFjZV0gTVREIGNvbXBhYmlsaXR5IGZ1bmN0aW9uIGZvciBvbmVuYW5kX3JlYWRfZWNjCi0gKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHBhcmFtIGZyb20JCW9mZnNldCB0byByZWFkIGZyb20KLSAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byByZWFkCi0gKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiByZWFkIGJ5dGVzCi0gKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQgZGF0YQotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIG9uZW5hbmRfcmVhZF9lY2Mgd2l0aCBvb2IgYnVmZmVyIGFuZCBvb2JzZWwgPSBOVUxMCi0qLwotc3RhdGljIGludCBvbmVuYW5kX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gb25lbmFuZF9yZWFkX2VjYyhtdGQsIGZyb20sIGxlbiwgcmV0bGVuLCBidWYsIE5VTEwsIE5VTEwpOwotfQotCi0vKioKLSAqIG9uZW5hbmRfcmVhZF9vb2IgLSBbTVREIEludGVyZmFjZV0gT25lTkFORCByZWFkIG91dC1vZi1iYW5kCisgKiBvbmVuYW5kX2RvX3JlYWRfb29iIC0gW01URCBJbnRlcmZhY2VdIE9uZU5BTkQgcmVhZCBvdXQtb2YtYmFuZAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSBmcm9tCQlvZmZzZXQgdG8gcmVhZCBmcm9tCiAgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZApAQCAtNjUzLDggKzY4MCw4IEBACiAgKgogICogT25lTkFORCByZWFkIG91dC1vZi1iYW5kIGRhdGEgZnJvbSB0aGUgc3BhcmUgYXJlYQogICovCi1zdGF0aWMgaW50IG9uZW5hbmRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK2ludCBvbmVuYW5kX2RvX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCWludCByZWFkID0gMCwgdGhpc2xlbiwgY29sdW1uOwpAQCAtNzA0LDcgKzczMSw3IEBACiAJCS8qIFJlYWQgbW9yZT8gKi8KIAkJaWYgKHJlYWQgPCBsZW4pIHsKIAkJCS8qIFBhZ2Ugc2l6ZSAqLwotCQkJZnJvbSArPSBtdGQtPm9vYmJsb2NrOworCQkJZnJvbSArPSBtdGQtPndyaXRlc2l6ZTsKIAkJCWNvbHVtbiA9IDA7CiAJCX0KIAl9CkBAIC03MTcsOCArNzQ0LDUzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBvbmVuYW5kX3JlYWRfb29iIC0gW01URCBJbnRlcmZhY2VdIE5BTkQgd3JpdGUgZGF0YSBhbmQvb3Igb3V0LW9mLWJhbmQKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZnJvbToJb2Zmc2V0IHRvIHJlYWQgZnJvbQorICogQG9wczoJb29iIG9wZXJhdGlvbiBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCBvbmVuYW5kX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOworCisJcmV0dXJuIG9uZW5hbmRfZG9fcmVhZF9vb2IobXRkLCBmcm9tICsgb3BzLT5vb2JvZmZzLCBvcHMtPmxlbiwKKwkJCQkgICAmb3BzLT5yZXRsZW4sIG9wcy0+b29iYnVmKTsKK30KKwogI2lmZGVmIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUKIC8qKgorICogb25lbmFuZF92ZXJpZnlfb29iIC0gW0dFTkVSSUNdIHZlcmlmeSB0aGUgb29iIGNvbnRlbnRzIGFmdGVyIGEgd3JpdGUKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byB2ZXJpZnkKKyAqIEBwYXJhbSB0bwkJb2Zmc2V0IHRvIHJlYWQgZnJvbQorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgYW5kIGNvbXBhcmUKKyAqCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF92ZXJpZnlfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgbG9mZl90IHRvLCBpbnQgbGVuKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJY2hhciAqcmVhZHAgPSB0aGlzLT5wYWdlX2J1ZjsKKwlpbnQgY29sdW1uID0gdG8gJiAobXRkLT5vb2JzaXplIC0gMSk7CisJaW50IHN0YXR1cywgaTsKKworCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRUFET09CLCB0bywgbXRkLT5vb2JzaXplKTsKKwlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCB0bywgMCk7CisJc3RhdHVzID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwl0aGlzLT5yZWFkX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIHJlYWRwLCBjb2x1bW4sIGxlbik7CisKKwlmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJaWYgKGJ1ZltpXSAhPSAweEZGICYmIGJ1ZltpXSAhPSByZWFkcFtpXSkKKwkJCXJldHVybiAtRUJBRE1TRzsKKworCXJldHVybiAwOworfQorCisvKioKICAqIG9uZW5hbmRfdmVyaWZ5X3BhZ2UgLSBbR0VORVJJQ10gdmVyaWZ5IHRoZSBjaGlwIGNvbnRlbnRzIGFmdGVyIGEgd3JpdGUKICAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byB2ZXJpZnkKQEAgLTczMSw3ICs4MDMsNyBAQAogCXZvaWQgX19pb21lbSAqZGF0YXJhbTAsICpkYXRhcmFtMTsKIAlpbnQgcmV0ID0gMDsKIAotCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRUFELCBhZGRyLCBtdGQtPm9vYmJsb2NrKTsKKwl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVBRCwgYWRkciwgbXRkLT53cml0ZXNpemUpOwogCiAJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcpOwogCWlmIChyZXQpCkBAIC03NDEsNTMgKzgxMyw1MSBAQAogCiAJLyogQ2hlY2ssIGlmIHRoZSB0d28gZGF0YXJhbSBhcmVhcyBhcmUgc2FtZSAqLwogCWRhdGFyYW0wID0gdGhpcy0+YmFzZSArIE9ORU5BTkRfREFUQVJBTTsKLQlkYXRhcmFtMSA9IGRhdGFyYW0wICsgbXRkLT5vb2JibG9jazsKKwlkYXRhcmFtMSA9IGRhdGFyYW0wICsgbXRkLT53cml0ZXNpemU7CiAKLQlpZiAobWVtY21wKGRhdGFyYW0wLCBkYXRhcmFtMSwgbXRkLT5vb2JibG9jaykpCisJaWYgKG1lbWNtcChkYXRhcmFtMCwgZGF0YXJhbTEsIG10ZC0+d3JpdGVzaXplKSkKIAkJcmV0dXJuIC1FQkFETVNHOwogCiAJcmV0dXJuIDA7CiB9CiAjZWxzZQogI2RlZmluZSBvbmVuYW5kX3ZlcmlmeV9wYWdlKC4uLikJKDApCisjZGVmaW5lIG9uZW5hbmRfdmVyaWZ5X29vYiguLi4pCQkoMCkKICNlbmRpZgogCi0jZGVmaW5lIE5PVEFMSUdORUQoeCkJKCh4ICYgKG10ZC0+b29iYmxvY2sgLSAxKSkgIT0gMCkKKyNkZWZpbmUgTk9UQUxJR05FRCh4KQkoKHggJiAobXRkLT53cml0ZXNpemUgLSAxKSkgIT0gMCkKIAogLyoqCi0gKiBvbmVuYW5kX3dyaXRlX2VjYyAtIFtNVEQgSW50ZXJmYWNlXSBPbmVOQU5EIHdyaXRlIHdpdGggRUNDCisgKiBvbmVuYW5kX3dyaXRlIC0gW01URCBJbnRlcmZhY2VdIHdyaXRlIGJ1ZmZlciB0byBGTEFTSAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSB0bwkJb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKICAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKICAqIEBwYXJhbSBidWYJCXRoZSBkYXRhIHRvIHdyaXRlCi0gKiBAcGFyYW0gZWNjYnVmCWZpbGVzeXN0ZW0gc3VwcGxpZWQgb29iIGRhdGEgYnVmZmVyCi0gKiBAcGFyYW0gb29ic2VsCW9vYiBzZWxlY3Rpb24gc3RydWN0dXJlCiAgKgotICogT25lTkFORCB3cml0ZSB3aXRoIEVDQworICogV3JpdGUgd2l0aCBFQ0MKICAqLwotc3RhdGljIGludCBvbmVuYW5kX3dyaXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZiwKLQl1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQorc3RhdGljIGludCBvbmVuYW5kX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCisJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHdyaXR0ZW4gPSAwOwogCWludCByZXQgPSAwOwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfd3JpdGVfZWNjOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX3dyaXRlOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOwogCiAJLyogSW5pdGlhbGl6ZSByZXRsZW4sIGluIGNhc2Ugb2YgZWFybHkgZXhpdCAqLwogCSpyZXRsZW4gPSAwOwogCiAJLyogRG8gbm90IGFsbG93IHdyaXRlcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KIAlpZiAodW5saWtlbHkoKHRvICsgbGVuKSA+IG10ZC0+c2l6ZSkpIHsKLQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGVfZWNjOiBBdHRlbXB0IHdyaXRlIHRvIHBhc3QgZW5kIG9mIGRldmljZVxuIik7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlOiBBdHRlbXB0IHdyaXRlIHRvIHBhc3QgZW5kIG9mIGRldmljZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIFJlamVjdCB3cml0ZXMsIHdoaWNoIGFyZSBub3QgcGFnZSBhbGlnbmVkICovCiAgICAgICAgIGlmICh1bmxpa2VseShOT1RBTElHTkVEKHRvKSkgfHwgdW5saWtlbHkoTk9UQUxJR05FRChsZW4pKSkgewotICAgICAgICAgICAgICAgIERFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlX2VjYzogQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOworICAgICAgICAgICAgICAgIERFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlOiBBdHRlbXB0IHRvIHdyaXRlIG5vdCBwYWdlIGFsaWduZWQgZGF0YVxuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgICAgIH0KIApAQCAtNzk2LDIwICs4NjYsMjAgQEAKIAogCS8qIExvb3AgdW50aWwgYWxsIGRhdGEgd3JpdGUgKi8KIAl3aGlsZSAod3JpdHRlbiA8IGxlbikgewotCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgbXRkLT5vb2JibG9jaywgbGVuIC0gd3JpdHRlbik7CisJCWludCB0aGlzbGVuID0gbWluX3QoaW50LCBtdGQtPndyaXRlc2l6ZSwgbGVuIC0gd3JpdHRlbik7CiAKLQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0JVRkZFUlJBTSwgdG8sIG10ZC0+b29iYmxvY2spOworCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfQlVGRkVSUkFNLCB0bywgbXRkLT53cml0ZXNpemUpOwogCiAJCXRoaXMtPndyaXRlX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfREFUQVJBTSwgYnVmLCAwLCB0aGlzbGVuKTsKIAkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9TUEFSRVJBTSwgZmZjaGFycywgMCwgbXRkLT5vb2JzaXplKTsKIAotCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUFJPRywgdG8sIG10ZC0+b29iYmxvY2spOworCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUFJPRywgdG8sIG10ZC0+d3JpdGVzaXplKTsKIAogCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCB0bywgMSk7CiAKIAkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1dSSVRJTkcpOwogCQlpZiAocmV0KSB7Ci0JCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZV9lY2M6IHdyaXRlIGZpbGFlZCAlZFxuIiwgcmV0KTsKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlOiB3cml0ZSBmaWxhZWQgJWRcbiIsIHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC04MTgsNyArODg4LDcgQEAKIAkJLyogT25seSBjaGVjayB2ZXJpZnkgd3JpdGUgdHVybiBvbiAqLwogCQlyZXQgPSBvbmVuYW5kX3ZlcmlmeV9wYWdlKG10ZCwgKHVfY2hhciAqKSBidWYsIHRvKTsKIAkJaWYgKHJldCkgewotCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGVfZWNjOiB2ZXJpZnkgZmFpbGVkICVkXG4iLCByZXQpOworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGU6IHZlcmlmeSBmYWlsZWQgJWRcbiIsIHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC04MzksMjQgKzkwOSw3IEBACiB9CiAKIC8qKgotICogb25lbmFuZF93cml0ZSAtIFtNVEQgSW50ZXJmYWNlXSBjb21wYWJpbGl0eSBmdW5jdGlvbiBmb3Igb25lbmFuZF93cml0ZV9lY2MKLSAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAcGFyYW0gdG8JCW9mZnNldCB0byB3cml0ZSB0bwotICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCi0gKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAcGFyYW0gYnVmCQl0aGUgZGF0YSB0byB3cml0ZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIG9uZW5hbmRfd3JpdGVfZWNjCi0gKiB3aXRoIG9vYiBidWZmZXIgYW5kIG9vYnNlbCA9IE5VTEwKLSAqLwotc3RhdGljIGludCBvbmVuYW5kX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0Jc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQotewotCXJldHVybiBvbmVuYW5kX3dyaXRlX2VjYyhtdGQsIHRvLCBsZW4sIHJldGxlbiwgYnVmLCBOVUxMLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBvbmVuYW5kX3dyaXRlX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBPbmVOQU5EIHdyaXRlIG91dC1vZi1iYW5kCisgKiBvbmVuYW5kX2RvX3dyaXRlX29vYiAtIFtJbnRlcm5hbF0gT25lTkFORCB3cml0ZSBvdXQtb2YtYmFuZAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSB0bwkJb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKQEAgLTg2NSwxMSArOTE4LDExIEBACiAgKgogICogT25lTkFORCB3cml0ZSBvdXQtb2YtYmFuZAogICovCi1zdGF0aWMgaW50IG9uZW5hbmRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0Jc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQorc3RhdGljIGludCBvbmVuYW5kX2RvX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAorCQkJCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCWludCBjb2x1bW4sIHN0YXR1czsKKwlpbnQgY29sdW1uLCByZXQgPSAwOwogCWludCB3cml0dGVuID0gMDsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX3dyaXRlX29vYjogdG8gPSAweCUwOHgsIGxlbiA9ICVpXG4iLCAodW5zaWduZWQgaW50KSB0bywgKGludCkgbGVuKTsKQEAgLTg5NCwxNiArOTQ3LDI3IEBACiAKIAkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0JVRkZFUlJBTSwgdG8sIG10ZC0+b29ic2l6ZSk7CiAKLQkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9TUEFSRVJBTSwgZmZjaGFycywgMCwgbXRkLT5vb2JzaXplKTsKLQkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9TUEFSRVJBTSwgYnVmLCBjb2x1bW4sIHRoaXNsZW4pOworCQkvKiBXZSBzZW5kIGRhdGEgdG8gc3BhcmUgcmFtIHdpdGggb29ic2l6ZQorCQkgKiB0byBwcmV2ZW50IGJ5dGUgYWNjZXNzICovCisJCW1lbXNldCh0aGlzLT5wYWdlX2J1ZiwgMHhmZiwgbXRkLT5vb2JzaXplKTsKKwkJbWVtY3B5KHRoaXMtPnBhZ2VfYnVmICsgY29sdW1uLCBidWYsIHRoaXNsZW4pOworCQl0aGlzLT53cml0ZV9idWZmZXJyYW0obXRkLCBPTkVOQU5EX1NQQVJFUkFNLCB0aGlzLT5wYWdlX2J1ZiwgMCwgbXRkLT5vb2JzaXplKTsKIAogCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUFJPR09PQiwgdG8sIG10ZC0+b29ic2l6ZSk7CiAKIAkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgdG8sIDApOwogCi0JCXN0YXR1cyA9IHRoaXMtPndhaXQobXRkLCBGTF9XUklUSU5HKTsKLQkJaWYgKHN0YXR1cykKKwkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1dSSVRJTkcpOworCQlpZiAocmV0KSB7CisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZV9vb2I6IHdyaXRlIGZpbGFlZCAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gb25lbmFuZF92ZXJpZnlfb29iKG10ZCwgYnVmLCB0bywgdGhpc2xlbik7CisJCWlmIChyZXQpIHsKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlX29vYjogdmVyaWZ5IGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CiAKIAkJd3JpdHRlbiArPSB0aGlzbGVuOwogCkBAIC05MjAsMTQ1ICs5ODQsMjIgQEAKIAogCSpyZXRsZW4gPSB3cml0dGVuOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiBvbmVuYW5kX3dyaXRldl9lY2MgLSBbTVREIEludGVyZmFjZV0gd3JpdGUgd2l0aCBpb3ZlYyB3aXRoIGVjYwotICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBwYXJhbSB2ZWNzCQl0aGUgaW92ZWN0b3JzIHRvIHdyaXRlCi0gKiBAcGFyYW0gY291bnQJCW51bWJlciBvZiB2ZWN0b3JzCi0gKiBAcGFyYW0gdG8JCW9mZnNldCB0byB3cml0ZSB0bwotICogQHBhcmFtIHJldGxlbglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcwotICogQHBhcmFtIGVjY2J1ZglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlcgotICogQHBhcmFtIG9vYnNlbAlvb2Igc2VsZWN0aW9uIHN0cnVjdHVyZQotICoKLSAqIE9uZU5BTkQgd3JpdGUgd2l0aCBpb3ZlYyB3aXRoIGVjYworICogb25lbmFuZF93cml0ZV9vb2IgLSBbTVREIEludGVyZmFjZV0gTkFORCB3cml0ZSBkYXRhIGFuZC9vciBvdXQtb2YtYmFuZAorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCisgKiBAb3BzOglvb2Igb3BlcmF0aW9uIGRlc2NyaXB0aW9uIHN0cnVjdHVyZQogICovCi1zdGF0aWMgaW50IG9uZW5hbmRfd3JpdGV2X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbiwKLQl1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQorc3RhdGljIGludCBvbmVuYW5kX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAorCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKLQlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXVuc2lnbmVkIGNoYXIgKnBidWY7Ci0Jc2l6ZV90IHRvdGFsX2xlbiwgbGVuOwotCWludCBpLCB3cml0dGVuID0gMDsKLQlpbnQgcmV0ID0gMDsKKwlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOwogCi0JLyogUHJlc2V0IHdyaXR0ZW4gbGVuIGZvciBlYXJseSBleGl0ICovCi0JKnJldGxlbiA9IDA7Ci0KLQkvKiBDYWxjdWxhdGUgdG90YWwgbGVuZ3RoIG9mIGRhdGEgKi8KLQl0b3RhbF9sZW4gPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCQl0b3RhbF9sZW4gKz0gdmVjc1tpXS5pb3ZfbGVuOwotCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfd3JpdGV2X2VjYzogdG8gPSAweCUwOHgsIGxlbiA9ICVpLCBjb3VudCA9ICVsZFxuIiwgKHVuc2lnbmVkIGludCkgdG8sICh1bnNpZ25lZCBpbnQpIHRvdGFsX2xlbiwgY291bnQpOwotCi0JLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAodW5saWtlbHkoKHRvICsgdG90YWxfbGVuKSA+IG10ZC0+c2l6ZSkpIHsKLQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGV2X2VjYzogQXR0ZW1wdGVkIHdyaXRlIHBhc3QgZW5kIG9mIGRldmljZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFJlamVjdCB3cml0ZXMsIHdoaWNoIGFyZSBub3QgcGFnZSBhbGlnbmVkICovCi0gICAgICAgIGlmICh1bmxpa2VseShOT1RBTElHTkVEKHRvKSkgfHwgdW5saWtlbHkoTk9UQUxJR05FRCh0b3RhbF9sZW4pKSkgewotICAgICAgICAgICAgICAgIERFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRldl9lY2M6IEF0dGVtcHQgdG8gd3JpdGUgbm90IHBhZ2UgYWxpZ25lZCBkYXRhXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0Jb25lbmFuZF9nZXRfZGV2aWNlKG10ZCwgRkxfV1JJVElORyk7Ci0KLQkvKiBUT0RPIGhhbmRsaW5nIG9vYiAqLwotCi0JLyogTG9vcCB1bnRpbCBhbGwga2V2ZSdzIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiAqLwotCWxlbiA9IDA7Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXBidWYgPSB0aGlzLT5wYWdlX2J1ZjsKLQkJLyoKLQkJICogSWYgdGhlIGdpdmVuIHR1cGxlIGlzID49IHBhZ2VzaXplIHRoZW4KLQkJICogd3JpdGUgaXQgb3V0IGZyb20gdGhlIGlvdgotCQkgKi8KLQkJaWYgKCh2ZWNzLT5pb3ZfbGVuIC0gbGVuKSA+PSBtdGQtPm9vYmJsb2NrKSB7Ci0JCQlwYnVmID0gdmVjcy0+aW92X2Jhc2UgKyBsZW47Ci0KLQkJCWxlbiArPSBtdGQtPm9vYmJsb2NrOwotCi0JCQkvKiBDaGVjaywgaWYgd2UgaGF2ZSB0byBzd2l0Y2ggdG8gdGhlIG5leHQgdHVwbGUgKi8KLQkJCWlmIChsZW4gPj0gKGludCkgdmVjcy0+aW92X2xlbikgewotCQkJCXZlY3MrKzsKLQkJCQlsZW4gPSAwOwotCQkJCWNvdW50LS07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpbnQgY250ID0gMCwgdGhpc2xlbjsKLQkJCXdoaWxlIChjbnQgPCBtdGQtPm9vYmJsb2NrKSB7Ci0JCQkJdGhpc2xlbiA9IG1pbl90KGludCwgbXRkLT5vb2JibG9jayAtIGNudCwgdmVjcy0+aW92X2xlbiAtIGxlbik7Ci0JCQkJbWVtY3B5KHRoaXMtPnBhZ2VfYnVmICsgY250LCB2ZWNzLT5pb3ZfYmFzZSArIGxlbiwgdGhpc2xlbik7Ci0JCQkJY250ICs9IHRoaXNsZW47Ci0JCQkJbGVuICs9IHRoaXNsZW47Ci0KLQkJCQkvKiBDaGVjaywgaWYgd2UgaGF2ZSB0byBzd2l0Y2ggdG8gdGhlIG5leHQgdHVwbGUgKi8KLQkJCQlpZiAobGVuID49IChpbnQpIHZlY3MtPmlvdl9sZW4pIHsKLQkJCQkJdmVjcysrOwotCQkJCQlsZW4gPSAwOwotCQkJCQljb3VudC0tOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9CVUZGRVJSQU0sIHRvLCBtdGQtPm9vYmJsb2NrKTsKLQotCQl0aGlzLT53cml0ZV9idWZmZXJyYW0obXRkLCBPTkVOQU5EX0RBVEFSQU0sIHBidWYsIDAsIG10ZC0+b29iYmxvY2spOwotCQl0aGlzLT53cml0ZV9idWZmZXJyYW0obXRkLCBPTkVOQU5EX1NQQVJFUkFNLCBmZmNoYXJzLCAwLCBtdGQtPm9vYnNpemUpOwotCi0JCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9QUk9HLCB0bywgbXRkLT5vb2JibG9jayk7Ci0KLQkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgdG8sIDEpOwotCi0JCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9XUklUSU5HKTsKLQkJaWYgKHJldCkgewotCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGV2X2VjYzogd3JpdGUgZmFpbGVkICVkXG4iLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCi0JCS8qIE9ubHkgY2hlY2sgdmVyaWZ5IHdyaXRlIHR1cm4gb24gKi8KLQkJcmV0ID0gb25lbmFuZF92ZXJpZnlfcGFnZShtdGQsICh1X2NoYXIgKikgcGJ1ZiwgdG8pOwotCQlpZiAocmV0KSB7Ci0JCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZXZfZWNjOiB2ZXJpZnkgZmFpbGVkICVkXG4iLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQl3cml0dGVuICs9IG10ZC0+b29iYmxvY2s7Ci0KLQkJdG8gKz0gbXRkLT5vb2JibG9jazsKLQl9Ci0KLW91dDoKLQkvKiBEZXNlbGVjdCBhbmQgd2FrdCB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCi0Jb25lbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwotCi0JKnJldGxlbiA9IHdyaXR0ZW47Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBvbmVuYW5kX3dyaXRldiAtIFtNVEQgSW50ZXJmYWNlXSBjb21wYWJpbHR5IGZ1bmN0aW9uIGZvciBvbmVuYW5kX3dyaXRldl9lY2MKLSAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAcGFyYW0gdmVjcwkJdGhlIGlvdmVjdG9ycyB0byB3cml0ZQotICogQHBhcmFtIGNvdW50CQludW1iZXIgb2YgdmVjdG9ycwotICogQHBhcmFtIHRvCQlvZmZzZXQgdG8gd3JpdGUgdG8KLSAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKLSAqCi0gKiBPbmVOQU5EIHdyaXRlIHdpdGgga3ZlYy4gVGhpcyBqdXN0IGNhbGxzIHRoZSBlY2MgZnVuY3Rpb24KLSAqLwotc3RhdGljIGludCBvbmVuYW5kX3dyaXRldihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbikKLXsKLQlyZXR1cm4gb25lbmFuZF93cml0ZXZfZWNjKG10ZCwgdmVjcywgY291bnQsIHRvLCByZXRsZW4sIE5VTEwsIE5VTEwpOworCXJldHVybiBvbmVuYW5kX2RvX3dyaXRlX29vYihtdGQsIHRvICsgb3BzLT5vb2JvZmZzLCBvcHMtPmxlbiwKKwkJCQkgICAgJm9wcy0+cmV0bGVuLCBvcHMtPm9vYmJ1Zik7CiB9CiAKIC8qKgpAQCAtMTIyNyw3ICsxMTY4LDcgQEAKIAogICAgICAgICAvKiBXZSB3cml0ZSB0d28gYnl0ZXMsIHNvIHdlIGRvbnQgaGF2ZSB0byBtZXNzIHdpdGggMTYgYml0IGFjY2VzcyAqLwogICAgICAgICBvZnMgKz0gbXRkLT5vb2JzaXplICsgKGJibS0+YmFkYmxvY2twb3MgJiB+MHgwMSk7Ci0gICAgICAgIHJldHVybiBtdGQtPndyaXRlX29vYihtdGQsIG9mcyAsIDIsICZyZXRsZW4sIGJ1Zik7CisgICAgICAgIHJldHVybiBvbmVuYW5kX2RvX3dyaXRlX29vYihtdGQsIG9mcyAsIDIsICZyZXRsZW4sIGJ1Zik7CiB9CiAKIC8qKgpAQCAtMTMyNCw2ICsxMjY1LDMwNCBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX01URF9PTkVOQU5EX09UUAorCisvKiBJbnRlcmFsIE9UUCBvcGVyYXRpb24gKi8KK3R5cGVkZWYgaW50ICgqb3RwX29wX3QpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZm9ybSwgc2l6ZV90IGxlbiwKKwkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKKworLyoqCisgKiBkb19vdHBfcmVhZCAtIFtERUZBVUxUXSBSZWFkIE9UUCBibG9jayBhcmVhCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGZyb20JCVRoZSBvZmZzZXQgdG8gcmVhZAorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKKyAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWRieXRlcworICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKgorICogUmVhZCBPVFAgYmxvY2sgYXJlYS4KKyAqLworc3RhdGljIGludCBkb19vdHBfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCByZXQ7CisKKwkvKiBFbnRlciBPVFAgYWNjZXNzIG1vZGUgKi8KKwl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfT1RQX0FDQ0VTUywgMCwgMCk7CisJdGhpcy0+d2FpdChtdGQsIEZMX09UUElORyk7CisKKwlyZXQgPSBtdGQtPnJlYWQobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmKTsKKworCS8qIEV4aXQgT1RQIGFjY2VzcyBtb2RlICovCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFU0VULCAwLCAwKTsKKwl0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkb19vdHBfd3JpdGUgLSBbREVGQVVMVF0gV3JpdGUgT1RQIGJsb2NrIGFyZWEKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gZnJvbQkJVGhlIG9mZnNldCB0byB3cml0ZQorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisgKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0ZSBieXRlcworICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKgorICogV3JpdGUgT1RQIGJsb2NrIGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgZG9fb3RwX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgY2hhciAqcGJ1ZiA9IGJ1ZjsKKwlpbnQgcmV0OworCisJLyogRm9yY2UgYnVmZmVyIHBhZ2UgYWxpZ25lZCAqLworCWlmIChsZW4gPCBtdGQtPndyaXRlc2l6ZSkgeworCQltZW1jcHkodGhpcy0+cGFnZV9idWYsIGJ1ZiwgbGVuKTsKKwkJbWVtc2V0KHRoaXMtPnBhZ2VfYnVmICsgbGVuLCAweGZmLCBtdGQtPndyaXRlc2l6ZSAtIGxlbik7CisJCXBidWYgPSB0aGlzLT5wYWdlX2J1ZjsKKwkJbGVuID0gbXRkLT53cml0ZXNpemU7CisJfQorCisJLyogRW50ZXIgT1RQIGFjY2VzcyBtb2RlICovCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX09UUF9BQ0NFU1MsIDAsIDApOworCXRoaXMtPndhaXQobXRkLCBGTF9PVFBJTkcpOworCisJcmV0ID0gbXRkLT53cml0ZShtdGQsIGZyb20sIGxlbiwgcmV0bGVuLCBwYnVmKTsKKworCS8qIEV4aXQgT1RQIGFjY2VzcyBtb2RlICovCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFU0VULCAwLCAwKTsKKwl0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkb19vdHBfbG9jayAtIFtERUZBVUxUXSBMb2NrIE9UUCBibG9jayBhcmVhCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGZyb20JCVRoZSBvZmZzZXQgdG8gbG9jaworICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIGxvY2sKKyAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIGxvY2sgYnl0ZXMKKyAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHB1dC9nZXQgZGF0YQorICoKKyAqIExvY2sgT1RQIGJsb2NrIGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgZG9fb3RwX2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgcmV0OworCisJLyogRW50ZXIgT1RQIGFjY2VzcyBtb2RlICovCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX09UUF9BQ0NFU1MsIDAsIDApOworCXRoaXMtPndhaXQobXRkLCBGTF9PVFBJTkcpOworCisJcmV0ID0gb25lbmFuZF9kb193cml0ZV9vb2IobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmKTsKKworCS8qIEV4aXQgT1RQIGFjY2VzcyBtb2RlICovCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFU0VULCAwLCAwKTsKKwl0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBvbmVuYW5kX290cF93YWxrIC0gW0RFRkFVTFRdIEhhbmRsZSBPVFAgb3BlcmF0aW9uCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGZyb20JCVRoZSBvZmZzZXQgdG8gcmVhZC93cml0ZQorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQvd3JpdGUKKyAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKKyAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHB1dC9nZXQgZGF0YQorICogQHBhcmFtIGFjdGlvbglkbyBnaXZlbiBhY3Rpb24KKyAqIEBwYXJhbSBtb2RlCQlzcGVjaWZ5IHVzZXIgYW5kIGZhY3RvcnkKKyAqCisgKiBIYW5kbGUgT1RQIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX290cF93YWxrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwKKwkJCW90cF9vcF90IGFjdGlvbiwgaW50IG1vZGUpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgb3RwX3BhZ2VzOworCWludCBkZW5zaXR5OworCWludCByZXQgPSAwOworCisJKnJldGxlbiA9IDA7CisKKwlkZW5zaXR5ID0gdGhpcy0+ZGV2aWNlX2lkID4+IE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfU0hJRlQ7CisJaWYgKGRlbnNpdHkgPCBPTkVOQU5EX0RFVklDRV9ERU5TSVRZXzUxMk1iKQorCQlvdHBfcGFnZXMgPSAyMDsKKwllbHNlCisJCW90cF9wYWdlcyA9IDEwOworCisJaWYgKG1vZGUgPT0gTVREX09UUF9GQUNUT1JZKSB7CisJCWZyb20gKz0gbXRkLT53cml0ZXNpemUgKiBvdHBfcGFnZXM7CisJCW90cF9wYWdlcyA9IDY0IC0gb3RwX3BhZ2VzOworCX0KKworCS8qIENoZWNrIFVzZXIvRmFjdG9yeSBib3VuZGFyeSAqLworCWlmICgoKG10ZC0+d3JpdGVzaXplICogb3RwX3BhZ2VzKSAtIChmcm9tICsgbGVuKSkgPCAwKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChsZW4gPiAwICYmIG90cF9wYWdlcyA+IDApIHsKKwkJaWYgKCFhY3Rpb24pIHsJLyogT1RQIEluZm8gZnVuY3Rpb25zICovCisJCQlzdHJ1Y3Qgb3RwX2luZm8gKm90cGluZm87CisKKwkJCWxlbiAtPSBzaXplb2Yoc3RydWN0IG90cF9pbmZvKTsKKwkJCWlmIChsZW4gPD0gMCkKKwkJCQlyZXR1cm4gLUVOT1NQQzsKKworCQkJb3RwaW5mbyA9IChzdHJ1Y3Qgb3RwX2luZm8gKikgYnVmOworCQkJb3RwaW5mby0+c3RhcnQgPSBmcm9tOworCQkJb3RwaW5mby0+bGVuZ3RoID0gbXRkLT53cml0ZXNpemU7CisJCQlvdHBpbmZvLT5sb2NrZWQgPSAwOworCisJCQlmcm9tICs9IG10ZC0+d3JpdGVzaXplOworCQkJYnVmICs9IHNpemVvZihzdHJ1Y3Qgb3RwX2luZm8pOworCQkJKnJldGxlbiArPSBzaXplb2Yoc3RydWN0IG90cF9pbmZvKTsKKwkJfSBlbHNlIHsKKwkJCXNpemVfdCB0bXBfcmV0bGVuOworCQkJaW50IHNpemUgPSBsZW47CisKKwkJCXJldCA9IGFjdGlvbihtdGQsIGZyb20sIGxlbiwgJnRtcF9yZXRsZW4sIGJ1Zik7CisKKwkJCWJ1ZiArPSBzaXplOworCQkJbGVuIC09IHNpemU7CisJCQkqcmV0bGVuICs9IHNpemU7CisKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJb3RwX3BhZ2VzLS07CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb25lbmFuZF9nZXRfZmFjdF9wcm90X2luZm8gLSBbTVREIEludGVyZmFjZV0gUmVhZCBmYWN0b3J5IE9UUCBpbmZvCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICoKKyAqIFJlYWQgZmFjdG9yeSBPVFAgaW5mby4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX2dldF9mYWN0X3Byb3RfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCXN0cnVjdCBvdHBfaW5mbyAqYnVmLCBzaXplX3QgbGVuKQoreworCXNpemVfdCByZXRsZW47CisJaW50IHJldDsKKworCXJldCA9IG9uZW5hbmRfb3RwX3dhbGsobXRkLCAwLCBsZW4sICZyZXRsZW4sICh1X2NoYXIgKikgYnVmLCBOVUxMLCBNVERfT1RQX0ZBQ1RPUlkpOworCisJcmV0dXJuIHJldCA/IDogcmV0bGVuOworfQorCisvKioKKyAqIG9uZW5hbmRfcmVhZF9mYWN0X3Byb3RfcmVnIC0gW01URCBJbnRlcmZhY2VdIFJlYWQgZmFjdG9yeSBPVFAgYXJlYQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBmcm9tCQlUaGUgb2Zmc2V0IHRvIHJlYWQKKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byByZWFkCisgKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiByZWFkIGJ5dGVzCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQvZ2V0IGRhdGEKKyAqCisgKiBSZWFkIGZhY3RvcnkgT1RQIGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9yZWFkX2ZhY3RfcHJvdF9yZWcoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXJldHVybiBvbmVuYW5kX290cF93YWxrKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1ZiwgZG9fb3RwX3JlYWQsIE1URF9PVFBfRkFDVE9SWSk7Cit9CisKKy8qKgorICogb25lbmFuZF9nZXRfdXNlcl9wcm90X2luZm8gLSBbTVREIEludGVyZmFjZV0gUmVhZCB1c2VyIE9UUCBpbmZvCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICoKKyAqIFJlYWQgdXNlciBPVFAgaW5mby4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX2dldF91c2VyX3Byb3RfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCXN0cnVjdCBvdHBfaW5mbyAqYnVmLCBzaXplX3QgbGVuKQoreworCXNpemVfdCByZXRsZW47CisJaW50IHJldDsKKworCXJldCA9IG9uZW5hbmRfb3RwX3dhbGsobXRkLCAwLCBsZW4sICZyZXRsZW4sICh1X2NoYXIgKikgYnVmLCBOVUxMLCBNVERfT1RQX1VTRVIpOworCisJcmV0dXJuIHJldCA/IDogcmV0bGVuOworfQorCisvKioKKyAqIG9uZW5hbmRfcmVhZF91c2VyX3Byb3RfcmVnIC0gW01URCBJbnRlcmZhY2VdIFJlYWQgdXNlciBPVFAgYXJlYQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBmcm9tCQlUaGUgb2Zmc2V0IHRvIHJlYWQKKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byByZWFkCisgKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiByZWFkIGJ5dGVzCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQvZ2V0IGRhdGEKKyAqCisgKiBSZWFkIHVzZXIgT1RQIGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9yZWFkX3VzZXJfcHJvdF9yZWcoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXJldHVybiBvbmVuYW5kX290cF93YWxrKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1ZiwgZG9fb3RwX3JlYWQsIE1URF9PVFBfVVNFUik7Cit9CisKKy8qKgorICogb25lbmFuZF93cml0ZV91c2VyX3Byb3RfcmVnIC0gW01URCBJbnRlcmZhY2VdIFdyaXRlIHVzZXIgT1RQIGFyZWEKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gZnJvbQkJVGhlIG9mZnNldCB0byB3cml0ZQorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisgKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0ZSBieXRlcworICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKgorICogV3JpdGUgdXNlciBPVFAgYXJlYS4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX3dyaXRlX3VzZXJfcHJvdF9yZWcoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXJldHVybiBvbmVuYW5kX290cF93YWxrKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1ZiwgZG9fb3RwX3dyaXRlLCBNVERfT1RQX1VTRVIpOworfQorCisvKioKKyAqIG9uZW5hbmRfbG9ja191c2VyX3Byb3RfcmVnIC0gW01URCBJbnRlcmZhY2VdIExvY2sgdXNlciBPVFAgYXJlYQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBmcm9tCQlUaGUgb2Zmc2V0IHRvIGxvY2sKKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byB1bmxvY2sKKyAqCisgKiBXcml0ZSBsb2NrIG1hcmsgb24gc3BhcmUgYXJlYSBpbiBwYWdlIDAgaW4gT1RQIGJsb2NrCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9sb2NrX3VzZXJfcHJvdF9yZWcoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyIG9vYl9idWZbNjRdOworCXNpemVfdCByZXRsZW47CisJaW50IHJldDsKKworCW1lbXNldChvb2JfYnVmLCAweGZmLCBtdGQtPm9vYnNpemUpOworCS8qCisJICogTm90ZTogT1RQIGxvY2sgb3BlcmF0aW9uCisJICogICAgICAgT1RQIGJsb2NrIDogMHhYWEZDCisJICogICAgICAgMXN0IGJsb2NrIDogMHhYWEYzIChJZiBjaGlwIHN1cHBvcnQpCisJICogICAgICAgQm90aCAgICAgIDogMHhYWEYwIChJZiBjaGlwIHN1cHBvcnQpCisJICovCisJb29iX2J1ZltPTkVOQU5EX09UUF9MT0NLX09GRlNFVF0gPSAweEZDOworCisJLyoKKwkgKiBXcml0ZSBsb2NrIG1hcmsgdG8gOHRoIHdvcmQgb2Ygc2VjdG9yMCBvZiBwYWdlMCBvZiB0aGUgc3BhcmUwLgorCSAqIFdlIHdyaXRlIDE2IGJ5dGVzIHNwYXJlIGFyZWEgaW5zdGVhZCBvZiAyIGJ5dGVzLgorCSAqLworCWZyb20gPSAwOworCWxlbiA9IDE2OworCisJcmV0ID0gb25lbmFuZF9vdHBfd2FsayhtdGQsIGZyb20sIGxlbiwgJnJldGxlbiwgb29iX2J1ZiwgZG9fb3RwX2xvY2ssIE1URF9PVFBfVVNFUik7CisKKwlyZXR1cm4gcmV0ID8gOiByZXRsZW47Cit9CisjZW5kaWYJLyogQ09ORklHX01URF9PTkVOQU5EX09UUCAqLworCiAvKioKICAqIG9uZW5hbmRfcHJpbnRfZGV2aWNlX2luZm8gLSBQcmludCBkZXZpY2UgSUQKICAqIEBwYXJhbSBkZXZpY2UgICAgICAgIGRldmljZSBJRApAQCAtMTQyMywxNSArMTY2MiwxNSBAQAogCiAJLyogT25lTkFORCBwYWdlIHNpemUgJiBibG9jayBzaXplICovCiAJLyogVGhlIGRhdGEgYnVmZmVyIHNpemUgaXMgZXF1YWwgdG8gcGFnZSBzaXplICovCi0JbXRkLT5vb2JibG9jayA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfREFUQV9CVUZGRVJfU0laRSk7Ci0JbXRkLT5vb2JzaXplID0gbXRkLT5vb2JibG9jayA+PiA1OworCW10ZC0+d3JpdGVzaXplID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19EQVRBX0JVRkZFUl9TSVpFKTsKKwltdGQtPm9vYnNpemUgPSBtdGQtPndyaXRlc2l6ZSA+PiA1OwogCS8qIFBhZ2VycyBwZXIgYmxvY2sgaXMgYWx3YXlzIDY0IGluIE9uZU5BTkQgKi8KLQltdGQtPmVyYXNlc2l6ZSA9IG10ZC0+b29iYmxvY2sgPDwgNjsKKwltdGQtPmVyYXNlc2l6ZSA9IG10ZC0+d3JpdGVzaXplIDw8IDY7CiAKIAl0aGlzLT5lcmFzZV9zaGlmdCA9IGZmcyhtdGQtPmVyYXNlc2l6ZSkgLSAxOwotCXRoaXMtPnBhZ2Vfc2hpZnQgPSBmZnMobXRkLT5vb2JibG9jaykgLSAxOworCXRoaXMtPnBhZ2Vfc2hpZnQgPSBmZnMobXRkLT53cml0ZXNpemUpIC0gMTsKIAl0aGlzLT5wcGJfc2hpZnQgPSAodGhpcy0+ZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KTsKLQl0aGlzLT5wYWdlX21hc2sgPSAobXRkLT5lcmFzZXNpemUgLyBtdGQtPm9vYmJsb2NrKSAtIDE7CisJdGhpcy0+cGFnZV9tYXNrID0gKG10ZC0+ZXJhc2VzaXplIC8gbXRkLT53cml0ZXNpemUpIC0gMTsKIAogCS8qIFJFVklTVDogTXVsdGljaGlwIGhhbmRsaW5nICovCiAKQEAgLTE0NzUsNyArMTcxNCw2IEBACiAJCQkJImluIHN1c3BlbmRlZCBzdGF0ZVxuIik7CiB9CiAKLQogLyoqCiAgKiBvbmVuYW5kX3NjYW4gLSBbT25lTkFORCBJbnRlcmZhY2VdIFNjYW4gZm9yIHRoZSBPbmVOQU5EIGRldmljZQogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTE1MjIsNyArMTc2MCw3IEBACiAJLyogQWxsb2NhdGUgYnVmZmVycywgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKCF0aGlzLT5wYWdlX2J1ZikgewogCQlzaXplX3QgbGVuOwotCQlsZW4gPSBtdGQtPm9vYmJsb2NrICsgbXRkLT5vb2JzaXplOworCQlsZW4gPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKIAkJdGhpcy0+cGFnZV9idWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdGhpcy0+cGFnZV9idWYpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF9zY2FuKCk6IENhbid0IGFsbG9jYXRlIHBhZ2VfYnVmXG4iKTsKQEAgLTE1MzcsNDAgKzE3NzUsNDIgQEAKIAogCXN3aXRjaCAobXRkLT5vb2JzaXplKSB7CiAJY2FzZSA2NDoKLQkJdGhpcy0+YXV0b29vYiA9ICZvbmVuYW5kX29vYl82NDsKKwkJdGhpcy0+ZWNjbGF5b3V0ID0gJm9uZW5hbmRfb29iXzY0OwogCQlicmVhazsKIAogCWNhc2UgMzI6Ci0JCXRoaXMtPmF1dG9vb2IgPSAmb25lbmFuZF9vb2JfMzI7CisJCXRoaXMtPmVjY2xheW91dCA9ICZvbmVuYW5kX29vYl8zMjsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBPT0Igc2NoZW1lIGRlZmluZWQgZm9yIG9vYnNpemUgJWRcbiIsCiAJCQltdGQtPm9vYnNpemUpOwogCQkvKiBUbyBwcmV2ZW50IGtlcm5lbCBvb3BzICovCi0JCXRoaXMtPmF1dG9vb2IgPSAmb25lbmFuZF9vb2JfMzI7CisJCXRoaXMtPmVjY2xheW91dCA9ICZvbmVuYW5kX29vYl8zMjsKIAkJYnJlYWs7CiAJfQogCi0JbWVtY3B5KCZtdGQtPm9vYmluZm8sIHRoaXMtPmF1dG9vb2IsIHNpemVvZihtdGQtPm9vYmluZm8pKTsKKwltdGQtPmVjY2xheW91dCA9IHRoaXMtPmVjY2xheW91dDsKIAogCS8qIEZpbGwgaW4gcmVtYWluaW5nIE1URCBkcml2ZXIgZGF0YSAqLwogCW10ZC0+dHlwZSA9IE1URF9OQU5ERkxBU0g7Ci0JbXRkLT5mbGFncyA9IE1URF9DQVBfTkFOREZMQVNIIHwgTVREX0VDQzsKKwltdGQtPmZsYWdzID0gTVREX0NBUF9OQU5ERkxBU0g7CiAJbXRkLT5lY2N0eXBlID0gTVREX0VDQ19TVzsKIAltdGQtPmVyYXNlID0gb25lbmFuZF9lcmFzZTsKIAltdGQtPnBvaW50ID0gTlVMTDsKIAltdGQtPnVucG9pbnQgPSBOVUxMOwogCW10ZC0+cmVhZCA9IG9uZW5hbmRfcmVhZDsKIAltdGQtPndyaXRlID0gb25lbmFuZF93cml0ZTsKLQltdGQtPnJlYWRfZWNjID0gb25lbmFuZF9yZWFkX2VjYzsKLQltdGQtPndyaXRlX2VjYyA9IG9uZW5hbmRfd3JpdGVfZWNjOwogCW10ZC0+cmVhZF9vb2IgPSBvbmVuYW5kX3JlYWRfb29iOwogCW10ZC0+d3JpdGVfb29iID0gb25lbmFuZF93cml0ZV9vb2I7Ci0JbXRkLT5yZWFkdiA9IE5VTEw7Ci0JbXRkLT5yZWFkdl9lY2MgPSBOVUxMOwotCW10ZC0+d3JpdGV2ID0gb25lbmFuZF93cml0ZXY7Ci0JbXRkLT53cml0ZXZfZWNjID0gb25lbmFuZF93cml0ZXZfZWNjOworI2lmZGVmIENPTkZJR19NVERfT05FTkFORF9PVFAKKwltdGQtPmdldF9mYWN0X3Byb3RfaW5mbyA9IG9uZW5hbmRfZ2V0X2ZhY3RfcHJvdF9pbmZvOworCW10ZC0+cmVhZF9mYWN0X3Byb3RfcmVnID0gb25lbmFuZF9yZWFkX2ZhY3RfcHJvdF9yZWc7CisJbXRkLT5nZXRfdXNlcl9wcm90X2luZm8gPSBvbmVuYW5kX2dldF91c2VyX3Byb3RfaW5mbzsKKwltdGQtPnJlYWRfdXNlcl9wcm90X3JlZyA9IG9uZW5hbmRfcmVhZF91c2VyX3Byb3RfcmVnOworCW10ZC0+d3JpdGVfdXNlcl9wcm90X3JlZyA9IG9uZW5hbmRfd3JpdGVfdXNlcl9wcm90X3JlZzsKKwltdGQtPmxvY2tfdXNlcl9wcm90X3JlZyA9IG9uZW5hbmRfbG9ja191c2VyX3Byb3RfcmVnOworI2VuZGlmCiAJbXRkLT5zeW5jID0gb25lbmFuZF9zeW5jOwogCW10ZC0+bG9jayA9IE5VTEw7CiAJbXRkLT51bmxvY2sgPSBvbmVuYW5kX3VubG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYwppbmRleCA0NTEwZDMzLi4xYjAwZGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmJ0LmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2JidC5jCkBAIC0xNyw2ICsxNyw5IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAKK2V4dGVybiBpbnQgb25lbmFuZF9kb19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJCQkgICAgICAgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKKwogLyoqCiAgKiBjaGVja19zaG9ydF9wYXR0ZXJuIC0gW0dFTkVSSUNdIGNoZWNrIGlmIGEgcGF0dGVybiBpcyBpbiB0aGUgYnVmZmVyCiAgKiBAcGFyYW0gYnVmCQl0aGUgYnVmZmVyIHRvIHNlYXJjaApAQCAtODcsMTMgKzkwLDEzIEBACiAKIAkJCS8qIE5vIG5lZWQgdG8gcmVhZCBwYWdlcyBmdWxseSwKIAkJCSAqIGp1c3QgcmVhZCByZXF1aXJlZCBPT0IgYnl0ZXMgKi8KLQkJCXJldCA9IG10ZC0+cmVhZF9vb2IobXRkLCBmcm9tICsgaiAqIG10ZC0+b29iYmxvY2sgKyBiZC0+b2ZmcywKLQkJCQkJCXJlYWRsZW4sICZyZXRsZW4sICZidWZbMF0pOworCQkJcmV0ID0gb25lbmFuZF9kb19yZWFkX29vYihtdGQsIGZyb20gKyBqICogbXRkLT53cml0ZXNpemUgKyBiZC0+b2ZmcywKKwkJCQkJCSAgcmVhZGxlbiwgJnJldGxlbiwgJmJ1ZlswXSk7CiAKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAotCQkJaWYgKGNoZWNrX3Nob3J0X3BhdHRlcm4oJmJ1ZltqICogc2Nhbmxlbl0sIHNjYW5sZW4sIG10ZC0+b29iYmxvY2ssIGJkKSkgeworCQkJaWYgKGNoZWNrX3Nob3J0X3BhdHRlcm4oJmJ1ZltqICogc2Nhbmxlbl0sIHNjYW5sZW4sIG10ZC0+d3JpdGVzaXplLCBiZCkpIHsKIAkJCQliYm0tPmJidFtpID4+IDNdIHw9IDB4MDMgPDwgKGkgJiAweDYpOwogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJhZCBlcmFzZWJsb2NrICVkIGF0IDB4JTA4eFxuIiwKIAkJCQkJaSA+PiAxLCAodW5zaWduZWQgaW50KSBmcm9tKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3JlZGJvb3QuYyBiL2RyaXZlcnMvbXRkL3JlZGJvb3QuYwppbmRleCBjMDc3ZDJlLi41YjU4NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9yZWRib290LmMKKysrIGIvZHJpdmVycy9tdGQvcmVkYm9vdC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICRJZDogcmVkYm9vdC5jLHYgMS4xOSAyMDA1LzEyLzAxIDEwOjAzOjUxIGR3bXcyIEV4cCAkCisgKiAkSWQ6IHJlZGJvb3QuYyx2IDEuMjEgMjAwNi8wMy8zMCAxODozNDozNyBiamQgRXhwICQKICAqCiAgKiBQYXJzZSBSZWRCb290LXN0eWxlIEZsYXNoIEltYWdlIFN5c3RlbSAoRklTKSB0YWJsZXMgYW5kCiAgKiBwcm9kdWNlIGEgTGludXggcGFydGl0aW9uIGFycmF5IHRvIG1hdGNoLgpAQCAtMTUsMTQgKzE1LDE0IEBACiAKIHN0cnVjdCBmaXNfaW1hZ2VfZGVzYyB7CiAgICAgdW5zaWduZWQgY2hhciBuYW1lWzE2XTsgICAgICAvLyBOdWxsIHRlcm1pbmF0ZWQgbmFtZQotICAgIHVuc2lnbmVkIGxvbmcgZmxhc2hfYmFzZTsgICAgLy8gQWRkcmVzcyB3aXRoaW4gRkxBU0ggb2YgaW1hZ2UKLSAgICB1bnNpZ25lZCBsb25nIG1lbV9iYXNlOyAgICAgIC8vIEFkZHJlc3MgaW4gbWVtb3J5IHdoZXJlIGl0IGV4ZWN1dGVzCi0gICAgdW5zaWduZWQgbG9uZyBzaXplOyAgICAgICAgICAvLyBMZW5ndGggb2YgaW1hZ2UKLSAgICB1bnNpZ25lZCBsb25nIGVudHJ5X3BvaW50OyAgIC8vIEV4ZWN1dGlvbiBlbnRyeSBwb2ludAotICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9sZW5ndGg7ICAgLy8gTGVuZ3RoIG9mIGFjdHVhbCBkYXRhCi0gICAgdW5zaWduZWQgY2hhciBfcGFkWzI1Ni0oMTYrNypzaXplb2YodW5zaWduZWQgbG9uZykpXTsKLSAgICB1bnNpZ25lZCBsb25nIGRlc2NfY2tzdW07ICAgIC8vIENoZWNrc3VtIG92ZXIgaW1hZ2UgZGVzY3JpcHRvcgotICAgIHVuc2lnbmVkIGxvbmcgZmlsZV9ja3N1bTsgICAgLy8gQ2hlY2tzdW0gb3ZlciBpbWFnZSBkYXRhCisgICAgdWludDMyX3QJICBmbGFzaF9iYXNlOyAgICAvLyBBZGRyZXNzIHdpdGhpbiBGTEFTSCBvZiBpbWFnZQorICAgIHVpbnQzMl90CSAgbWVtX2Jhc2U7ICAgICAgLy8gQWRkcmVzcyBpbiBtZW1vcnkgd2hlcmUgaXQgZXhlY3V0ZXMKKyAgICB1aW50MzJfdAkgIHNpemU7ICAgICAgICAgIC8vIExlbmd0aCBvZiBpbWFnZQorICAgIHVpbnQzMl90CSAgZW50cnlfcG9pbnQ7ICAgLy8gRXhlY3V0aW9uIGVudHJ5IHBvaW50CisgICAgdWludDMyX3QJICBkYXRhX2xlbmd0aDsgICAvLyBMZW5ndGggb2YgYWN0dWFsIGRhdGEKKyAgICB1bnNpZ25lZCBjaGFyIF9wYWRbMjU2LSgxNis3KnNpemVvZih1aW50MzJfdCkpXTsKKyAgICB1aW50MzJfdAkgIGRlc2NfY2tzdW07ICAgIC8vIENoZWNrc3VtIG92ZXIgaW1hZ2UgZGVzY3JpcHRvcgorICAgIHVpbnQzMl90CSAgZmlsZV9ja3N1bTsgICAgLy8gQ2hlY2tzdW0gb3ZlciBpbWFnZSBkYXRhCiB9OwogCiBzdHJ1Y3QgZmlzX2xpc3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvcmZkX2Z0bC5jIGIvZHJpdmVycy9tdGQvcmZkX2Z0bC5jCmluZGV4IGEzZTAwYTQuLmZhNDM2MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3JmZF9mdGwuYworKysgYi9kcml2ZXJzL210ZC9yZmRfZnRsLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1ICBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgogICoKLSAqICRJZDogcmZkX2Z0bC5jLHYgMS41IDIwMDUvMTEvMDcgMTE6MTQ6MjEgZ2xlaXhuZXIgRXhwICQKKyAqICRJZDogcmZkX2Z0bC5jLHYgMS44IDIwMDYvMDEvMTUgMTI6NTE6NDQgc2VhbiBFeHAgJAogICoKICAqIFRoaXMgdHlwZSBvZiBmbGFzaCB0cmFuc2xhdGlvbiBsYXllciAoRlRMKSBpcyB1c2VkIGJ5IHRoZSBFbWJlZGRlZCBCSU9TCiAgKiBieSBHZW5lcmFsIFNvZnR3YXJlLiBJdCBpcyBrbm93biBhcyB0aGUgUmVzaWRlbnQgRmxhc2ggRGlzayAoUkZEKSwgc2VlOgpAQCAtNjEsNiArNjEsNyBAQAogCQlCTE9DS19PSywKIAkJQkxPQ0tfRVJBU0lORywKIAkJQkxPQ0tfRVJBU0VELAorCQlCTE9DS19VTlVTRUQsCiAJCUJMT0NLX0ZBSUxFRAogCX0gc3RhdGU7CiAJaW50IGZyZWVfc2VjdG9yczsKQEAgLTk5LDEwICsxMDAsOCBAQAogCWJsb2NrLT5vZmZzZXQgPSBwYXJ0LT5ibG9ja19zaXplICogYmxvY2tfbm87CiAKIAlpZiAobGUxNl90b19jcHUocGFydC0+aGVhZGVyX2NhY2hlWzBdKSAhPSBSRkRfTUFHSUMpIHsKLQkJYmxvY2stPnN0YXRlID0gQkxPQ0tfRVJBU0VEOyAvKiBhc3N1bXB0aW9uICovCi0JCWJsb2NrLT5mcmVlX3NlY3RvcnMgPSBwYXJ0LT5kYXRhX3NlY3RvcnNfcGVyX2Jsb2NrOwotCQlwYXJ0LT5yZXNlcnZlZF9ibG9jayA9IGJsb2NrX25vOwotCQlyZXR1cm4gMTsKKwkJYmxvY2stPnN0YXRlID0gQkxPQ0tfVU5VU0VEOworCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAlibG9jay0+c3RhdGUgPSBCTE9DS19PSzsKQEAgLTEyNCw3ICsxMjMsNyBAQAogCQkJZW50cnkgPSAwOwogCiAJCWlmIChlbnRyeSA+PSBwYXJ0LT5zZWN0b3JfY291bnQpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVgKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCiAJCQkJIiclcyc6IHVuaXQgIyVkOiBlbnRyeSAlZCBjb3JydXB0LCAiCiAJCQkJInNlY3RvciAlZCBvdXQgb2YgcmFuZ2VcbiIsCiAJCQkJcGFydC0+bWJkLm10ZC0+bmFtZSwgYmxvY2tfbm8sIGksIGVudHJ5KTsKQEAgLTEzMiw3ICsxMzEsNyBAQAogCQl9CiAKIAkJaWYgKHBhcnQtPnNlY3Rvcl9tYXBbZW50cnldICE9IC0xKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAogCQkJCSInJXMnOiBtb3JlIHRoYW4gb25lIGVudHJ5IGZvciBzZWN0b3IgJWRcbiIsCiAJCQkJcGFydC0+bWJkLm10ZC0+bmFtZSwgZW50cnkpOwogCQkJcGFydC0+ZXJyb3JzID0gMTsKQEAgLTE2Nyw3ICsxNjYsNyBAQAogCS8qIGVhY2ggZXJhc2UgYmxvY2sgaGFzIHRocmVlIGJ5dGVzIGhlYWRlciwgZm9sbG93ZWQgYnkgdGhlIG1hcCAqLwogCXBhcnQtPmhlYWRlcl9zZWN0b3JzX3Blcl9ibG9jayA9CiAJCQkoKEhFQURFUl9NQVBfT0ZGU0VUICsgc2VjdG9yc19wZXJfYmxvY2spICoKLQkJIAlzaXplb2YodTE2KSArIFNFQ1RPUl9TSVpFIC0gMSkgLyBTRUNUT1JfU0laRTsKKwkJCXNpemVvZih1MTYpICsgU0VDVE9SX1NJWkUgLSAxKSAvIFNFQ1RPUl9TSVpFOwogCiAJcGFydC0+ZGF0YV9zZWN0b3JzX3Blcl9ibG9jayA9IHNlY3RvcnNfcGVyX2Jsb2NrIC0KIAkJCXBhcnQtPmhlYWRlcl9zZWN0b3JzX3Blcl9ibG9jazsKQEAgLTIyNiw3ICsyMjUsNyBAQAogCX0KIAogCWlmIChwYXJ0LT5yZXNlcnZlZF9ibG9jayA9PSAtMSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICInJXMnOiBubyBlbXB0eSBlcmFzZSB1bml0IGZvdW5kXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiJyVzJzogbm8gZW1wdHkgZXJhc2UgdW5pdCBmb3VuZFxuIiwKIAkJCQlwYXJ0LT5tYmQubXRkLT5uYW1lKTsKIAogCQlwYXJ0LT5lcnJvcnMgPSAxOwpAQCAtMzE1LDcgKzMxNCw3IEBACiAJCXJjID0gLUVJTzsKIAogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICInJXMnOiB1bmFibGUgdG8gd3JpdGUgUkZEICIKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiJyVzJzogdW5hYmxlIHRvIHdyaXRlIFJGRCAiCiAJCQkJImhlYWRlciBhdCAweCVseFxuIiwKIAkJCQlwYXJ0LT5tYmQubXRkLT5uYW1lLAogCQkJCXBhcnQtPmJsb2Nrc1tpXS5vZmZzZXQpOwpAQCAtMzQ4LDcgKzM0Nyw3IEBACiAJcmMgPSBwYXJ0LT5tYmQubXRkLT5lcmFzZShwYXJ0LT5tYmQubXRkLCBlcmFzZSk7CiAKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggImVyYXNlIG9mIHJlZ2lvbiAleCwleCBvbiAnJXMnICIKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZXJhc2Ugb2YgcmVnaW9uICV4LCV4IG9uICclcycgIgogCQkJCSJmYWlsZWRcbiIsIGVyYXNlLT5hZGRyLCBlcmFzZS0+bGVuLAogCQkJCXBhcnQtPm1iZC5tdGQtPm5hbWUpOwogCQlrZnJlZShlcmFzZSk7CkBAIC0zODMsNyArMzgyLDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVggImVycm9yIHJlYWRpbmcgJyVzJyBhdCAiCisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHJlYWRpbmcgJyVzJyBhdCAiCiAJCQkiMHglbHhcbiIsIHBhcnQtPm1iZC5tdGQtPm5hbWUsCiAJCQlwYXJ0LT5ibG9ja3NbYmxvY2tfbm9dLm9mZnNldCk7CiAKQEAgLTQyMyw3ICs0MjIsNyBAQAogCQkJcmMgPSAtRUlPOwogCiAJCWlmIChyYykgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAiJyVzJzogVW5hYmxlIHRvICIKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIiclcyc6IFVuYWJsZSB0byAiCiAJCQkJInJlYWQgc2VjdG9yIGZvciByZWxvY2F0aW9uXG4iLAogCQkJCXBhcnQtPm1iZC5tdGQtPm5hbWUpOwogCkBAIC01MjAsNyArNTE5LDcgQEAKICAqIGJlY2F1c2UgaWYgd2UgZmlsbCB0aGF0IG9uZSB1cCBmaXJzdCBpdCdsbCBoYXZlIHRoZSBtb3N0IGNoYW5jZSBvZiBoYXZpbmcKICAqIHRoZSBsZWFzdCBsaXZlIHNlY3RvcnMgYXQgcmVjbGFpbS4KICAqLwotc3RhdGljIGludCBmaW5kX2ZyZWVfYmxvY2soY29uc3Qgc3RydWN0IHBhcnRpdGlvbiAqcGFydCkKK3N0YXRpYyBpbnQgZmluZF9mcmVlX2Jsb2NrKHN0cnVjdCBwYXJ0aXRpb24gKnBhcnQpCiB7CiAJaW50IGJsb2NrLCBzdG9wOwogCkBAIC01MzMsNiArNTMyLDkgQEAKIAkJCQlibG9jayAhPSBwYXJ0LT5yZXNlcnZlZF9ibG9jaykKIAkJCXJldHVybiBibG9jazsKIAorCQlpZiAocGFydC0+YmxvY2tzW2Jsb2NrXS5zdGF0ZSA9PSBCTE9DS19VTlVTRUQpCisJCQllcmFzZV9ibG9jayhwYXJ0LCBibG9jayk7CisKIAkJaWYgKCsrYmxvY2sgPj0gcGFydC0+dG90YWxfYmxvY2tzKQogCQkJYmxvY2sgPSAwOwogCkBAIC01NDEsNyArNTQzLDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgZmluZF93cml0ZWFibGVfYmxvY2soc3RydWN0IHBhcnRpdGlvbiAqcGFydCwgdV9sb25nICpvbGRfc2VjdG9yKQorc3RhdGljIGludCBmaW5kX3dyaXRhYmxlX2Jsb2NrKHN0cnVjdCBwYXJ0aXRpb24gKnBhcnQsIHVfbG9uZyAqb2xkX3NlY3RvcikKIHsKIAlpbnQgcmMsIGJsb2NrOwogCXNpemVfdCByZXRsZW47CkBAIC01NzAsNyArNTcyLDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVggIiclcyc6IHVuYWJsZSB0byByZWFkIGhlYWRlciBhdCAiCisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIiclcyc6IHVuYWJsZSB0byByZWFkIGhlYWRlciBhdCAiCiAJCQkJIjB4JWx4XG4iLCBwYXJ0LT5tYmQubXRkLT5uYW1lLAogCQkJCXBhcnQtPmJsb2Nrc1tibG9ja10ub2Zmc2V0KTsKIAkJZ290byBlcnI7CkBAIC02MDIsNyArNjA0LDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJlcnJvciB3cml0aW5nICclcycgYXQgIgorCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJlcnJvciB3cml0aW5nICclcycgYXQgIgogCQkJIjB4JWx4XG4iLCBwYXJ0LT5tYmQubXRkLT5uYW1lLCBhZGRyKTsKIAkJaWYgKHJjKQogCQkJZ290byBlcnI7CkBAIC02NTIsNyArNjU0LDcgQEAKIAlpZiAocGFydC0+Y3VycmVudF9ibG9jayA9PSAtMSB8fAogCQkhcGFydC0+YmxvY2tzW3BhcnQtPmN1cnJlbnRfYmxvY2tdLmZyZWVfc2VjdG9ycykgewogCi0JCXJjID0gZmluZF93cml0ZWFibGVfYmxvY2socGFydCwgb2xkX2FkZHIpOworCQlyYyA9IGZpbmRfd3JpdGFibGVfYmxvY2socGFydCwgb2xkX2FkZHIpOwogCQlpZiAocmMpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC02NzUsNyArNjc3LDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJlcnJvciB3cml0aW5nICclcycgYXQgMHglbHhcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHdyaXRpbmcgJyVzJyBhdCAweCVseFxuIiwKIAkJCQlwYXJ0LT5tYmQubXRkLT5uYW1lLCBhZGRyKTsKIAkJaWYgKHJjKQogCQkJZ290byBlcnI7CkBAIC02OTUsNyArNjk3LDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJlcnJvciB3cml0aW5nICclcycgYXQgMHglbHhcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHdyaXRpbmcgJyVzJyBhdCAweCVseFxuIiwKIAkJCQlwYXJ0LT5tYmQubXRkLT5uYW1lLCBhZGRyKTsKIAkJaWYgKHJjKQogCQkJZ290byBlcnI7CkBAIC03NzYsNyArNzc4LDcgQEAKIAkJcGFydC0+YmxvY2tfc2l6ZSA9IGJsb2NrX3NpemU7CiAJZWxzZSB7CiAJCWlmICghbXRkLT5lcmFzZXNpemUpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVggInBsZWFzZSBwcm92aWRlIGJsb2NrX3NpemUiKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJwbGVhc2UgcHJvdmlkZSBibG9ja19zaXplIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJZWxzZQpAQCAtNzkxLDggKzc5Myw4IEBACiAJCWlmICghKG10ZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKIAkJCXBhcnQtPm1iZC5yZWFkb25seSA9IDE7CiAJCWVsc2UgaWYgKHBhcnQtPmVycm9ycykgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAiJyVzJzogZXJyb3JzIGZvdW5kLCAiCi0JCQkJCSJzZXR0aW5nIHJlYWQtb25seSIsIG10ZC0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiJyVzJzogZXJyb3JzIGZvdW5kLCAiCisJCQkJCSJzZXR0aW5nIHJlYWQtb25seVxuIiwgbXRkLT5uYW1lKTsKIAkJCXBhcnQtPm1iZC5yZWFkb25seSA9IDE7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCBmNzJhNGY1Li5iZjc3NjEyNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0yNjAsMTUgKzI2MCwxNyBAQAogI2RlZmluZSBSUENfTFNBX0RFRkFVTFQJCVJQQ19MRURfVFhfUlgKICNkZWZpbmUgUlBDX0xTQl9ERUZBVUxUCQlSUENfTEVEXzEwMF8xMAogCi0jZWxpZglkZWZpbmVkKENPTkZJR19NQUNIX0xQRDdBNDAwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0xQRDdBNDA0KQorI2VsaWYgICBkZWZpbmVkKENPTkZJR19NQUNIX0xQRDc5NTIwKSBcCisgICAgIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfTFBEN0E0MDApIFwKKyAgICAgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9MUEQ3QTQwNCkKIAotLyogVGhlIExQRDdBNDBYX0lPQkFSUklFUiBpcyBuZWNlc3NhcnkgdG8gb3ZlcmNvbWUgYSBtaXNtYXRjaCBiZXR3ZWVuCi0gKiB0aGUgd2F5IHRoYXQgdGhlIENQVSBoYW5kbGVzIGNoaXAgc2VsZWN0cyBhbmQgdGhlIHdheSB0aGF0IHRoZSBTTUMKLSAqIGNoaXAgZXhwZWN0cyB0aGUgY2hpcCBzZWxlY3QgdG8gb3BlcmF0ZS4gIFJlZmVyIHRvCisvKiBUaGUgTFBEN1hfSU9CQVJSSUVSIGlzIG5lY2Vzc2FyeSB0byBvdmVyY29tZSBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgKiB3YXkgdGhhdCB0aGUgQ1BVIGhhbmRsZXMgY2hpcCBzZWxlY3RzIGFuZCB0aGUgd2F5IHRoYXQgdGhlIFNNQyBjaGlwCisgKiBleHBlY3RzIHRoZSBjaGlwIHNlbGVjdCB0byBvcGVyYXRlLiAgUmVmZXIgdG8KICAqIERvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0lPQmFycmllciBmb3IgZGV0YWlscy4gIFRoZSByZWFkIGZyb20KLSAqIElPQkFSUklFUiBpcyBhIGJ5dGUgYXMgYSBsZWFzdC1jb21tb24gZGVub21pbmF0b3Igb2YgcG9zc2libGUKLSAqIHJlZ2lvbnMgdG8gdXNlIGFzIHRoZSBiYXJyaWVyLiAgSXQgd291bGQgYmUgd2FzdGVmdWwgdG8gcmVhZCAzMgotICogYml0cyBmcm9tIGEgYnl0ZSBvcmllbnRlZCByZWdpb24uCisgKiBJT0JBUlJJRVIgaXMgYSBieXRlLCBpbiBvcmRlciB0aGF0IHdlIHJlYWQgdGhlIGxlYXN0LWNvbW1vbgorICogZGVub21pbmF0b3IuICBJdCB3b3VsZCBiZSB3YXN0ZWZ1bCB0byByZWFkIDMyIGJpdHMgZnJvbSBhbiA4LWJpdAorICogYWNjZXNzaWJsZSByZWdpb24uCiAgKgogICogVGhlcmUgaXMgbm8gZXhwbGljaXQgcHJvdGVjdGlvbiBhZ2FpbnN0IGludGVycnVwdHMgaW50ZXJ2ZW5pbmcKICAqIGJldHdlZW4gdGhlIHdyaXRldyBhbmQgdGhlIElPQkFSUklFUi4gIEluIFNNQyBJU1IgdGhlcmUgaXMgYQpAQCAtMjg3LDI1ICsyODksMzUgQEAKICNkZWZpbmUgU01DX0NBTl9VU0VfMTZCSVQJMQogI2RlZmluZSBTTUNfQ0FOX1VTRV8zMkJJVAkwCiAjZGVmaW5lIFNNQ19OT1dBSVQJCTAKLSNkZWZpbmUgTFBEN0E0MFhfSU9CQVJSSUVSCXJlYWRiIChJT0JBUlJJRVJfVklSVCkKKyNkZWZpbmUgTFBEN1hfSU9CQVJSSUVSCQlyZWFkYiAoSU9CQVJSSUVSX1ZJUlQpCiAKLSNkZWZpbmUgU01DX2ludyhhLHIpCQlyZWFkdyAoKHZvaWQqKSAoKGEpICsgKHIpKSkKLSNkZWZpbmUgU01DX2luc3coYSxyLHAsbCkJcmVhZHN3ICgodm9pZCopICgoYSkgKyAocikpLCBwLCBsKQotI2RlZmluZSBTTUNfb3V0dyh2LGEscikJICAgICAoeyB3cml0ZXcgKCh2KSwgKGEpICsgKHIpKTsgTFBEN0E0MFhfSU9CQVJSSUVSOyB9KQorI2RlZmluZSBTTUNfaW53KGEscilcCisgICAoeyB1bnNpZ25lZCBzaG9ydCB2ID0gcmVhZHcgKCh2b2lkKikgKChhKSArIChyKSkpOyBMUEQ3WF9JT0JBUlJJRVI7IHY7IH0pCisjZGVmaW5lIFNNQ19vdXR3KHYsYSxyKQkgICh7IHdyaXRldyAoKHYpLCAoYSkgKyAocikpOyBMUEQ3WF9JT0JBUlJJRVI7IH0pCiAKLSNkZWZpbmUgU01DX291dHN3CQlMUEQ3QTQwWF9TTUNfb3V0c3cKKyNkZWZpbmUgU01DX2luc3cJCUxQRDdfU01DX2luc3cKK3N0YXRpYyBpbmxpbmUgdm9pZCBMUEQ3X1NNQ19pbnN3ICh1bnNpZ25lZCBjaGFyKiBhLCBpbnQgciwKKwkJCQkgIHVuc2lnbmVkIGNoYXIqIHAsIGludCBsKQoreworCXVuc2lnbmVkIHNob3J0KiBwcyA9ICh1bnNpZ25lZCBzaG9ydCopIHA7CisJd2hpbGUgKGwtLSA+IDApIHsKKwkJKnBzKysgPSByZWFkdyAoYSArIHIpOworCQlMUEQ3WF9JT0JBUlJJRVI7CisJfQorfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgTFBEN0E0MFhfU01DX291dHN3KHVuc2lnbmVkIGxvbmcgYSwgaW50IHIsCi0JCQkJICAgICB1bnNpZ25lZCBjaGFyKiBwLCBpbnQgbCkKKyNkZWZpbmUgU01DX291dHN3CQlMUEQ3X1NNQ19vdXRzdworc3RhdGljIGlubGluZSB2b2lkIExQRDdfU01DX291dHN3ICh1bnNpZ25lZCBjaGFyKiBhLCBpbnQgciwKKwkJCQkgICB1bnNpZ25lZCBjaGFyKiBwLCBpbnQgbCkKIHsKIAl1bnNpZ25lZCBzaG9ydCogcHMgPSAodW5zaWduZWQgc2hvcnQqKSBwOwogCXdoaWxlIChsLS0gPiAwKSB7CiAJCXdyaXRldyAoKnBzKyssIGEgKyByKTsKLQkJTFBEN0E0MFhfSU9CQVJSSUVSOworCQlMUEQ3WF9JT0JBUlJJRVI7CiAJfQogfQogCi0jZGVmaW5lIFNNQ19JTlRFUlJVUFRfUFJFQU1CTEUJTFBEN0E0MFhfSU9CQVJSSUVSCisjZGVmaW5lIFNNQ19JTlRFUlJVUFRfUFJFQU1CTEUJTFBEN1hfSU9CQVJSSUVSCiAKICNkZWZpbmUgUlBDX0xTQV9ERUZBVUxUCQlSUENfTEVEX1RYX1JYCiAjZGVmaW5lIFJQQ19MU0JfREVGQVVMVAkJUlBDX0xFRF8xMDBfMTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnIGIvZHJpdmVycy9wYXJwb3J0L0tjb25maWcKaW5kZXggZjYzYzM4Ny4uNmM4NDUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L0tjb25maWcKKysrIGIvZHJpdmVycy9wYXJwb3J0L0tjb25maWcKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogY29uZmlnIFBBUlBPUlRfU0VSSUFMCiAJdHJpc3RhdGUgIk11bHRpLUlPIGNhcmRzIChwYXJhbGxlbCBhbmQgc2VyaWFsKSIKLQlkZXBlbmRzIG9uIFNFUklBTF84MjUwICYmIFBBUlBPUlRfUEMgJiYgUENJCisJZGVwZW5kcyBvbiBTRVJJQUxfODI1MF9QQ0kgJiYgUEFSUE9SVF9QQyAmJiBQQ0kKIAloZWxwCiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgbXVsdGktSU8gUENJIGNhcmRzIHRoYXQgaGF2ZSBwYXJhbGxlbCBhbmQKIAkgIHNlcmlhbCBwb3J0cy4gIFlvdSBzaG91bGQgc2F5IFkgb3IgTSBoZXJlLiAgSWYgeW91IHNheSBNLCB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MGNyeXB0LmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MGNyeXB0LmgKaW5kZXggNWU2YjFmNS4uMGNhMWQxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjcnlwdC5oCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwY3J5cHQuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjcnlwdC5oCiAgKgotICogIHo5MGNyeXB0IDEuMy4zCisgKiAgejkwY3J5cHQgMS4zLjMgKGtlcm5lbC1wcml2YXRlIGhlYWRlcikKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24KICAqICBBdXRob3Iocyk6IFJvYmVydCBCdXJyb3VnaHMgKGJ1cnJvdWdoQHVzLmlibS5jb20pCkBAIC0yNywxODggKzI3LDcgQEAKICNpZm5kZWYgX1o5MENSWVBUX0hfCiAjZGVmaW5lIF9aOTBDUllQVF9IXwogCi0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQotI2RlZmluZSB6OTBjcnlwdF9WRVJTSU9OIDEKLSNkZWZpbmUgejkwY3J5cHRfUkVMRUFTRSAzCS8vIDIgPSBQQ0lYQ0MsIDMgPSByZXdyaXRlIGZvciBjb2Rpbmcgc3RhbmRhcmRzCi0jZGVmaW5lIHo5MGNyeXB0X1ZBUklBTlQgMwkvLyAzID0gQ0VYMkEgc3VwcG9ydAotCi0vKioKLSAqIHN0cnVjdCBpY2FfcnNhX21vZGV4cG8KLSAqCi0gKiBSZXF1aXJlbWVudHM6Ci0gKiAtIG91dHB1dGRhdGFsZW5ndGggaXMgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgaW5wdXRkYXRhbGVuZ3RoLgotICogLSBBbGwga2V5IHBhcnRzIGFyZSByaWdodCBqdXN0aWZpZWQgaW4gdGhlaXIgZmllbGRzLCBwYWRkZWQgb24KLSAqICAgdGhlIGxlZnQgd2l0aCB6ZXJvZXMuCi0gKiAtIGxlbmd0aChiX2tleSkgPSBpbnB1dGRhdGFsZW5ndGgKLSAqIC0gbGVuZ3RoKG5fbW9kdWx1cykgPSBpbnB1dGRhdGFsZW5ndGgKLSAqLwotc3RydWN0IGljYV9yc2FfbW9kZXhwbyB7Ci0JY2hhciBfX3VzZXIgKglpbnB1dGRhdGE7Ci0JdW5zaWduZWQgaW50CWlucHV0ZGF0YWxlbmd0aDsKLQljaGFyIF9fdXNlciAqCW91dHB1dGRhdGE7Ci0JdW5zaWduZWQgaW50CW91dHB1dGRhdGFsZW5ndGg7Ci0JY2hhciBfX3VzZXIgKgliX2tleTsKLQljaGFyIF9fdXNlciAqCW5fbW9kdWx1czsKLX07Ci0KLS8qKgotICogc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQKLSAqCi0gKiBSZXF1aXJlbWVudHM6Ci0gKiAtIGlucHV0ZGF0YWxlbmd0aCBpcyBldmVuLgotICogLSBvdXRwdXRkYXRhbGVuZ3RoIGlzIGF0IGxlYXN0IGFzIGxhcmdlIGFzIGlucHV0ZGF0YWxlbmd0aC4KLSAqIC0gQWxsIGtleSBwYXJ0cyBhcmUgcmlnaHQganVzdGlmaWVkIGluIHRoZWlyIGZpZWxkcywgcGFkZGVkIG9uCi0gKiAgIHRoZSBsZWZ0IHdpdGggemVyb2VzLgotICogLSBsZW5ndGgoYnBfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yICsgOAotICogLSBsZW5ndGgoYnFfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yCi0gKiAtIGxlbmd0aChucF9rZXkpCT0gaW5wdXRkYXRhbGVuZ3RoLzIgKyA4Ci0gKiAtIGxlbmd0aChucV9rZXkpCT0gaW5wdXRkYXRhbGVuZ3RoLzIKLSAqIC0gbGVuZ3RoKHVfbXVsdF9pbnYpID0gaW5wdXRkYXRhbGVuZ3RoLzIgKyA4Ci0gKi8KLXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0IHsKLQljaGFyIF9fdXNlciAqCWlucHV0ZGF0YTsKLQl1bnNpZ25lZCBpbnQJaW5wdXRkYXRhbGVuZ3RoOwotCWNoYXIgX191c2VyICoJb3V0cHV0ZGF0YTsKLQl1bnNpZ25lZCBpbnQJb3V0cHV0ZGF0YWxlbmd0aDsKLQljaGFyIF9fdXNlciAqCWJwX2tleTsKLQljaGFyIF9fdXNlciAqCWJxX2tleTsKLQljaGFyIF9fdXNlciAqCW5wX3ByaW1lOwotCWNoYXIgX191c2VyICoJbnFfcHJpbWU7Ci0JY2hhciBfX3VzZXIgKgl1X211bHRfaW52OwotfTsKLQotI2RlZmluZSBaOTBfSU9DVExfTUFHSUMgJ3onICAvLyBOT1RFOiAgTmVlZCB0byBhbGxvY2F0ZSBmcm9tIGxpbnV4IGZvbGtzCi0KLS8qKgotICogSW50ZXJmYWNlIG5vdGVzOgotICoKLSAqIFRoZSBpb2N0bCgpcyB3aGljaCBhcmUgaW1wbGVtZW50ZWQgKGFsb25nIHdpdGggcmVsZXZhbnQgZGV0YWlscykKLSAqIGFyZToKLSAqCi0gKiAgIElDQVJTQU1PREVYUE8KLSAqICAgICBQZXJmb3JtIGFuIFJTQSBvcGVyYXRpb24gdXNpbmcgYSBNb2R1bHVzLUV4cG9uZW50IHBhaXIKLSAqICAgICBUaGlzIHRha2VzIGFuIGljYV9yc2FfbW9kZXhwbyBzdHJ1Y3QgYXMgaXRzIGFyZy4KLSAqCi0gKiAgICAgTk9URTogcGxlYXNlIHJlZmVyIHRvIHRoZSBjb21tZW50cyBwcmVjZWRpbmcgdGhpcyBzdHJ1Y3R1cmUKLSAqICAgICAgICAgICBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoZSBjb250ZW50cyBvZiB0aGUKLSAqICAgICAgICAgICBibG9jawotICoKLSAqICAgSUNBUlNBQ1JUCi0gKiAgICAgUGVyZm9ybSBhbiBSU0Egb3BlcmF0aW9uIHVzaW5nIGEgQ2hpbmVzZS1SZW1haW5kZXIgVGhlb3JlbSBrZXkKLSAqICAgICBUaGlzIHRha2VzIGFuIGljYV9yc2FfbW9kZXhwb19jcnQgc3RydWN0IGFzIGl0cyBhcmcuCi0gKgotICogICAgIE5PVEU6IHBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgc3RydWN0dXJlCi0gKiAgICAgICAgICAgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgY29udGVudHMgb2YgdGhlCi0gKiAgICAgICAgICAgYmxvY2sKLSAqCi0gKiAgIFo5MFNUQVRfVE9UQUxDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBkZXZpY2UgdHlwZXMgdG9nZXRoZXIuCi0gKgotICogICBaOTBTVEFUX1BDSUNBQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJQ0FzLgotICoKLSAqICAgWjkwU1RBVF9QQ0lDQ0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIFBDSUNDcy4KLSAqCi0gKiAgIFo5MFNUQVRfUENJWENDTUNMMkNPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIE1DTDIgUENJWENDcy4KLSAqCi0gKiAgIFo5MFNUQVRfUENJWENDTUNMM0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIE1DTDMgUENJWENDcy4KLSAqCi0gKiAgIFo5MFNUQVRfQ0VYMkNDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBDRVgyQ3MuCi0gKgotICogICBaOTBTVEFUX0NFWDJBQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgQ0VYMkFzLgotICoKLSAqICAgWjkwU1RBVF9SRVFVRVNUUV9DT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyB3YWl0aW5nIHRvIGJlCi0gKiAgICAgc2VudCB0byBhIGRldmljZS4KLSAqCi0gKiAgIFo5MFNUQVRfUEVORElOR1FfQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2VudCB0byBhCi0gKiAgICAgZGV2aWNlIGF3YWl0aW5nIHRoZSByZXBseS4KLSAqCi0gKiAgIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgdGhlIG51bWJlciBvZiBvcGVuIGZpbGUgaGFuZGxlcy4KLSAqCi0gKiAgIFo5MFNUQVRfRE9NQUlOX0lOREVYCi0gKiAgICAgUmV0dXJuIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBDcnlwdG9ncmFwaGljIERvbWFpbi4KLSAqCi0gKiAgIFo5MFNUQVRfU1RBVFVTX01BU0sKLSAqICAgICBSZXR1cm4gYW4gNjQgZWxlbWVudCBhcnJheSBvZiB1bnNpZ25lZCBjaGFycyBmb3IgdGhlIHN0YXR1cyBvZgotICogICAgIGFsbCBkZXZpY2VzLgotICogICAgICAgMHgwMTogUENJQ0EKLSAqICAgICAgIDB4MDI6IFBDSUNDCi0gKiAgICAgICAweDAzOiBQQ0lYQ0NfTUNMMgotICogICAgICAgMHgwNDogUENJWENDX01DTDMKLSAqICAgICAgIDB4MDU6IENFWDJDCi0gKiAgICAgICAweDA2OiBDRVgyQQotICogICAgICAgMHgwZDogZGV2aWNlIGlzIGRpc2FibGVkIHZpYSB0aGUgcHJvYyBmaWxlc3lzdGVtCi0gKgotICogICBaOTBTVEFUX1FERVBUSF9NQVNLCi0gKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgY2hhcnMgZm9yIHRoZSBxdWV1ZQotICogICAgIGRlcHRoIG9mIGFsbCBkZXZpY2VzLgotICoKLSAqICAgWjkwU1RBVF9QRVJERVZfUkVRQ05UCi0gKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgaW50ZWdlcnMgZm9yIHRoZSBudW1iZXIKLSAqICAgICBvZiBzdWNjZXNzZnVsbHkgY29tcGxldGVkIHJlcXVlc3RzIHBlciBkZXZpY2Ugc2luY2UgdGhlIGRldmljZQotICogICAgIHdhcyBkZXRlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUuCi0gKgotICogICBJQ0FaOTBTVEFUVVMgKGRlcHJlY2F0ZWQpCi0gKiAgICAgUmV0dXJuIHNvbWUgZGV2aWNlIGRyaXZlciBzdGF0dXMgaW4gYSBpY2FfejkwX3N0YXR1cyBzdHJ1Y3QKLSAqICAgICBUaGlzIHRha2VzIGFuIGljYV96OTBfc3RhdHVzIHN0cnVjdCBhcyBpdHMgYXJnLgotICoKLSAqICAgICBOT1RFOiB0aGlzIGlvY3RsKCkgaXMgZGVwcmVjYXRlZCwgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgKLSAqICAgICAgICAgICBzaW5nbGUgaW9jdGwoKXMgZm9yIGVhY2ggdHlwZSBvZiBzdGF0dXMgYmVpbmcgcmVxdWVzdGVkCi0gKgotICogICBaOTBTVEFUX1BDSVhDQ0NPVU5UIChkZXByZWNhdGVkKQotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBQQ0lYQ0NzIChNQ0wyICsgTUNMMykuCi0gKiAgICAgVGhpcyBpcyBERVBSRUNBVEVEIG5vdyB0aGF0IE1DTDMgUENJWENDcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSBmcm9tCi0gKiAgICAgTUNMMiBQQ0lYQ0NzLgotICoKLSAqICAgWjkwUVVJRVNDRSAobm90IHJlY29tbWVuZGVkKQotICogICAgIFF1aWVzY2UgdGhlIGRyaXZlci4gIFRoaXMgaXMgaW50ZW5kZWQgdG8gc3RvcCBhbGwgbmV3Ci0gKiAgICAgcmVxdWVzdHMgZnJvbSBiZWluZyBwcm9jZXNzZWQuICBJdHMgdXNlIGlzIE5PVCByZWNvbW1lbmRlZCwKLSAqICAgICBleGNlcHQgaW4gY2lyY3Vtc3RhbmNlcyB3aGVyZSB0aGVyZSBpcyBubyBvdGhlciB3YXkgdG8gc3RvcAotICogICAgIGNhbGxlcnMgZnJvbSBhY2Nlc3NpbmcgdGhlIGRyaXZlci4gIEl0cyBvcmlnaW5hbCB1c2Ugd2FzIHRvCi0gKiAgICAgYWxsb3cgdGhlIGRyaXZlciB0byBiZSAiZHJhaW5lZCIgb2Ygd29yayBpbiBwcmVwYXJhdGlvbiBmb3IKLSAqICAgICBhIHN5c3RlbSBzaHV0ZG93bi4KLSAqCi0gKiAgICAgTk9URTogb25jZSBpc3N1ZWQsIHRoaXMgYmFuIG9uIG5ldyB3b3JrIGNhbm5vdCBiZSB1bmRvbmUKLSAqICAgICAgICAgICBleGNlcHQgYnkgdW5sb2FkaW5nIGFuZCByZWxvYWRpbmcgdGhlIGRyaXZlci4KLSAqLwotCi0vKioKLSAqIFN1cHBvcnRlZCBpb2N0bCBjYWxscwotICovCi0jZGVmaW5lIElDQVJTQU1PREVYUE8JX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwgWjkwX0lPQ1RMX01BR0lDLCAweDA1LCAwKQotI2RlZmluZSBJQ0FSU0FDUlQJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwgWjkwX0lPQ1RMX01BR0lDLCAweDA2LCAwKQotCi0vKiBERVBSRUNBVEVEIHN0YXR1cyBjYWxscyAoYm91bmQgZm9yIHJlbW92YWwgYXQgc29tZSBwb2ludCkgKi8KLSNkZWZpbmUgSUNBWjkwU1RBVFVTCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDEwLCBzdHJ1Y3QgaWNhX3o5MF9zdGF0dXMpCi0jZGVmaW5lIFo5MFNUQVRfUENJWENDQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDMsIGludCkKLQotLyogdW5yZWxhdGVkIHRvIElDQSBjYWxsZXJzICovCi0jZGVmaW5lIFo5MFFVSUVTQ0UJX0lPKFo5MF9JT0NUTF9NQUdJQywgMHgxMSkKLQotLyogTmV3IHN0YXR1cyBjYWxscyAqLwotI2RlZmluZSBaOTBTVEFUX1RPVEFMQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDAsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9QQ0lDQUNPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQxLCBpbnQpCi0jZGVmaW5lIFo5MFNUQVRfUENJQ0NDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0MiwgaW50KQotI2RlZmluZSBaOTBTVEFUX1BDSVhDQ01DTDJDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YiwgaW50KQotI2RlZmluZSBaOTBTVEFUX1BDSVhDQ01DTDNDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YywgaW50KQotI2RlZmluZSBaOTBTVEFUX0NFWDJDQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGQsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9DRVgyQUNPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDRlLCBpbnQpCi0jZGVmaW5lIFo5MFNUQVRfUkVRVUVTVFFfQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDQsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9QRU5ESU5HUV9DT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NSwgaW50KQotI2RlZmluZSBaOTBTVEFUX1RPVEFMT1BFTl9DT1VOVCBfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NiwgaW50KQotI2RlZmluZSBaOTBTVEFUX0RPTUFJTl9JTkRFWAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NywgaW50KQotI2RlZmluZSBaOTBTVEFUX1NUQVRVU19NQVNLCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQ4LCBjaGFyWzY0XSkKLSNkZWZpbmUgWjkwU1RBVF9RREVQVEhfTUFTSwlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0OSwgY2hhcls2NF0pCi0jZGVmaW5lIFo5MFNUQVRfUEVSREVWX1JFUUNOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YSwgaW50WzY0XSkKKyNpbmNsdWRlIDxhc20vejkwY3J5cHQuaD4KIAogLyoqCiAgKiBsb2NhbCBlcnJubyBkZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCmluZGV4IGY1YWFjOTIuLjUzYzI0NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKQEAgLTEzNjUsNyArMTM2NSw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfQ1BVX1MzQzI0MTAgKi8KIAotI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKIAogc3RhdGljIGludCBzM2MyNDQwX3NlcmlhbF9zZXRzb3VyY2Uoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKIAkJCQkgICAgIHN0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjICpjbGspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwppbmRleCBhYTUyMWI4Li43NzZkNGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKQEAgLTE0NSwxNCArMTQ1LDE1IEBACiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QqIHR0eSA9IHBvcnQtPmluZm8tPnR0eTsKIAlpbnQgY2JSeE1heCA9IDI1NjsJLyogKEdyb3NzKSBsaW1pdCBvbiByZWNlaXZlICovCi0JdW5zaWduZWQgaW50IGRhdGEsIGZsYWc7LyogUmVjZWl2ZWQgZGF0YSBhbmQgc3RhdHVzICovCisJdW5zaWduZWQgaW50IGRhdGE7CS8qIFJlY2VpdmVkIGRhdGEgYW5kIHN0YXR1cyAqLworCXVuc2lnbmVkIGludCBmbGFnOwogCiAJd2hpbGUgKCEoVVIgKHBvcnQsIFVBUlRfUl9TVEFUVVMpICYgblJ4UmR5KSAmJiAtLWNiUnhNYXgpIHsKIAkJZGF0YSA9IFVSIChwb3J0LCBVQVJUX1JfREFUQSk7CiAJCWZsYWcgPSBUVFlfTk9STUFMOwogCQkrK3BvcnQtPmljb3VudC5yeDsKIAotCQlpZiAodW5saWtlbHkoZGF0YSAmIFJ4RXJyb3IpKSB7CS8qIFF1aWNrIGNoZWNrLCBzaG9ydC1jaXJjdWl0ICovCisJCWlmICh1bmxpa2VseShkYXRhICYgUnhFcnJvcikpIHsKIAkJCWlmIChkYXRhICYgUnhCcmVhaykgewogCQkJCWRhdGEgJj0gfihSeEZyYW1pbmdFcnJvciB8IFJ4UGFyaXR5RXJyb3IpOwogCQkJCSsrcG9ydC0+aWNvdW50LmJyazsKQEAgLTMwMyw3ICszMDQsNyBAQAogCS8qIE5vdGUsIGtlcm5lbCBhcHBlYXJzIHRvIGJlIHNldHRpbmcgRFRSIGFuZCBSVFMgb24gY29uc29sZS4gKi8KIAogCS8qICoqKiBGSVhNRTogdGhpcyBkZXNlcnZlcyBtb3JlIHdvcmsuICBUaGVyZSdzIHNvbWUgd29yayBpbgotICAgICAgICAgICAgICAgdHJhY2luZyBhbGwgb2YgdGhlIElPIHBpbnMuICovCisJICAgICAgIHRyYWNpbmcgYWxsIG9mIHRoZSBJTyBwaW5zLiAqLwogI2lmIDAKIAlpZiggcG9ydC0+bWFwYmFzZSA9PSBVQVJUMV9QSFlTKSB7CiAJCWdwaW9SZWdzX3QgKmdwaW8gPSAoZ3Bpb1JlZ3NfdCAqKUlPX0FERFJFU1MoR1BJT19QSFlTKTsKQEAgLTY2Miw5ICs2NjMsMTMgQEAKIAlpZiAocmV0ID09IDApIHsKIAkJaW50IGk7CiAKLQkJZm9yIChpID0gMDsgaSA8IERFVl9OUjsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgREVWX05SOyBpKyspIHsKKwkJCS8qIFVBUlQzLCB3aGVuIHVzZWQsIHJlcXVpcmVzIEdQSU8gcGluIHJlYWxsb2NhdGlvbiAqLworCQkJaWYgKGxoN2E0MHhfcG9ydHNbaV0ucG9ydC5tYXBiYXNlID09IFVBUlQzX1BIWVMpCisJCQkJR1BJT19QSU5NVVggfD0gMTw8MzsKIAkJCXVhcnRfYWRkX29uZV9wb3J0ICgmbGg3YTQweF9yZWcsCiAJCQkJCSAgICZsaDdhNDB4X3BvcnRzW2ldLnBvcnQpOworCQl9CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggNTY0MTQ5OC4uNWEyODQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMTY3LDYgKzE2Nyw2OSBAQAogCSAgaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0Pi4gIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFtYmEtY2xjZC4KIAorY2hvaWNlCisKKwlkZXBlbmRzIG9uIEZCX0FSTUNMQ0QgJiYgKEFSQ0hfTEg3QTQwWCB8fCBBUkNIX0xINzk1MlgpCisJcHJvbXB0ICJMQ0QgUGFuZWwiCisJZGVmYXVsdCBGQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyCisKK2NvbmZpZyBGQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyX0hSVEZUCisJYm9vbCAiTG9naWNQRCBMQ0QgMy41XCIgUVZHQSB3L0hSVEZUIElDIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRMDM1UTdEQjAyLCBhIDMuNSIKKwkgIGNvbG9yIFFWR0EsIEhSVEZUIHBhbmVsLiAgVGhlIExvZ2ljUEQgZGV2aWNlIGluY2x1ZGVzIGFuCisJICBhbiBpbnRlZ3JhdGVkIEhSVEZUIGNvbnRyb2xsZXIgSUMuCisJICBUaGUgbmF0aXZlIHJlc29sdXRpb24gaXMgMjQweDMyMC4KKworY29uZmlnIEZCX0FSTUNMQ0RfU0hBUlBfTFEwNTdRM0RDMDIKKwlib29sICJMb2dpY1BEIExDRCA1LjdcIiBRVkdBIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRMDU3UTNEQzAyLCBhIDUuNyIKKwkgIGNvbG9yIFFWR0EsIFRGVCBwYW5lbC4gIFRoZSBMb2dpY1BEIGRldmljZSBpbmNsdWRlcyBhbgorCSAgVGhlIG5hdGl2ZSByZXNvbHV0aW9uIGlzIDMyMHgyNDAuCisKK2NvbmZpZyBGQl9BUk1DTENEX1NIQVJQX0xRNjREMzQzCisJYm9vbCAiTG9naWNQRCBMQ0QgNi40XCIgVkdBIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRNjREMzQzLCBhIDYuNCIKKwkgIGNvbG9yIFZHQSwgVEZUIHBhbmVsLiAgVGhlIExvZ2ljUEQgZGV2aWNlIGluY2x1ZGVzIGFuCisJICBUaGUgbmF0aXZlIHJlc29sdXRpb24gaXMgNjQweDQ4MC4KKworY29uZmlnIEZCX0FSTUNMQ0RfU0hBUlBfTFExMEQzNjgKKwlib29sICJMb2dpY1BEIExDRCAxMC40XCIgVkdBIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRMTBEMzY4LCBhIDEwLjQiCisJICBjb2xvciBWR0EsIFRGVCBwYW5lbC4gIFRoZSBMb2dpY1BEIGRldmljZSBpbmNsdWRlcyBhbgorCSAgVGhlIG5hdGl2ZSByZXNvbHV0aW9uIGlzIDY0MHg0ODAuCisKKworY29uZmlnIEZCX0FSTUNMQ0RfU0hBUlBfTFExMjFTMURHNDEKKwlib29sICJMb2dpY1BEIExDRCAxMi4xXCIgU1ZHQSIKKwloZWxwCisJICBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGFycCBMUTEyMVMxREc0MSwgYSAxMi4xIgorCSAgY29sb3IgU1ZHQSwgVEZUIHBhbmVsLiAgVGhlIExvZ2ljUEQgZGV2aWNlIGluY2x1ZGVzIGFuCisJICBUaGUgbmF0aXZlIHJlc29sdXRpb24gaXMgODAweDYwMC4KKworCSAgVGhpcyBwYW5lbCByZXF1aXJlcyBhIGNsb2NrIHJhdGUgbWF5IGJlIGFuIGludGVnZXIgZnJhY3Rpb24KKwkgIG9mIHRoZSBiYXNlIExDRENMSyBmcmVxdWVuY3kuICBUaGUgZHJpdmVyIHdpbGwgc2VsZWN0IHRoZQorCSAgaGlnaGVzdCBmcmVxdWVuY3kgYXZhaWxhYmxlIHRoYXQgaXMgbG93ZXIgdGhhbiB0aGUgbWF4aW11bQorCSAgYWxsb3dlZC4gIFRoZSBwYW5lbCBtYXkgZmxpY2tlciBpZiB0aGUgY2xvY2sgcmF0ZSBpcworCSAgc2xvd2VyIHRoYW4gdGhlIHJlY29tbWVuZGVkIG1pbmltdW0uCisKK2NvbmZpZyBGQl9BUk1DTENEX0FVT19BMDcwVlcwMV9XSURFCisJYm9vbCAiQVUgT3B0cm9uaWNzIEEwNzBWVzAxIExDRCA3LjBcIiBXSURFIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEFVIE9wdHJvbmljcywgYSA3LjAiCisJICBXSURFIENvbG9yLiAgVGhlIG5hdGl2ZSByZXNvbHV0aW9uIGlzIDIzNHg0ODAuCisKK2NvbmZpZyBGQl9BUk1DTENEX0hJVEFDSEkKKwlib29sICJIaXRhY2hpIFdpZGUgU2NyZWVuIDgwMHg0ODAiCisJaGVscAorCSAgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSGl0YWNoaSA4MDB4NDgwLgorCitlbmRjaG9pY2UKKworCiBjb25maWcgRkJfQUNPUk4KIAlib29sICJBY29ybiBWSURDIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBBUk0gJiYgKEFSQ0hfQUNPUk4gfHwgQVJDSF9DTFBTNzUwMCkKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGY5YjU4NDIuLjIwZjliNTUgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMzkzLDE4ICszOTMsMzAgQEAKIAlib29sICJJbm90aWZ5IGZpbGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBzdXBwb3J0IgogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGlub3RpZnkgc3VwcG9ydCBhbmQgdGhlIGFzc29jaWF0ZWQgc3lzdGVtCi0JICBjYWxscy4gIElub3RpZnkgaXMgYSBmaWxlIGNoYW5nZSBub3RpZmljYXRpb24gc3lzdGVtIGFuZCBhCi0JICByZXBsYWNlbWVudCBmb3IgZG5vdGlmeS4gIElub3RpZnkgZml4ZXMgbnVtZXJvdXMgc2hvcnRjb21pbmdzIGluCi0JICBkbm90aWZ5IGFuZCBpbnRyb2R1Y2VzIHNldmVyYWwgbmV3IGZlYXR1cmVzLiAgSXQgYWxsb3dzIG1vbml0b3JpbmcKLQkgIG9mIGJvdGggZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHZpYSBhIHNpbmdsZSBvcGVuIGZkLiAgT3RoZXIgZmVhdHVyZXMKLQkgIGluY2x1ZGUgbXVsdGlwbGUgZmlsZSBldmVudHMsIG9uZS1zaG90IHN1cHBvcnQsIGFuZCB1bm1vdW50CisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBpbm90aWZ5IHN1cHBvcnQuICBJbm90aWZ5IGlzIGEgZmlsZSBjaGFuZ2UKKwkgIG5vdGlmaWNhdGlvbiBzeXN0ZW0gYW5kIGEgcmVwbGFjZW1lbnQgZm9yIGRub3RpZnkuICBJbm90aWZ5IGZpeGVzCisJICBudW1lcm91cyBzaG9ydGNvbWluZ3MgaW4gZG5vdGlmeSBhbmQgaW50cm9kdWNlcyBzZXZlcmFsIG5ldyBmZWF0dXJlcworCSAgaW5jbHVkaW5nIG11bHRpcGxlIGZpbGUgZXZlbnRzLCBvbmUtc2hvdCBzdXBwb3J0LCBhbmQgdW5tb3VudAogCSAgbm90aWZpY2F0aW9uLgogCiAJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5vdGlmeS50eHQKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIElOT1RJRllfVVNFUgorCWJvb2wgIklub3RpZnkgc3VwcG9ydCBmb3IgdXNlcnNwYWNlIgorCWRlcGVuZHMgb24gSU5PVElGWQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGlub3RpZnkgc3VwcG9ydCBmb3IgdXNlcnNwYWNlLCBpbmNsdWRpbmcgdGhlCisJICBhc3NvY2lhdGVkIHN5c3RlbSBjYWxscy4gIElub3RpZnkgYWxsb3dzIG1vbml0b3Jpbmcgb2YgYm90aCBmaWxlcyBhbmQKKwkgIGRpcmVjdG9yaWVzIHZpYSBhIHNpbmdsZSBvcGVuIGZkLiAgRXZlbnRzIGFyZSByZWFkIGZyb20gdGhlIGZpbGUKKwkgIGRlc2NyaXB0b3IsIHdoaWNoIGlzIGFsc28gc2VsZWN0KCktIGFuZCBwb2xsKCktYWJsZS4KKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lub3RpZnkudHh0CisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBRVU9UQQogCWJvb2wgIlF1b3RhIHN1cHBvcnQiCiAJaGVscApAQCAtMTEwMSw2ICsxMTEzLDQ0IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5ICdOJy4KIAorY29uZmlnIEpGRlMyX0ZTX1hBVFRSCisJYm9vbCAiSkZGUzIgWEFUVFIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTCAmJiAhSkZGUzJfRlNfV1JJVEVCVUZGRVIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKKwkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKwkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgorCSAgCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSkZGUzJfRlNfUE9TSVhfQUNMCisJYm9vbCAiSkZGUzIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBKRkZTMl9GU19YQVRUUgorCWRlZmF1bHQgeQorCXNlbGVjdCBGU19QT1NJWF9BQ0wKKwloZWxwCisJICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCisJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCisJICAKKwkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgorCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgorCSAgCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KKworY29uZmlnIEpGRlMyX0ZTX1NFQ1VSSVRZCisJYm9vbCAiSkZGUzIgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKKwkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KKwkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKKwkgIGxhYmVscyBpbiB0aGUgamZmczIgZmlsZXN5c3RlbS4KKwkgIAorCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZworCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgorCiBjb25maWcgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwogCWJvb2wgIkFkdmFuY2VkIGNvbXByZXNzaW9uIG9wdGlvbnMgZm9yIEpGRlMyIgogCWRlcGVuZHMgb24gSkZGUzJfRlMKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggMDc4ZDNkMS4uZDBlYTZiZiAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDcgQEAKIAkJaW9wcmlvLm8gcG5vZGUubyBkcm9wX2NhY2hlcy5vIHNwbGljZS5vIHN5bmMubwogCiBvYmotJChDT05GSUdfSU5PVElGWSkJCSs9IGlub3RpZnkubworb2JqLSQoQ09ORklHX0lOT1RJRllfVVNFUikJKz0gaW5vdGlmeV91c2VyLm8KIG9iai0kKENPTkZJR19FUE9MTCkJCSs9IGV2ZW50cG9sbC5vCiBvYmotJChDT05GSUdfQ09NUEFUKQkJKz0gY29tcGF0Lm8gY29tcGF0X2lvY3RsLm8KIApkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAxYjQ0OTFjLi4yNjk1MzM3IDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtMzM3LDIwICszMzcsMjAgQEAKIC8qIFNwZWNpYWwgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSByYi10cmVlIG5vZGUgdG8gZGV0ZWN0IGxpbmthZ2UgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBlcF9yYl9pbml0bm9kZShzdHJ1Y3QgcmJfbm9kZSAqbikKIHsKLQluLT5yYl9wYXJlbnQgPSBuOworCXJiX3NldF9wYXJlbnQobiwgbik7CiB9CiAKIC8qIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIHJiLXRyZWUgYW5kIG1hcmtzIGl0IGZvciBhIGZhc3QgaXMtbGlua2VkIGNoZWNrICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZXBfcmJfZXJhc2Uoc3RydWN0IHJiX25vZGUgKm4sIHN0cnVjdCByYl9yb290ICpyKQogewogCXJiX2VyYXNlKG4sIHIpOwotCW4tPnJiX3BhcmVudCA9IG47CisJcmJfc2V0X3BhcmVudChuLCBuKTsKIH0KIAogLyogRmFzdCBjaGVjayB0byB2ZXJpZnkgdGhhdCB0aGUgaXRlbSBpcyBsaW5rZWQgdG8gdGhlIG1haW4gcmItdHJlZSAqLwogc3RhdGljIGlubGluZSBpbnQgZXBfcmJfbGlua2VkKHN0cnVjdCByYl9ub2RlICpuKQogewotCXJldHVybiBuLT5yYl9wYXJlbnQgIT0gbjsKKwlyZXR1cm4gcmJfcGFyZW50KG4pICE9IG47CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggM2E3OWQ5Ny4uZDA3ODU4YyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvY25fcHJvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpAQCAtMTA4NSw2ICsxMDg2LDExIEBACiAJLyoga2VybmVsIG1vZHVsZSBsb2FkZXIgZml4dXAgKi8KIAkvKiBzbyB3ZSBkb24ndCB0cnkgdG8gbG9hZCBydW4gbW9kcHJvYmUgaW4ga2VybmVsIHNwYWNlLiAqLwogCXNldF9mcyhVU0VSX0RTKTsKKworCXJldHZhbCA9IGF1ZGl0X2Jwcm0oYnBybSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwogCXJldHZhbCA9IC1FTk9FTlQ7CiAJZm9yICh0cnk9MDsgdHJ5PDI7IHRyeSsrKSB7CiAJCXJlYWRfbG9jaygmYmluZm10X2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9kaXIuYyBiL2ZzL2V4dDMvZGlyLmMKaW5kZXggZjM3NTI4ZS4uZmJiMGQ0ZSAxMDA2NDQKLS0tIGEvZnMvZXh0My9kaXIuYworKysgYi9mcy9leHQzL2Rpci5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAkJICogYmVnaW5uaW5nIG9mIHRoZSBsb29wIGFuZCB0cnkgdG8gZnJlZSB0aGUgcGFyZW50CiAJCSAqIG5vZGUuCiAJCSAqLwotCQlwYXJlbnQgPSBuLT5yYl9wYXJlbnQ7CisJCXBhcmVudCA9IHJiX3BhcmVudChuKTsKIAkJZm5hbWUgPSByYl9lbnRyeShuLCBzdHJ1Y3QgZm5hbWUsIHJiX2hhc2gpOwogCQl3aGlsZSAoZm5hbWUpIHsKIAkJCXN0cnVjdCBmbmFtZSAqIG9sZCA9IGZuYW1lOwpkaWZmIC0tZ2l0IGEvZnMvaW5vdGlmeS5jIGIvZnMvaW5vdGlmeS5jCmluZGV4IDczMmVjNGIuLjcyMzgzNmEgMTAwNjQ0Ci0tLSBhL2ZzL2lub3RpZnkuYworKysgYi9mcy9pbm90aWZ5LmMKQEAgLTUsNyArNSwxMCBAQAogICoJSm9obiBNY0N1dGNoYW4JPHR0YkB0ZW50YWNsZS5kaHMub3JnPgogICoJUm9iZXJ0IExvdmUJPHJtbEBub3ZlbGwuY29tPgogICoKKyAqIEtlcm5lbCBBUEkgYWRkZWQgYnk6IEFteSBHcmlmZmlzIDxhbXkuZ3JpZmZpc0BocC5jb20+CisgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEpvaG4gTWNDdXRjaGFuCisgKiBDb3B5cmlnaHQgMjAwNiBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIwLDM1ICsyMywxNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgotI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAKIHN0YXRpYyBhdG9taWNfdCBpbm90aWZ5X2Nvb2tpZTsKIAotc3RhdGljIGttZW1fY2FjaGVfdCAqd2F0Y2hfY2FjaGVwIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMga21lbV9jYWNoZV90ICpldmVudF9jYWNoZXAgX19yZWFkX21vc3RseTsKLQotc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqaW5vdGlmeV9tbnQgX19yZWFkX21vc3RseTsKLQotLyogdGhlc2UgYXJlIGNvbmZpZ3VyYWJsZSB2aWEgL3Byb2Mvc3lzL2ZzL2lub3RpZnkvICovCi1pbnQgaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMgX19yZWFkX21vc3RseTsKLWludCBpbm90aWZ5X21heF91c2VyX3dhdGNoZXMgX19yZWFkX21vc3RseTsKLWludCBpbm90aWZ5X21heF9xdWV1ZWRfZXZlbnRzIF9fcmVhZF9tb3N0bHk7Ci0KIC8qCiAgKiBMb2NrIG9yZGVyaW5nOgogICoKQEAgLTU2LDMzMCArNDEsMTExIEBACiAgKiBpcHJ1bmVfbXV0ZXggKHN5bmNocm9uaXplIHNocmlua19pY2FjaGVfbWVtb3J5KCkpCiAgKiAJaW5vZGVfbG9jayAocHJvdGVjdHMgdGhlIHN1cGVyX2Jsb2NrLT5zX2lub2RlcyBsaXN0KQogICogCWlub2RlLT5pbm90aWZ5X211dGV4IChwcm90ZWN0cyBpbm9kZS0+aW5vdGlmeV93YXRjaGVzIGFuZCB3YXRjaGVzLT5pX2xpc3QpCi0gKiAJCWlub3RpZnlfZGV2LT5tdXRleCAocHJvdGVjdHMgaW5vdGlmeV9kZXZpY2UgYW5kIHdhdGNoZXMtPmRfbGlzdCkKKyAqIAkJaW5vdGlmeV9oYW5kbGUtPm11dGV4IChwcm90ZWN0cyBpbm90aWZ5X2hhbmRsZSBhbmQgd2F0Y2hlcy0+aF9saXN0KQorICoKKyAqIFRoZSBpbm9kZS0+aW5vdGlmeV9tdXRleCBhbmQgaW5vdGlmeV9oYW5kbGUtPm11dGV4IGFuZCBoZWxkIGR1cmluZyBleGVjdXRpb24KKyAqIG9mIGEgY2FsbGVyJ3MgZXZlbnQgaGFuZGxlci4gIFRodXMsIHRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBhbnkgbG9ja3MKKyAqIHRha2VuIGluIHRoZWlyIGV2ZW50IGhhbmRsZXIgd2hpbGUgY2FsbGluZyBhbnkgb2YgdGhlIHB1Ymxpc2hlZCBpbm90aWZ5CisgKiBpbnRlcmZhY2VzLgogICovCiAKIC8qCi0gKiBMaWZldGltZXMgb2YgdGhlIHRocmVlIG1haW4gZGF0YSBzdHJ1Y3R1cmVzLS1pbm90aWZ5X2RldmljZSwgaW5vZGUsIGFuZAorICogTGlmZXRpbWVzIG9mIHRoZSB0aHJlZSBtYWluIGRhdGEgc3RydWN0dXJlcy0taW5vdGlmeV9oYW5kbGUsIGlub2RlLCBhbmQKICAqIGlub3RpZnlfd2F0Y2gtLWFyZSBtYW5hZ2VkIGJ5IHJlZmVyZW5jZSBjb3VudC4KICAqCi0gKiBpbm90aWZ5X2RldmljZTogTGlmZXRpbWUgaXMgZnJvbSBpbm90aWZ5X2luaXQoKSB1bnRpbCByZWxlYXNlLiAgQWRkaXRpb25hbAotICogcmVmZXJlbmNlcyBjYW4gYnVtcCB0aGUgY291bnQgdmlhIGdldF9pbm90aWZ5X2RldigpIGFuZCBkcm9wIHRoZSBjb3VudCB2aWEKLSAqIHB1dF9pbm90aWZ5X2RldigpLgorICogaW5vdGlmeV9oYW5kbGU6IExpZmV0aW1lIGlzIGZyb20gaW5vdGlmeV9pbml0KCkgdG8gaW5vdGlmeV9kZXN0cm95KCkuCisgKiBBZGRpdGlvbmFsIHJlZmVyZW5jZXMgY2FuIGJ1bXAgdGhlIGNvdW50IHZpYSBnZXRfaW5vdGlmeV9oYW5kbGUoKSBhbmQgZHJvcAorICogdGhlIGNvdW50IHZpYSBwdXRfaW5vdGlmeV9oYW5kbGUoKS4KICAqCi0gKiBpbm90aWZ5X3dhdGNoOiBMaWZldGltZSBpcyBmcm9tIGNyZWF0ZV93YXRjaCgpIHRvIGRlc3Rvcnlfd2F0Y2goKS4KLSAqIEFkZGl0aW9uYWwgcmVmZXJlbmNlcyBjYW4gYnVtcCB0aGUgY291bnQgdmlhIGdldF9pbm90aWZ5X3dhdGNoKCkgYW5kIGRyb3AKLSAqIHRoZSBjb3VudCB2aWEgcHV0X2lub3RpZnlfd2F0Y2goKS4KKyAqIGlub3RpZnlfd2F0Y2g6IGZvciBpbm90aWZ5J3MgcHVycG9zZXMsIGxpZmV0aW1lIGlzIGZyb20gaW5vdGlmeV9hZGRfd2F0Y2goKQorICogdG8gcmVtb3ZlX3dhdGNoX25vX2V2ZW50KCkuICBBZGRpdGlvbmFsIHJlZmVyZW5jZXMgY2FuIGJ1bXAgdGhlIGNvdW50IHZpYQorICogZ2V0X2lub3RpZnlfd2F0Y2goKSBhbmQgZHJvcCB0aGUgY291bnQgdmlhIHB1dF9pbm90aWZ5X3dhdGNoKCkuICBUaGUgY2FsbGVyCisgKiBpcyByZXBvbnNpYmxlIGZvciB0aGUgZmluYWwgcHV0IGFmdGVyIHJlY2VpdmluZyBJTl9JR05PUkVELCBvciB3aGVuIHVzaW5nCisgKiBJTl9PTkVTSE9UIGFmdGVyIHJlY2VpdmluZyB0aGUgZmlyc3QgZXZlbnQuICBJbm90aWZ5IGRvZXMgdGhlIGZpbmFsIHB1dCBpZgorICogaW5vdGlmeV9kZXN0cm95KCkgaXMgY2FsbGVkLgogICoKICAqIGlub2RlOiBQaW5uZWQgc28gbG9uZyBhcyB0aGUgaW5vZGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgd2F0Y2gsIGZyb20KLSAqIGNyZWF0ZV93YXRjaCgpIHRvIHB1dF9pbm90aWZ5X3dhdGNoKCkuCisgKiBpbm90aWZ5X2FkZF93YXRjaCgpIHRvIHRoZSBmaW5hbCBwdXRfaW5vdGlmeV93YXRjaCgpLgogICovCiAKIC8qCi0gKiBzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgLSByZXByZXNlbnRzIGFuIGlub3RpZnkgaW5zdGFuY2UKKyAqIHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAtIHJlcHJlc2VudHMgYW4gaW5vdGlmeSBpbnN0YW5jZQogICoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHByb3RlY3RlZCBieSB0aGUgbXV0ZXggJ211dGV4Jy4KICAqLwotc3RydWN0IGlub3RpZnlfZGV2aWNlIHsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAJd3E7CQkvKiB3YWl0IHF1ZXVlIGZvciBpL28gKi8KK3N0cnVjdCBpbm90aWZ5X2hhbmRsZSB7CiAJc3RydWN0IGlkcgkJaWRyOwkJLyogaWRyIG1hcHBpbmcgd2QgLT4gd2F0Y2ggKi8KIAlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwkJLyogcHJvdGVjdHMgdGhpcyBiYWQgYm95ICovCi0Jc3RydWN0IGxpc3RfaGVhZCAJZXZlbnRzOwkJLyogbGlzdCBvZiBxdWV1ZWQgZXZlbnRzICovCiAJc3RydWN0IGxpc3RfaGVhZAl3YXRjaGVzOwkvKiBsaXN0IG9mIHdhdGNoZXMgKi8KIAlhdG9taWNfdAkJY291bnQ7CQkvKiByZWZlcmVuY2UgY291bnQgKi8KLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QJKnVzZXI7CQkvKiB1c2VyIHdobyBvcGVuZWQgdGhpcyBkZXYgKi8KLQl1bnNpZ25lZCBpbnQJCXF1ZXVlX3NpemU7CS8qIHNpemUgb2YgdGhlIHF1ZXVlIChieXRlcykgKi8KLQl1bnNpZ25lZCBpbnQJCWV2ZW50X2NvdW50OwkvKiBudW1iZXIgb2YgcGVuZGluZyBldmVudHMgKi8KLQl1bnNpZ25lZCBpbnQJCW1heF9ldmVudHM7CS8qIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyAqLwogCXUzMgkJCWxhc3Rfd2Q7CS8qIHRoZSBsYXN0IHdkIGFsbG9jYXRlZCAqLworCWNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgKmluX29wczsgLyogaW5vdGlmeSBjYWxsZXIgb3BlcmF0aW9ucyAqLwogfTsKIAotLyoKLSAqIHN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAtIEFuIGlub3RpZnkgZXZlbnQsIG9yaWdpbmF0aW5nIGZyb20gYSB3YXRjaCBhbmQKLSAqIHF1ZXVlZCBmb3IgdXNlci1zcGFjZS4gIEEgbGlzdCBvZiB0aGVzZSBpcyBhdHRhY2hlZCB0byBlYWNoIGluc3RhbmNlIG9mIHRoZQotICogZGV2aWNlLiAgSW4gcmVhZCgpLCB0aGlzIGxpc3QgaXMgd2Fsa2VkIGFuZCBhbGwgZXZlbnRzIHRoYXQgY2FuIGZpdCBpbiB0aGUKLSAqIGJ1ZmZlciBhcmUgcmV0dXJuZWQuCi0gKgotICogUHJvdGVjdGVkIGJ5IGRldi0+bXV0ZXggb2YgdGhlIGRldmljZSBpbiB3aGljaCB3ZSBhcmUgcXVldWVkLgotICovCi1zdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgewotCXN0cnVjdCBpbm90aWZ5X2V2ZW50CWV2ZW50OwkvKiB0aGUgdXNlci1zcGFjZSBldmVudCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7CS8qIGVudHJ5IGluIGlub3RpZnlfZGV2aWNlJ3MgbGlzdCAqLwotCWNoYXIJCQkqbmFtZTsJLyogZmlsZW5hbWUsIGlmIGFueSAqLwotfTsKLQotLyoKLSAqIHN0cnVjdCBpbm90aWZ5X3dhdGNoIC0gcmVwcmVzZW50cyBhIHdhdGNoIHJlcXVlc3Qgb24gYSBzcGVjaWZpYyBpbm9kZQotICoKLSAqIGRfbGlzdCBpcyBwcm90ZWN0ZWQgYnkgZGV2LT5tdXRleCBvZiB0aGUgYXNzb2NpYXRlZCB3YXRjaC0+ZGV2LgotICogaV9saXN0IGFuZCBtYXNrIGFyZSBwcm90ZWN0ZWQgYnkgaW5vZGUtPmlub3RpZnlfbXV0ZXggb2YgdGhlIGFzc29jaWF0ZWQgaW5vZGUuCi0gKiBkZXYsIGlub2RlLCBhbmQgd2QgYXJlIG5ldmVyIHdyaXR0ZW4gdG8gb25jZSB0aGUgd2F0Y2ggaXMgY3JlYXRlZC4KLSAqLwotc3RydWN0IGlub3RpZnlfd2F0Y2ggewotCXN0cnVjdCBsaXN0X2hlYWQJZF9saXN0OwkvKiBlbnRyeSBpbiBpbm90aWZ5X2RldmljZSdzIGxpc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWlfbGlzdDsJLyogZW50cnkgaW4gaW5vZGUncyBsaXN0ICovCi0JYXRvbWljX3QJCWNvdW50OwkvKiByZWZlcmVuY2UgY291bnQgKi8KLQlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UJKmRldjsJLyogYXNzb2NpYXRlZCBkZXZpY2UgKi8KLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZTsJLyogYXNzb2NpYXRlZCBpbm9kZSAqLwotCXMzMiAJCQl3ZDsJLyogd2F0Y2ggZGVzY3JpcHRvciAqLwotCXUzMgkJCW1hc2s7CS8qIGV2ZW50IG1hc2sgZm9yIHRoaXMgd2F0Y2ggKi8KLX07Ci0KLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0KLSNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KLQotc3RhdGljIGludCB6ZXJvOwotCi1jdGxfdGFibGUgaW5vdGlmeV90YWJsZVtdID0gewotCXsKLQkJLmN0bF9uYW1lCT0gSU5PVElGWV9NQVhfVVNFUl9JTlNUQU5DRVMsCi0JCS5wcm9jbmFtZQk9ICJtYXhfdXNlcl9pbnN0YW5jZXMiLAotCQkuZGF0YQkJPSAmaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAotCQkuZXh0cmExCQk9ICZ6ZXJvLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBJTk9USUZZX01BWF9VU0VSX1dBVENIRVMsCi0JCS5wcm9jbmFtZQk9ICJtYXhfdXNlcl93YXRjaGVzIiwKLQkJLmRhdGEJCT0gJmlub3RpZnlfbWF4X3VzZXJfd2F0Y2hlcywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKLQkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCi0JCS5leHRyYTEJCT0gJnplcm8sIAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBJTk9USUZZX01BWF9RVUVVRURfRVZFTlRTLAotCQkucHJvY25hbWUJPSAibWF4X3F1ZXVlZF9ldmVudHMiLAotCQkuZGF0YQkJPSAmaW5vdGlmeV9tYXhfcXVldWVkX2V2ZW50cywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwgCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLCAKLQkJLmV4dHJhMQkJPSAmemVybwotCX0sCi0JeyAuY3RsX25hbWUgPSAwIH0KLX07Ci0jZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2lub3RpZnlfZGV2KHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkIGdldF9pbm90aWZ5X2hhbmRsZShzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQogewotCWF0b21pY19pbmMoJmRldi0+Y291bnQpOworCWF0b21pY19pbmMoJmloLT5jb3VudCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW5vdGlmeV9kZXYoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2lub3RpZnlfaGFuZGxlKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgpCiB7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+Y291bnQpKSB7Ci0JCWF0b21pY19kZWMoJmRldi0+dXNlci0+aW5vdGlmeV9kZXZzKTsKLQkJZnJlZV91aWQoZGV2LT51c2VyKTsKLQkJaWRyX2Rlc3Ryb3koJmRldi0+aWRyKTsKLQkJa2ZyZWUoZGV2KTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaWgtPmNvdW50KSkgeworCQlpZHJfZGVzdHJveSgmaWgtPmlkcik7CisJCWtmcmVlKGloKTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCisvKioKKyAqIGdldF9pbm90aWZ5X3dhdGNoIC0gZ3JhYiBhIHJlZmVyZW5jZSB0byBhbiBpbm90aWZ5X3dhdGNoCisgKiBAd2F0Y2g6IHdhdGNoIHRvIGdyYWIKKyAqLwordm9pZCBnZXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCiB7CiAJYXRvbWljX2luYygmd2F0Y2gtPmNvdW50KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGdldF9pbm90aWZ5X3dhdGNoKTsKIAotLyoKKy8qKgogICogcHV0X2lub3RpZnlfd2F0Y2ggLSBkZWNyZW1lbnRzIHRoZSByZWYgY291bnQgb24gYSBnaXZlbiB3YXRjaC4gIGNsZWFucyB1cAotICogdGhlIHdhdGNoIGFuZCBpdHMgcmVmZXJlbmNlcyBpZiB0aGUgY291bnQgcmVhY2hlcyB6ZXJvLgorICogd2F0Y2ggcmVmZXJlbmNlcyBpZiB0aGUgY291bnQgcmVhY2hlcyB6ZXJvLiAgaW5vdGlmeV93YXRjaCBpcyBmcmVlZCBieQorICogaW5vdGlmeSBjYWxsZXJzIHZpYSB0aGUgZGVzdHJveV93YXRjaCgpIG9wLgorICogQHdhdGNoOiB3YXRjaCB0byByZWxlYXNlCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCit2b2lkIHB1dF9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmd2F0Y2gtPmNvdW50KSkgewotCQlwdXRfaW5vdGlmeV9kZXYod2F0Y2gtPmRldik7CisJCXN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWggPSB3YXRjaC0+aWg7CisKIAkJaXB1dCh3YXRjaC0+aW5vZGUpOwotCQlrbWVtX2NhY2hlX2ZyZWUod2F0Y2hfY2FjaGVwLCB3YXRjaCk7CisJCWloLT5pbl9vcHMtPmRlc3Ryb3lfd2F0Y2god2F0Y2gpOworCQlwdXRfaW5vdGlmeV9oYW5kbGUoaWgpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHB1dF9pbm90aWZ5X3dhdGNoKTsKIAogLyoKLSAqIGtlcm5lbF9ldmVudCAtIGNyZWF0ZSBhIG5ldyBrZXJuZWwgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycworICogaW5vdGlmeV9oYW5kbGVfZ2V0X3dkIC0gcmV0dXJucyB0aGUgbmV4dCBXRCBmb3IgdXNlIGJ5IHRoZSBnaXZlbiBoYW5kbGUKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4KKyAqIENhbGxlcnMgbXVzdCBob2xkIGloLT5tdXRleC4gIFRoaXMgZnVuY3Rpb24gY2FuIHNsZWVwLgogICovCi1zdGF0aWMgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICoga2VybmVsX2V2ZW50KHMzMiB3ZCwgdTMyIG1hc2ssIHUzMiBjb29raWUsCi0JCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQ7Ci0KLQlrZXZlbnQgPSBrbWVtX2NhY2hlX2FsbG9jKGV2ZW50X2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KCFrZXZlbnQpKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIHdlIGhhbmQgdGhpcyBvdXQgdG8gdXNlci1zcGFjZSwgc28gemVybyBpdCBqdXN0IGluIGNhc2UgKi8KLQltZW1zZXQoJmtldmVudC0+ZXZlbnQsIDAsIHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCkpOwotCi0Ja2V2ZW50LT5ldmVudC53ZCA9IHdkOwotCWtldmVudC0+ZXZlbnQubWFzayA9IG1hc2s7Ci0Ja2V2ZW50LT5ldmVudC5jb29raWUgPSBjb29raWU7Ci0KLQlJTklUX0xJU1RfSEVBRCgma2V2ZW50LT5saXN0KTsKLQotCWlmIChuYW1lKSB7Ci0JCXNpemVfdCBsZW4sIHJlbSwgZXZlbnRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCk7Ci0KLQkJLyoKLQkJICogV2UgbmVlZCB0byBwYWQgdGhlIGZpbGVuYW1lIHNvIGFzIHRvIHByb3Blcmx5IGFsaWduIGFuCi0JCSAqIGFycmF5IG9mIGlub3RpZnlfZXZlbnQgc3RydWN0dXJlcy4gIEJlY2F1c2UgdGhlIHN0cnVjdHVyZSBpcwotCQkgKiBzbWFsbCBhbmQgdGhlIGNvbW1vbiBjYXNlIGlzIGEgc21hbGwgZmlsZW5hbWUsIHdlIGp1c3Qgcm91bmQKLQkJICogdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgdGhlIHN0cnVjdHVyZSdzIHNpemVvZi4gIFRoaXMgaXMKLQkJICogc2ltcGxlIGFuZCBzYWZlIGZvciBhbGwgYXJjaGl0ZWN0dXJlcy4KLQkJICovCi0JCWxlbiA9IHN0cmxlbihuYW1lKSArIDE7Ci0JCXJlbSA9IGV2ZW50X3NpemUgLSBsZW47Ci0JCWlmIChsZW4gPiBldmVudF9zaXplKSB7Ci0JCQlyZW0gPSBldmVudF9zaXplIC0gKGxlbiAlIGV2ZW50X3NpemUpOwotCQkJaWYgKGxlbiAlIGV2ZW50X3NpemUgPT0gMCkKLQkJCQlyZW0gPSAwOwotCQl9Ci0KLQkJa2V2ZW50LT5uYW1lID0ga21hbGxvYyhsZW4gKyByZW0sIEdGUF9LRVJORUwpOwotCQlpZiAodW5saWtlbHkoIWtldmVudC0+bmFtZSkpIHsKLQkJCWttZW1fY2FjaGVfZnJlZShldmVudF9jYWNoZXAsIGtldmVudCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQltZW1jcHkoa2V2ZW50LT5uYW1lLCBuYW1lLCBsZW4pOwotCQlpZiAocmVtKQotCQkJbWVtc2V0KGtldmVudC0+bmFtZSArIGxlbiwgMCwgcmVtKTsJCQotCQlrZXZlbnQtPmV2ZW50LmxlbiA9IGxlbiArIHJlbTsKLQl9IGVsc2UgewotCQlrZXZlbnQtPmV2ZW50LmxlbiA9IDA7Ci0JCWtldmVudC0+bmFtZSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIGtldmVudDsKLX0KLQotLyoKLSAqIGlub3RpZnlfZGV2X2dldF9ldmVudCAtIHJldHVybiB0aGUgbmV4dCBldmVudCBpbiB0aGUgZ2l2ZW4gZGV2J3MgcXVldWUKLSAqCi0gKiBDYWxsZXIgbXVzdCBob2xkIGRldi0+bXV0ZXguCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICoKLWlub3RpZnlfZGV2X2dldF9ldmVudChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gbGlzdF9lbnRyeShkZXYtPmV2ZW50cy5uZXh0LCBzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQsIGxpc3QpOwotfQotCi0vKgotICogaW5vdGlmeV9kZXZfcXVldWVfZXZlbnQgLSBhZGQgYSBuZXcgZXZlbnQgdG8gdGhlIGdpdmVuIGRldmljZQotICoKLSAqIENhbGxlciBtdXN0IGhvbGQgZGV2LT5tdXRleC4gIENhbiBzbGVlcCAoY2FsbHMga2VybmVsX2V2ZW50KCkpLgotICovCi1zdGF0aWMgdm9pZCBpbm90aWZ5X2Rldl9xdWV1ZV9ldmVudChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLCB1MzIgbWFzaywKLQkJCQkgICAgdTMyIGNvb2tpZSwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgKmtldmVudCwgKmxhc3Q7Ci0KLQkvKiBjb2FsZXNjaW5nOiBkcm9wIHRoaXMgZXZlbnQgaWYgaXQgaXMgYSBkdXBlIG9mIHRoZSBwcmV2aW91cyAqLwotCWxhc3QgPSBpbm90aWZ5X2Rldl9nZXRfZXZlbnQoZGV2KTsKLQlpZiAobGFzdCAmJiBsYXN0LT5ldmVudC5tYXNrID09IG1hc2sgJiYgbGFzdC0+ZXZlbnQud2QgPT0gd2F0Y2gtPndkICYmCi0JCQlsYXN0LT5ldmVudC5jb29raWUgPT0gY29va2llKSB7Ci0JCWNvbnN0IGNoYXIgKmxhc3RuYW1lID0gbGFzdC0+bmFtZTsKLQotCQlpZiAoIW5hbWUgJiYgIWxhc3RuYW1lKQotCQkJcmV0dXJuOwotCQlpZiAobmFtZSAmJiBsYXN0bmFtZSAmJiAhc3RyY21wKGxhc3RuYW1lLCBuYW1lKSkKLQkJCXJldHVybjsKLQl9Ci0KLQkvKiB0aGUgcXVldWUgb3ZlcmZsb3dlZCBhbmQgd2UgYWxyZWFkeSBzZW50IHRoZSBRX09WRVJGTE9XIGV2ZW50ICovCi0JaWYgKHVubGlrZWx5KGRldi0+ZXZlbnRfY291bnQgPiBkZXYtPm1heF9ldmVudHMpKQotCQlyZXR1cm47Ci0KLQkvKiBpZiB0aGUgcXVldWUgb3ZlcmZsb3dzLCB3ZSBuZWVkIHRvIG5vdGlmeSB1c2VyIHNwYWNlICovCi0JaWYgKHVubGlrZWx5KGRldi0+ZXZlbnRfY291bnQgPT0gZGV2LT5tYXhfZXZlbnRzKSkKLQkJa2V2ZW50ID0ga2VybmVsX2V2ZW50KC0xLCBJTl9RX09WRVJGTE9XLCBjb29raWUsIE5VTEwpOwotCWVsc2UKLQkJa2V2ZW50ID0ga2VybmVsX2V2ZW50KHdhdGNoLT53ZCwgbWFzaywgY29va2llLCBuYW1lKTsKLQotCWlmICh1bmxpa2VseSgha2V2ZW50KSkKLQkJcmV0dXJuOwotCi0JLyogcXVldWUgdGhlIGV2ZW50IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nICovCi0JZGV2LT5ldmVudF9jb3VudCsrOwotCWRldi0+cXVldWVfc2l6ZSArPSBzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpICsga2V2ZW50LT5ldmVudC5sZW47Ci0JbGlzdF9hZGRfdGFpbCgma2V2ZW50LT5saXN0LCAmZGV2LT5ldmVudHMpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53cSk7Ci19Ci0KLS8qCi0gKiByZW1vdmVfa2V2ZW50IC0gY2xlYW5zIHVwIGFuZCB1bHRpbWF0ZWx5IGZyZWVzIHRoZSBnaXZlbiBrZXZlbnQKLSAqCi0gKiBDYWxsZXIgbXVzdCBob2xkIGRldi0+bXV0ZXguCi0gKi8KLXN0YXRpYyB2b2lkIHJlbW92ZV9rZXZlbnQoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsCi0JCQkgIHN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAqa2V2ZW50KQotewotCWxpc3RfZGVsKCZrZXZlbnQtPmxpc3QpOwotCi0JZGV2LT5ldmVudF9jb3VudC0tOwotCWRldi0+cXVldWVfc2l6ZSAtPSBzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpICsga2V2ZW50LT5ldmVudC5sZW47Ci0KLQlrZnJlZShrZXZlbnQtPm5hbWUpOwotCWttZW1fY2FjaGVfZnJlZShldmVudF9jYWNoZXAsIGtldmVudCk7Ci19Ci0KLS8qCi0gKiBpbm90aWZ5X2Rldl9ldmVudF9kZXF1ZXVlIC0gZGVzdHJveSBhbiBldmVudCBvbiB0aGUgZ2l2ZW4gZGV2aWNlCi0gKgotICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPm11dGV4LgotICovCi1zdGF0aWMgdm9pZCBpbm90aWZ5X2Rldl9ldmVudF9kZXF1ZXVlKHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQotewotCWlmICghbGlzdF9lbXB0eSgmZGV2LT5ldmVudHMpKSB7Ci0JCXN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAqa2V2ZW50OwotCQlrZXZlbnQgPSBpbm90aWZ5X2Rldl9nZXRfZXZlbnQoZGV2KTsKLQkJcmVtb3ZlX2tldmVudChkZXYsIGtldmVudCk7Ci0JfQotfQotCi0vKgotICogaW5vdGlmeV9kZXZfZ2V0X3dkIC0gcmV0dXJucyB0aGUgbmV4dCBXRCBmb3IgdXNlIGJ5IHRoZSBnaXZlbiBkZXYKLSAqCi0gKiBDYWxsZXJzIG11c3QgaG9sZCBkZXYtPm11dGV4LiAgVGhpcyBmdW5jdGlvbiBjYW4gc2xlZXAuCi0gKi8KLXN0YXRpYyBpbnQgaW5vdGlmeV9kZXZfZ2V0X3dkKHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQorc3RhdGljIGludCBpbm90aWZ5X2hhbmRsZV9nZXRfd2Qoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQogewogCWludCByZXQ7CiAKIAlkbyB7Ci0JCWlmICh1bmxpa2VseSghaWRyX3ByZV9nZXQoJmRldi0+aWRyLCBHRlBfS0VSTkVMKSkpCisJCWlmICh1bmxpa2VseSghaWRyX3ByZV9nZXQoJmloLT5pZHIsIEdGUF9LRVJORUwpKSkKIAkJCXJldHVybiAtRU5PU1BDOwotCQlyZXQgPSBpZHJfZ2V0X25ld19hYm92ZSgmZGV2LT5pZHIsIHdhdGNoLCBkZXYtPmxhc3Rfd2QrMSwgJndhdGNoLT53ZCk7CisJCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZpaC0+aWRyLCB3YXRjaCwgaWgtPmxhc3Rfd2QrMSwgJndhdGNoLT53ZCk7CiAJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOwogCisJaWYgKGxpa2VseSghcmV0KSkKKwkJaWgtPmxhc3Rfd2QgPSB3YXRjaC0+d2Q7CisKIAlyZXR1cm4gcmV0OwogfQogCiAvKgotICogZmluZF9pbm9kZSAtIHJlc29sdmUgYSB1c2VyLWdpdmVuIHBhdGggdG8gYSBzcGVjaWZpYyBpbm9kZSBhbmQgcmV0dXJuIGEgbmQKLSAqLwotc3RhdGljIGludCBmaW5kX2lub2RlKGNvbnN0IGNoYXIgX191c2VyICpkaXJuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKLQkJICAgICAgdW5zaWduZWQgZmxhZ3MpCi17Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBfX3VzZXJfd2FsayhkaXJuYW1lLCBmbGFncywgbmQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCS8qIHlvdSBjYW4gb25seSB3YXRjaCBhbiBpbm9kZSBpZiB5b3UgaGF2ZSByZWFkIHBlcm1pc3Npb25zIG9uIGl0ICovCi0JZXJyb3IgPSB2ZnNfcGVybWlzc2lvbihuZCwgTUFZX1JFQUQpOwotCWlmIChlcnJvcikgCi0JCXBhdGhfcmVsZWFzZShuZCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKgogICogaW5vdGlmeV9pbm9kZV93YXRjaGVkIC0gcmV0dXJucyBub256ZXJvIGlmIHRoZXJlIGFyZSB3YXRjaGVzIG9uIHRoaXMgaW5vZGUKICAqIGFuZCB6ZXJvIG90aGVyd2lzZS4gIFdlIGNhbGwgdGhpcyBsb2NrbGVzcywgd2UgZG8gbm90IGNhcmUgaWYgd2UgcmFjZS4KICAqLwpAQCAtNDIyLDY3ICsxODgsMTggQEAKIH0KIAogLyoKLSAqIGNyZWF0ZV93YXRjaCAtIGNyZWF0ZXMgYSB3YXRjaCBvbiB0aGUgZ2l2ZW4gZGV2aWNlLgotICoKLSAqIENhbGxlcnMgbXVzdCBob2xkIGRldi0+bXV0ZXguICBDYWxscyBpbm90aWZ5X2Rldl9nZXRfd2QoKSBzbyBtYXkgc2xlZXAuCi0gKiBCb3RoICdkZXYnIGFuZCAnaW5vZGUnIChieSB3YXkgb2YgbmFtZWlkYXRhKSBuZWVkIHRvIGJlIHBpbm5lZC4KLSAqLwotc3RhdGljIHN0cnVjdCBpbm90aWZ5X3dhdGNoICpjcmVhdGVfd2F0Y2goc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsCi0JCQkJCSAgdTMyIG1hc2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoOwotCWludCByZXQ7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmRldi0+dXNlci0+aW5vdGlmeV93YXRjaGVzKSA+PQotCQkJaW5vdGlmeV9tYXhfdXNlcl93YXRjaGVzKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKLQotCXdhdGNoID0ga21lbV9jYWNoZV9hbGxvYyh3YXRjaF9jYWNoZXAsIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseSghd2F0Y2gpKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCXJldCA9IGlub3RpZnlfZGV2X2dldF93ZChkZXYsIHdhdGNoKTsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlrbWVtX2NhY2hlX2ZyZWUod2F0Y2hfY2FjaGVwLCB3YXRjaCk7Ci0JCXJldHVybiBFUlJfUFRSKHJldCk7Ci0JfQotCi0JZGV2LT5sYXN0X3dkID0gd2F0Y2gtPndkOwotCXdhdGNoLT5tYXNrID0gbWFzazsKLQlhdG9taWNfc2V0KCZ3YXRjaC0+Y291bnQsIDApOwotCUlOSVRfTElTVF9IRUFEKCZ3YXRjaC0+ZF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmd2F0Y2gtPmlfbGlzdCk7Ci0KLQkvKiBzYXZlIGEgcmVmZXJlbmNlIHRvIGRldmljZSBhbmQgYnVtcCB0aGUgY291bnQgdG8gbWFrZSBpdCBvZmZpY2lhbCAqLwotCWdldF9pbm90aWZ5X2RldihkZXYpOwotCXdhdGNoLT5kZXYgPSBkZXY7Ci0KLQkvKgotCSAqIFNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGlub2RlIGFuZCBidW1wIHRoZSByZWYgY291bnQgdG8gbWFrZSBpdAotCSAqIG9mZmljaWFsLiAgV2UgaG9sZCBhIHJlZmVyZW5jZSB0byBuYW1laWRhdGEsIHdoaWNoIG1ha2VzIHRoaXMgc2FmZS4KLQkgKi8KLQl3YXRjaC0+aW5vZGUgPSBpZ3JhYihpbm9kZSk7Ci0KLQkvKiBidW1wIG91ciBvd24gY291bnQsIGNvcnJlc3BvbmRpbmcgdG8gb3VyIGVudHJ5IGluIGRldi0+d2F0Y2hlcyAqLwotCWdldF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKLQotCWF0b21pY19pbmMoJmRldi0+dXNlci0+aW5vdGlmeV93YXRjaGVzKTsKLQotCXJldHVybiB3YXRjaDsKLX0KLQotLyoKLSAqIGlub3RpZnlfZmluZF9kZXYgLSBmaW5kIHRoZSB3YXRjaCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGlub2RlIGFuZCBkZXYKKyAqIGlub3RpZnlfZmluZF9oYW5kbGUgLSBmaW5kIHRoZSB3YXRjaCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGlub2RlIGFuZAorICogaGFuZGxlCiAgKgogICogQ2FsbGVycyBtdXN0IGhvbGQgaW5vZGUtPmlub3RpZnlfbXV0ZXguCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqaW5vZGVfZmluZF9kZXYoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgIHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBpbm90aWZ5X3dhdGNoICppbm9kZV9maW5kX2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgICAgc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCkKIHsKIAlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2g7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdhdGNoLCAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlcywgaV9saXN0KSB7Ci0JCWlmICh3YXRjaC0+ZGV2ID09IGRldikKKwkJaWYgKHdhdGNoLT5paCA9PSBpaCkKIAkJCXJldHVybiB3YXRjaDsKIAl9CiAKQEAgLTQ5MCw0MCArMjA3LDQwIEBACiB9CiAKIC8qCi0gKiByZW1vdmVfd2F0Y2hfbm9fZXZlbnQgLSByZW1vdmVfd2F0Y2goKSB3aXRob3V0IHRoZSBJTl9JR05PUkVEIGV2ZW50LgorICogcmVtb3ZlX3dhdGNoX25vX2V2ZW50IC0gcmVtb3ZlIHdhdGNoIHdpdGhvdXQgdGhlIElOX0lHTk9SRUQgZXZlbnQuCisgKgorICogQ2FsbGVycyBtdXN0IGhvbGQgYm90aCBpbm9kZS0+aW5vdGlmeV9tdXRleCBhbmQgaWgtPm11dGV4LgogICovCiBzdGF0aWMgdm9pZCByZW1vdmVfd2F0Y2hfbm9fZXZlbnQoc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLAotCQkJCSAgc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYpCisJCQkJICBzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQogewogCWxpc3RfZGVsKCZ3YXRjaC0+aV9saXN0KTsKLQlsaXN0X2RlbCgmd2F0Y2gtPmRfbGlzdCk7CisJbGlzdF9kZWwoJndhdGNoLT5oX2xpc3QpOwogCiAJaWYgKCFpbm90aWZ5X2lub2RlX3dhdGNoZWQod2F0Y2gtPmlub2RlKSkKIAkJc2V0X2RlbnRyeV9jaGlsZF9mbGFncyh3YXRjaC0+aW5vZGUsIDApOwogCi0JYXRvbWljX2RlYygmZGV2LT51c2VyLT5pbm90aWZ5X3dhdGNoZXMpOwotCWlkcl9yZW1vdmUoJmRldi0+aWRyLCB3YXRjaC0+d2QpOwotCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKKwlpZHJfcmVtb3ZlKCZpaC0+aWRyLCB3YXRjaC0+d2QpOwogfQogCi0vKgotICogcmVtb3ZlX3dhdGNoIC0gUmVtb3ZlIGEgd2F0Y2ggZnJvbSBib3RoIHRoZSBkZXZpY2UgYW5kIHRoZSBpbm9kZS4gIFNlbmRzCi0gKiB0aGUgSU5fSUdOT1JFRCBldmVudCB0byB0aGUgZ2l2ZW4gZGV2aWNlIHNpZ25pZnlpbmcgdGhhdCB0aGUgaW5vZGUgaXMgbm8KLSAqIGxvbmdlciB3YXRjaGVkLgorLyoqCisgKiBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQgLSBSZW1vdmUgYSB3YXRjaCBmcm9tIGJvdGggdGhlIGhhbmRsZSBhbmQgdGhlCisgKiBpbm9kZS4gIFNlbmRzIHRoZSBJTl9JR05PUkVEIGV2ZW50IHNpZ25pZnlpbmcgdGhhdCB0aGUgaW5vZGUgaXMgbm8gbG9uZ2VyCisgKiB3YXRjaGVkLiAgTWF5IGJlIGludm9rZWQgZnJvbSBhIGNhbGxlcidzIGV2ZW50IGhhbmRsZXIuCisgKiBAaWg6IGlub3RpZnkgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB3YXRjaAorICogQHdhdGNoOiB3YXRjaCB0byByZW1vdmUKICAqCi0gKiBDYWxsZXJzIG11c3QgaG9sZCBib3RoIGlub2RlLT5pbm90aWZ5X211dGV4IGFuZCBkZXYtPm11dGV4LiAgV2UgZHJvcCBhCi0gKiByZWZlcmVuY2UgdG8gdGhlIGlub2RlIGJlZm9yZSByZXR1cm5pbmcuCi0gKgotICogVGhlIGlub2RlIGlzIG5vdCBpcHV0KCkgc28gYXMgdG8gcmVtYWluIGF0b21pYy4gIElmIHRoZSBpbm9kZSBuZWVkcyB0byBiZQotICogaXB1dCgpLCB0aGUgY2FsbCByZXR1cm5zIG9uZS4gIE90aGVyd2lzZSwgaXQgcmV0dXJucyB6ZXJvLgorICogQ2FsbGVycyBtdXN0IGhvbGQgYm90aCBpbm9kZS0+aW5vdGlmeV9tdXRleCBhbmQgaWgtPm11dGV4LgogICovCi1zdGF0aWMgdm9pZCByZW1vdmVfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQordm9pZCBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQogewotCWlub3RpZnlfZGV2X3F1ZXVlX2V2ZW50KGRldiwgd2F0Y2gsIElOX0lHTk9SRUQsIDAsIE5VTEwpOwotCXJlbW92ZV93YXRjaF9ub19ldmVudCh3YXRjaCwgZGV2KTsKKwlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGloKTsKKwlpaC0+aW5fb3BzLT5oYW5kbGVfZXZlbnQod2F0Y2gsIHdhdGNoLT53ZCwgSU5fSUdOT1JFRCwgMCwgTlVMTCwgTlVMTCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQpOwogCi0vKiBLZXJuZWwgQVBJICovCisvKiBLZXJuZWwgQVBJIGZvciBwcm9kdWNpbmcgZXZlbnRzICovCiAKIC8qCiAgKiBpbm90aWZ5X2RfaW5zdGFudGlhdGUgLSBpbnN0YW50aWF0ZSBkY2FjaGUgZW50cnkgZm9yIGlub2RlCkBAIC01NjMsOSArMjgwLDEwIEBACiAgKiBAbWFzazogZXZlbnQgbWFzayBkZXNjcmliaW5nIHRoaXMgZXZlbnQKICAqIEBjb29raWU6IGNvb2tpZSBmb3Igc3luY2hyb25pemF0aW9uLCBvciB6ZXJvCiAgKiBAbmFtZTogZmlsZW5hbWUsIGlmIGFueQorICogQG5faW5vZGU6IGlub2RlIGFzc29jaWF0ZWQgd2l0aCBuYW1lCiAgKi8KIHZvaWQgaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbWFzaywgdTMyIGNvb2tpZSwKLQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lKQorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBpbm9kZSAqbl9pbm9kZSkKIHsKIAlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsICpuZXh0OwogCkBAIC01NzYsMTQgKzI5NCwxMyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3YXRjaCwgbmV4dCwgJmlub2RlLT5pbm90aWZ5X3dhdGNoZXMsIGlfbGlzdCkgewogCQl1MzIgd2F0Y2hfbWFzayA9IHdhdGNoLT5tYXNrOwogCQlpZiAod2F0Y2hfbWFzayAmIG1hc2spIHsKLQkJCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gd2F0Y2gtPmRldjsKLQkJCWdldF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKLQkJCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCQkJaW5vdGlmeV9kZXZfcXVldWVfZXZlbnQoZGV2LCB3YXRjaCwgbWFzaywgY29va2llLCBuYW1lKTsKKwkJCXN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWg9IHdhdGNoLT5paDsKKwkJCW11dGV4X2xvY2soJmloLT5tdXRleCk7CiAJCQlpZiAod2F0Y2hfbWFzayAmIElOX09ORVNIT1QpCi0JCQkJcmVtb3ZlX3dhdGNoX25vX2V2ZW50KHdhdGNoLCBkZXYpOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKLQkJCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKKwkJCQlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGloKTsKKwkJCWloLT5pbl9vcHMtPmhhbmRsZV9ldmVudCh3YXRjaCwgd2F0Y2gtPndkLCBtYXNrLCBjb29raWUsCisJCQkJCQkgbmFtZSwgbl9pbm9kZSk7CisJCQltdXRleF91bmxvY2soJmloLT5tdXRleCk7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CkBAIC02MTMsNyArMzMwLDggQEAKIAlpZiAoaW5vdGlmeV9pbm9kZV93YXRjaGVkKGlub2RlKSkgewogCQlkZ2V0KHBhcmVudCk7CiAJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIGNvb2tpZSwgbmFtZSk7CisJCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIGNvb2tpZSwgbmFtZSwKKwkJCQkJICBkZW50cnktPmRfaW5vZGUpOwogCQlkcHV0KHBhcmVudCk7CiAJfSBlbHNlCiAJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CkBAIC02NjUsNyArMzgzLDcgQEAKIAogCQluZWVkX2lwdXRfdG1wID0gbmVlZF9pcHV0OwogCQluZWVkX2lwdXQgPSBOVUxMOwotCQkvKiBJbiBjYXNlIHRoZSByZW1vdmVfd2F0Y2goKSBkcm9wcyBhIHJlZmVyZW5jZS4gKi8KKwkJLyogSW4gY2FzZSBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoKSBkcm9wcyBhIHJlZmVyZW5jZS4gKi8KIAkJaWYgKGlub2RlICE9IG5lZWRfaXB1dF90bXApCiAJCQlfX2lnZXQoaW5vZGUpOwogCQllbHNlCkBAIC02OTQsMTEgKzQxMiwxMiBAQAogCQltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJCXdhdGNoZXMgPSAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlczsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhdGNoLCBuZXh0X3csIHdhdGNoZXMsIGlfbGlzdCkgewotCQkJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYgPSB3YXRjaC0+ZGV2OwotCQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JCQlpbm90aWZ5X2Rldl9xdWV1ZV9ldmVudChkZXYsIHdhdGNoLCBJTl9VTk1PVU5ULDAsTlVMTCk7Ci0JCQlyZW1vdmVfd2F0Y2god2F0Y2gsIGRldik7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCQkJc3RydWN0IGlub3RpZnlfaGFuZGxlICppaD0gd2F0Y2gtPmloOworCQkJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKKwkJCWloLT5pbl9vcHMtPmhhbmRsZV9ldmVudCh3YXRjaCwgd2F0Y2gtPndkLCBJTl9VTk1PVU5ULCAwLAorCQkJCQkJIE5VTEwsIE5VTEwpOworCQkJaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKGloLCB3YXRjaCk7CisJCQltdXRleF91bmxvY2soJmloLT5tdXRleCk7CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJCWlwdXQoaW5vZGUpOwkJCkBAIC03MTgsNDMyICs0MzcsMjkyIEBACiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhdGNoLCBuZXh0LCAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlcywgaV9saXN0KSB7Ci0JCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gd2F0Y2gtPmRldjsKLQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JCXJlbW92ZV93YXRjaCh3YXRjaCwgZGV2KTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwkJc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCA9IHdhdGNoLT5paDsKKwkJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKKwkJaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKGloLCB3YXRjaCk7CisJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2lub2RlX2lzX2RlYWQpOwogCi0vKiBEZXZpY2UgSW50ZXJmYWNlICovCisvKiBLZXJuZWwgQ29uc3VtZXIgQVBJICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5vdGlmeV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQorLyoqCisgKiBpbm90aWZ5X2luaXQgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCisgKiBAb3BzOiBjYWxsZXIncyBpbm90aWZ5IG9wZXJhdGlvbnMKKyAqLworc3RydWN0IGlub3RpZnlfaGFuZGxlICppbm90aWZ5X2luaXQoY29uc3Qgc3RydWN0IGlub3RpZnlfb3BlcmF0aW9ucyAqb3BzKQogewotCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCByZXQgPSAwOworCXN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWg7CiAKLQlwb2xsX3dhaXQoZmlsZSwgJmRldi0+d3EsIHdhaXQpOwotCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCWlmICghbGlzdF9lbXB0eSgmZGV2LT5ldmVudHMpKQotCQlyZXQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJaWggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIWloKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlyZXR1cm4gcmV0OworCWlkcl9pbml0KCZpaC0+aWRyKTsKKwlJTklUX0xJU1RfSEVBRCgmaWgtPndhdGNoZXMpOworCW11dGV4X2luaXQoJmloLT5tdXRleCk7CisJaWgtPmxhc3Rfd2QgPSAwOworCWloLT5pbl9vcHMgPSBvcHM7CisJYXRvbWljX3NldCgmaWgtPmNvdW50LCAwKTsKKwlnZXRfaW5vdGlmeV9oYW5kbGUoaWgpOworCisJcmV0dXJuIGloOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9pbml0KTsKIAotc3RhdGljIHNzaXplX3QgaW5vdGlmeV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAotCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCisvKioKKyAqIGlub3RpZnlfaW5pdF93YXRjaCAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSB3YXRjaAorICogQHdhdGNoOiB3YXRjaCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgaW5vdGlmeV9pbml0X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKIHsKLQlzaXplX3QgZXZlbnRfc2l6ZSA9IHNpemVvZiAoc3RydWN0IGlub3RpZnlfZXZlbnQpOwotCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2OwotCWNoYXIgX191c2VyICpzdGFydDsKLQlpbnQgcmV0OwotCURFRklORV9XQUlUKHdhaXQpOwotCi0Jc3RhcnQgPSBidWY7Ci0JZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Jd2hpbGUgKDEpIHsKLQkJaW50IGV2ZW50czsKLQotCQlwcmVwYXJlX3RvX3dhaXQoJmRldi0+d3EsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0JCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCQlldmVudHMgPSAhbGlzdF9lbXB0eSgmZGV2LT5ldmVudHMpOwotCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCQlpZiAoZXZlbnRzKSB7Ci0JCQlyZXQgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXJldCA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmV0ID0gLUVJTlRSOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzY2hlZHVsZSgpOwotCX0KLQotCWZpbmlzaF93YWl0KCZkZXYtPndxLCAmd2FpdCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCXdoaWxlICgxKSB7Ci0JCXN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAqa2V2ZW50OwotCi0JCXJldCA9IGJ1ZiAtIHN0YXJ0OwotCQlpZiAobGlzdF9lbXB0eSgmZGV2LT5ldmVudHMpKQotCQkJYnJlYWs7Ci0KLQkJa2V2ZW50ID0gaW5vdGlmeV9kZXZfZ2V0X2V2ZW50KGRldik7Ci0JCWlmIChldmVudF9zaXplICsga2V2ZW50LT5ldmVudC5sZW4gPiBjb3VudCkKLQkJCWJyZWFrOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAma2V2ZW50LT5ldmVudCwgZXZlbnRfc2l6ZSkpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQotCQlidWYgKz0gZXZlbnRfc2l6ZTsKLQkJY291bnQgLT0gZXZlbnRfc2l6ZTsKLQotCQlpZiAoa2V2ZW50LT5uYW1lKSB7Ci0JCQlpZiAoY29weV90b191c2VyKGJ1Ziwga2V2ZW50LT5uYW1lLCBrZXZlbnQtPmV2ZW50LmxlbikpewotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlidWYgKz0ga2V2ZW50LT5ldmVudC5sZW47Ci0JCQljb3VudCAtPSBrZXZlbnQtPmV2ZW50LmxlbjsKLQkJfQotCi0JCXJlbW92ZV9rZXZlbnQoZGV2LCBrZXZlbnQpOwotCX0KLQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKKwlJTklUX0xJU1RfSEVBRCgmd2F0Y2gtPmhfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJndhdGNoLT5pX2xpc3QpOworCWF0b21pY19zZXQoJndhdGNoLT5jb3VudCwgMCk7CisJZ2V0X2lub3RpZnlfd2F0Y2god2F0Y2gpOyAvKiBpbml0aWFsIGdldCAqLwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9pbml0X3dhdGNoKTsKIAotc3RhdGljIGludCBpbm90aWZ5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppZ25vcmVkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKKy8qKgorICogaW5vdGlmeV9kZXN0cm95IC0gY2xlYW4gdXAgYW5kIGRlc3Ryb3kgYW4gaW5vdGlmeSBpbnN0YW5jZQorICogQGloOiBpbm90aWZ5IGhhbmRsZQorICovCit2b2lkIGlub3RpZnlfZGVzdHJveShzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQogewotCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCiAJLyoKLQkgKiBEZXN0cm95IGFsbCBvZiB0aGUgd2F0Y2hlcyBvbiB0aGlzIGRldmljZS4gIFVuZm9ydHVuYXRlbHksIG5vdCB2ZXJ5CisJICogRGVzdHJveSBhbGwgb2YgdGhlIHdhdGNoZXMgZm9yIHRoaXMgaGFuZGxlLiBVbmZvcnR1bmF0ZWx5LCBub3QgdmVyeQogCSAqIHByZXR0eS4gIFdlIGNhbm5vdCBkbyBhIHNpbXBsZSBpdGVyYXRpb24gb3ZlciB0aGUgbGlzdCwgYmVjYXVzZSB3ZQogCSAqIGRvIG5vdCBrbm93IHRoZSBpbm9kZSB1bnRpbCB3ZSBpdGVyYXRlIHRvIHRoZSB3YXRjaC4gIEJ1dCB3ZSBuZWVkIHRvCi0JICogaG9sZCBpbm9kZS0+aW5vdGlmeV9tdXRleCBiZWZvcmUgZGV2LT5tdXRleC4gIFRoZSBmb2xsb3dpbmcgd29ya3MuCisJICogaG9sZCBpbm9kZS0+aW5vdGlmeV9tdXRleCBiZWZvcmUgaWgtPm11dGV4LiAgVGhlIGZvbGxvd2luZyB3b3Jrcy4KIAkgKi8KIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2g7CiAJCXN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXM7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKLQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JCXdhdGNoZXMgPSAmZGV2LT53YXRjaGVzOworCQltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOworCQl3YXRjaGVzID0gJmloLT53YXRjaGVzOwogCQlpZiAobGlzdF9lbXB0eSh3YXRjaGVzKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwkJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKIAkJCWJyZWFrOwogCQl9Ci0JCXdhdGNoID0gbGlzdF9lbnRyeSh3YXRjaGVzLT5uZXh0LCBzdHJ1Y3QgaW5vdGlmeV93YXRjaCwgZF9saXN0KTsKKwkJd2F0Y2ggPSBsaXN0X2VudHJ5KHdhdGNoZXMtPm5leHQsIHN0cnVjdCBpbm90aWZ5X3dhdGNoLCBoX2xpc3QpOwogCQlnZXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKIAogCQlpbm9kZSA9IHdhdGNoLT5pbm9kZTsKIAkJbXV0ZXhfbG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwotCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKKwkJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKIAogCQkvKiBtYWtlIHN1cmUgd2UgZGlkbid0IHJhY2Ugd2l0aCBhbm90aGVyIGxpc3QgcmVtb3ZhbCAqLwotCQlpZiAobGlrZWx5KGlkcl9maW5kKCZkZXYtPmlkciwgd2F0Y2gtPndkKSkpCi0JCQlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGRldik7CisJCWlmIChsaWtlbHkoaWRyX2ZpbmQoJmloLT5pZHIsIHdhdGNoLT53ZCkpKSB7CisJCQlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGloKTsKKwkJCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKKwkJfQogCi0JCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKIAl9CiAKLQkvKiBkZXN0cm95IGFsbCBvZiB0aGUgZXZlbnRzIG9uIHRoaXMgZGV2aWNlICovCi0JbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXYtPmV2ZW50cykpCi0JCWlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUoZGV2KTsKLQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCi0JLyogZnJlZSB0aGlzIGRldmljZTogdGhlIHB1dCBtYXRjaGluZyB0aGUgZ2V0IGluIGlub3RpZnlfaW5pdCgpICovCi0JcHV0X2lub3RpZnlfZGV2KGRldik7Ci0KLQlyZXR1cm4gMDsKKwkvKiBmcmVlIHRoaXMgaGFuZGxlOiB0aGUgcHV0IG1hdGNoaW5nIHRoZSBnZXQgaW4gaW5vdGlmeV9pbml0KCkgKi8KKwlwdXRfaW5vdGlmeV9oYW5kbGUoaWgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9kZXN0cm95KTsKIAotLyoKLSAqIGlub3RpZnlfaWdub3JlIC0gcmVtb3ZlIGEgZ2l2ZW4gd2QgZnJvbSB0aGlzIGlub3RpZnkgaW5zdGFuY2UuCisvKioKKyAqIGlub3RpZnlfZmluZF93YXRjaCAtIGZpbmQgYW4gZXhpc3Rpbmcgd2F0Y2ggZm9yIGFuIChpaCxpbm9kZSkgcGFpcgorICogQGloOiBpbm90aWZ5IGhhbmRsZQorICogQGlub2RlOiBpbm9kZSB0byB3YXRjaAorICogQHdhdGNocDogcG9pbnRlciB0byBleGlzdGluZyBpbm90aWZ5X3dhdGNoCisgKgorICogQ2FsbGVyIG11c3QgcGluIGdpdmVuIGlub2RlICh2aWEgbmFtZWlkYXRhKS4KKyAqLworczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKip3YXRjaHApCit7CisJc3RydWN0IGlub3RpZnlfd2F0Y2ggKm9sZDsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOworCisJb2xkID0gaW5vZGVfZmluZF9oYW5kbGUoaW5vZGUsIGloKTsKKwlpZiAodW5saWtlbHkob2xkKSkgeworCQlnZXRfaW5vdGlmeV93YXRjaChvbGQpOyAvKiBjYWxsZXIgbXVzdCBwdXQgd2F0Y2ggKi8KKwkJKndhdGNocCA9IG9sZDsKKwkJcmV0ID0gb2xkLT53ZDsKKwl9CisKKwltdXRleF91bmxvY2soJmloLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9maW5kX3dhdGNoKTsKKworLyoqCisgKiBpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoIC0gZmluZCBhbmQgdXBkYXRlIHRoZSBtYXNrIG9mIGFuIGV4aXN0aW5nIHdhdGNoCisgKiBAaWg6IGlub3RpZnkgaGFuZGxlCisgKiBAaW5vZGU6IGlub2RlJ3Mgd2F0Y2ggdG8gdXBkYXRlCisgKiBAbWFzazogbWFzayBvZiBldmVudHMgdG8gd2F0Y2gKKyAqCisgKiBDYWxsZXIgbXVzdCBwaW4gZ2l2ZW4gaW5vZGUgKHZpYSBuYW1laWRhdGEpLgorICovCitzMzIgaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgdTMyIG1hc2spCit7CisJc3RydWN0IGlub3RpZnlfd2F0Y2ggKm9sZDsKKwlpbnQgbWFza19hZGQgPSAwOworCWludCByZXQ7CisKKwlpZiAobWFzayAmIElOX01BU0tfQUREKQorCQltYXNrX2FkZCA9IDE7CisKKwkvKiBkb24ndCBhbGxvdyBpbnZhbGlkIGJpdHM6IHdlIGRvbid0IHdhbnQgZmxhZ3Mgc2V0ICovCisJbWFzayAmPSBJTl9BTExfRVZFTlRTIHwgSU5fT05FU0hPVDsKKwlpZiAodW5saWtlbHkoIW1hc2spKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOworCisJLyoKKwkgKiBIYW5kbGUgdGhlIGNhc2Ugb2YgcmUtYWRkaW5nIGEgd2F0Y2ggb24gYW4gKGlub2RlLGloKSBwYWlyIHRoYXQgd2UKKwkgKiBhcmUgYWxyZWFkeSB3YXRjaGluZy4gIFdlIGp1c3QgdXBkYXRlIHRoZSBtYXNrIGFuZCByZXR1cm4gaXRzIHdkLgorCSAqLworCW9sZCA9IGlub2RlX2ZpbmRfaGFuZGxlKGlub2RlLCBpaCk7CisJaWYgKHVubGlrZWx5KCFvbGQpKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtYXNrX2FkZCkKKwkJb2xkLT5tYXNrIHw9IG1hc2s7CisJZWxzZQorCQlvbGQtPm1hc2sgPSBtYXNrOworCXJldCA9IG9sZC0+d2Q7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoKTsKKworLyoqCisgKiBpbm90aWZ5X2FkZF93YXRjaCAtIGFkZCBhIHdhdGNoIHRvIGFuIGlub3RpZnkgaW5zdGFuY2UKKyAqIEBpaDogaW5vdGlmeSBoYW5kbGUKKyAqIEB3YXRjaDogY2FsbGVyIGFsbG9jYXRlZCB3YXRjaCBzdHJ1Y3R1cmUKKyAqIEBpbm9kZTogaW5vZGUgdG8gd2F0Y2gKKyAqIEBtYXNrOiBtYXNrIG9mIGV2ZW50cyB0byB3YXRjaAorICoKKyAqIENhbGxlciBtdXN0IHBpbiBnaXZlbiBpbm9kZSAodmlhIG5hbWVpZGF0YSkuCisgKiBDYWxsZXIgbXVzdCBlbnN1cmUgaXQgb25seSBjYWxscyBpbm90aWZ5X2FkZF93YXRjaCgpIG9uY2UgcGVyIHdhdGNoLgorICogQ2FsbHMgaW5vdGlmeV9oYW5kbGVfZ2V0X3dkKCkgc28gbWF5IHNsZWVwLgorICovCitzMzIgaW5vdGlmeV9hZGRfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLAorCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbWFzaykKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qIGRvbid0IGFsbG93IGludmFsaWQgYml0czogd2UgZG9uJ3Qgd2FudCBmbGFncyBzZXQgKi8KKwltYXNrICY9IElOX0FMTF9FVkVOVFMgfCBJTl9PTkVTSE9UOworCWlmICh1bmxpa2VseSghbWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCXdhdGNoLT5tYXNrID0gbWFzazsKKworCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOworCisJLyogSW5pdGlhbGl6ZSBhIG5ldyB3YXRjaCAqLworCXJldCA9IGlub3RpZnlfaGFuZGxlX2dldF93ZChpaCwgd2F0Y2gpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91dDsKKwlyZXQgPSB3YXRjaC0+d2Q7CisKKwkvKiBzYXZlIGEgcmVmZXJlbmNlIHRvIGhhbmRsZSBhbmQgYnVtcCB0aGUgY291bnQgdG8gbWFrZSBpdCBvZmZpY2lhbCAqLworCWdldF9pbm90aWZ5X2hhbmRsZShpaCk7CisJd2F0Y2gtPmloID0gaWg7CisKKwkvKgorCSAqIFNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGlub2RlIGFuZCBidW1wIHRoZSByZWYgY291bnQgdG8gbWFrZSBpdAorCSAqIG9mZmljaWFsLiAgV2UgaG9sZCBhIHJlZmVyZW5jZSB0byBuYW1laWRhdGEsIHdoaWNoIG1ha2VzIHRoaXMgc2FmZS4KKwkgKi8KKwl3YXRjaC0+aW5vZGUgPSBpZ3JhYihpbm9kZSk7CisKKwlpZiAoIWlub3RpZnlfaW5vZGVfd2F0Y2hlZChpbm9kZSkpCisJCXNldF9kZW50cnlfY2hpbGRfZmxhZ3MoaW5vZGUsIDEpOworCisJLyogQWRkIHRoZSB3YXRjaCB0byB0aGUgaGFuZGxlJ3MgYW5kIHRoZSBpbm9kZSdzIGxpc3QgKi8KKwlsaXN0X2FkZCgmd2F0Y2gtPmhfbGlzdCwgJmloLT53YXRjaGVzKTsKKwlsaXN0X2FkZCgmd2F0Y2gtPmlfbGlzdCwgJmlub2RlLT5pbm90aWZ5X3dhdGNoZXMpOworb3V0OgorCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9hZGRfd2F0Y2gpOworCisvKioKKyAqIGlub3RpZnlfcm1fd2QgLSByZW1vdmUgYSB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKKyAqIEBpaDogaW5vdGlmeSBoYW5kbGUKKyAqIEB3ZDogd2F0Y2ggZGVzY3JpcHRvciB0byByZW1vdmUKICAqCiAgKiBDYW4gc2xlZXAuCiAgKi8KLXN0YXRpYyBpbnQgaW5vdGlmeV9pZ25vcmUoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsIHMzMiB3ZCkKK2ludCBpbm90aWZ5X3JtX3dkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsIHUzMiB3ZCkKIHsKIAlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2g7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAotCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCXdhdGNoID0gaWRyX2ZpbmQoJmRldi0+aWRyLCB3ZCk7CisJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKKwl3YXRjaCA9IGlkcl9maW5kKCZpaC0+aWRyLCB3ZCk7CiAJaWYgKHVubGlrZWx5KCF3YXRjaCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZ2V0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwogCWlub2RlID0gd2F0Y2gtPmlub2RlOwotCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwotCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOworCW11dGV4X2xvY2soJmloLT5tdXRleCk7CiAKIAkvKiBtYWtlIHN1cmUgdGhhdCB3ZSBkaWQgbm90IHJhY2UgKi8KLQlpZiAobGlrZWx5KGlkcl9maW5kKCZkZXYtPmlkciwgd2QpID09IHdhdGNoKSkKLQkJcmVtb3ZlX3dhdGNoKHdhdGNoLCBkZXYpOworCWlmIChsaWtlbHkoaWRyX2ZpbmQoJmloLT5pZHIsIHdkKSA9PSB3YXRjaCkpCisJCWlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChpaCwgd2F0Y2gpOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmloLT5tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJcHV0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X3JtX3dkKTsKIAotc3RhdGljIGxvbmcgaW5vdGlmeV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCisvKioKKyAqIGlub3RpZnlfcm1fd2F0Y2ggLSByZW1vdmUgYSB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKKyAqIEBpaDogaW5vdGlmeSBoYW5kbGUKKyAqIEB3YXRjaDogd2F0Y2ggdG8gcmVtb3ZlCisgKgorICogQ2FuIHNsZWVwLgorICovCitpbnQgaW5vdGlmeV9ybV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKIHsKLQlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldjsKLQl2b2lkIF9fdXNlciAqcDsKLQlpbnQgcmV0ID0gLUVOT1RUWTsKLQotCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlwID0gKHZvaWQgX191c2VyICopIGFyZzsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBGSU9OUkVBRDoKLQkJcmV0ID0gcHV0X3VzZXIoZGV2LT5xdWV1ZV9zaXplLCAoaW50IF9fdXNlciAqKSBwKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gaW5vdGlmeV9ybV93ZChpaCwgd2F0Y2gtPndkKTsKIH0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW5vdGlmeV9mb3BzID0gewotCS5wb2xsICAgICAgICAgICA9IGlub3RpZnlfcG9sbCwKLQkucmVhZCAgICAgICAgICAgPSBpbm90aWZ5X3JlYWQsCi0JLnJlbGVhc2UgICAgICAgID0gaW5vdGlmeV9yZWxlYXNlLAotCS51bmxvY2tlZF9pb2N0bCA9IGlub3RpZnlfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bAk9IGlub3RpZnlfaW9jdGwsCi19OwotCi1hc21saW5rYWdlIGxvbmcgc3lzX2lub3RpZnlfaW5pdCh2b2lkKQotewotCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2OwotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKLQlzdHJ1Y3QgZmlsZSAqZmlscDsJCi0JaW50IGZkLCByZXQ7Ci0KLQlmZCA9IGdldF91bnVzZWRfZmQoKTsKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gZmQ7Ci0KLQlmaWxwID0gZ2V0X2VtcHR5X2ZpbHAoKTsKLQlpZiAoIWZpbHApIHsKLQkJcmV0ID0gLUVORklMRTsKLQkJZ290byBvdXRfcHV0X2ZkOwotCX0KLQotCXVzZXIgPSBnZXRfdWlkKGN1cnJlbnQtPnVzZXIpOwotCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmdXNlci0+aW5vdGlmeV9kZXZzKSA+PQotCQkJaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMpKSB7Ci0JCXJldCA9IC1FTUZJTEU7Ci0JCWdvdG8gb3V0X2ZyZWVfdWlkOwotCX0KLQotCWRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X2RldmljZSksIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseSghZGV2KSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX3VpZDsKLQl9Ci0KLQlmaWxwLT5mX29wID0gJmlub3RpZnlfZm9wczsKLQlmaWxwLT5mX3Zmc21udCA9IG1udGdldChpbm90aWZ5X21udCk7Ci0JZmlscC0+Zl9kZW50cnkgPSBkZ2V0KGlub3RpZnlfbW50LT5tbnRfcm9vdCk7Ci0JZmlscC0+Zl9tYXBwaW5nID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKLQlmaWxwLT5mX21vZGUgPSBGTU9ERV9SRUFEOwotCWZpbHAtPmZfZmxhZ3MgPSBPX1JET05MWTsKLQlmaWxwLT5wcml2YXRlX2RhdGEgPSBkZXY7Ci0KLQlpZHJfaW5pdCgmZGV2LT5pZHIpOwotCUlOSVRfTElTVF9IRUFEKCZkZXYtPmV2ZW50cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRldi0+d2F0Y2hlcyk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53cSk7Ci0JbXV0ZXhfaW5pdCgmZGV2LT5tdXRleCk7Ci0JZGV2LT5ldmVudF9jb3VudCA9IDA7Ci0JZGV2LT5xdWV1ZV9zaXplID0gMDsKLQlkZXYtPm1heF9ldmVudHMgPSBpbm90aWZ5X21heF9xdWV1ZWRfZXZlbnRzOwotCWRldi0+dXNlciA9IHVzZXI7Ci0JZGV2LT5sYXN0X3dkID0gMDsKLQlhdG9taWNfc2V0KCZkZXYtPmNvdW50LCAwKTsKLQotCWdldF9pbm90aWZ5X2RldihkZXYpOwotCWF0b21pY19pbmMoJnVzZXItPmlub3RpZnlfZGV2cyk7Ci0JZmRfaW5zdGFsbChmZCwgZmlscCk7Ci0KLQlyZXR1cm4gZmQ7Ci1vdXRfZnJlZV91aWQ6Ci0JZnJlZV91aWQodXNlcik7Ci0JcHV0X2ZpbHAoZmlscCk7Ci1vdXRfcHV0X2ZkOgotCXB1dF91bnVzZWRfZmQoZmQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZyBzeXNfaW5vdGlmeV9hZGRfd2F0Y2goaW50IGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aCwgdTMyIG1hc2spCi17Ci0Jc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLCAqb2xkOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKLQlzdHJ1Y3QgZmlsZSAqZmlscDsKLQlpbnQgcmV0LCBmcHV0X25lZWRlZDsKLQlpbnQgbWFza19hZGQgPSAwOwotCXVuc2lnbmVkIGZsYWdzID0gMDsKLQotCWZpbHAgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOwotCWlmICh1bmxpa2VseSghZmlscCkpCi0JCXJldHVybiAtRUJBREY7Ci0KLQkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIGluZGVlZCBhbiBpbm90aWZ5IGluc3RhbmNlICovCi0JaWYgKHVubGlrZWx5KGZpbHAtPmZfb3AgIT0gJmlub3RpZnlfZm9wcykpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBmcHV0X2FuZF9vdXQ7Ci0JfQotCi0JaWYgKCEobWFzayAmIElOX0RPTlRfRk9MTE9XKSkKLQkJZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVzsKLQlpZiAobWFzayAmIElOX09OTFlESVIpCi0JCWZsYWdzIHw9IExPT0tVUF9ESVJFQ1RPUlk7Ci0KLQlyZXQgPSBmaW5kX2lub2RlKHBhdGgsICZuZCwgZmxhZ3MpOwotCWlmICh1bmxpa2VseShyZXQpKQotCQlnb3RvIGZwdXRfYW5kX291dDsKLQotCS8qIGlub2RlIGhlbGQgaW4gcGxhY2UgYnkgcmVmZXJlbmNlIHRvIG5kOyBkZXYgYnkgZmdldCBvbiBmZCAqLwotCWlub2RlID0gbmQuZGVudHJ5LT5kX2lub2RlOwotCWRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQotCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKLQotCWlmIChtYXNrICYgSU5fTUFTS19BREQpCi0JCW1hc2tfYWRkID0gMTsKLQotCS8qIGRvbid0IGxldCB1c2VyLXNwYWNlIHNldCBpbnZhbGlkIGJpdHM6IHdlIGRvbid0IHdhbnQgZmxhZ3Mgc2V0ICovCi0JbWFzayAmPSBJTl9BTExfRVZFTlRTIHwgSU5fT05FU0hPVDsKLQlpZiAodW5saWtlbHkoIW1hc2spKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogSGFuZGxlIHRoZSBjYXNlIG9mIHJlLWFkZGluZyBhIHdhdGNoIG9uIGFuIChpbm9kZSxkZXYpIHBhaXIgdGhhdCB3ZQotCSAqIGFyZSBhbHJlYWR5IHdhdGNoaW5nLiAgV2UganVzdCB1cGRhdGUgdGhlIG1hc2sgYW5kIHJldHVybiBpdHMgd2QuCi0JICovCi0Jb2xkID0gaW5vZGVfZmluZF9kZXYoaW5vZGUsIGRldik7Ci0JaWYgKHVubGlrZWx5KG9sZCkpIHsKLQkJaWYgKG1hc2tfYWRkKQotCQkJb2xkLT5tYXNrIHw9IG1hc2s7Ci0JCWVsc2UKLQkJCW9sZC0+bWFzayA9IG1hc2s7Ci0JCXJldCA9IG9sZC0+d2Q7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdhdGNoID0gY3JlYXRlX3dhdGNoKGRldiwgbWFzaywgaW5vZGUpOwotCWlmICh1bmxpa2VseShJU19FUlIod2F0Y2gpKSkgewotCQlyZXQgPSBQVFJfRVJSKHdhdGNoKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKCFpbm90aWZ5X2lub2RlX3dhdGNoZWQoaW5vZGUpKQotCQlzZXRfZGVudHJ5X2NoaWxkX2ZsYWdzKGlub2RlLCAxKTsKLQotCS8qIEFkZCB0aGUgd2F0Y2ggdG8gdGhlIGRldmljZSdzIGFuZCB0aGUgaW5vZGUncyBsaXN0ICovCi0JbGlzdF9hZGQoJndhdGNoLT5kX2xpc3QsICZkZXYtPndhdGNoZXMpOwotCWxpc3RfYWRkKCZ3YXRjaC0+aV9saXN0LCAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlcyk7Ci0JcmV0ID0gd2F0Y2gtPndkOwotb3V0OgotCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7Ci0JcGF0aF9yZWxlYXNlKCZuZCk7Ci1mcHV0X2FuZF9vdXQ6Ci0JZnB1dF9saWdodChmaWxwLCBmcHV0X25lZWRlZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBsb25nIHN5c19pbm90aWZ5X3JtX3dhdGNoKGludCBmZCwgdTMyIHdkKQotewotCXN0cnVjdCBmaWxlICpmaWxwOwotCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2OwotCWludCByZXQsIGZwdXRfbmVlZGVkOwotCi0JZmlscCA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7Ci0JaWYgKHVubGlrZWx5KCFmaWxwKSkKLQkJcmV0dXJuIC1FQkFERjsKLQotCS8qIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIGFuIGlub3RpZnkgaW5zdGFuY2UgKi8KLQlpZiAodW5saWtlbHkoZmlscC0+Zl9vcCAhPSAmaW5vdGlmeV9mb3BzKSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0ID0gaW5vdGlmeV9pZ25vcmUoZGV2LCB3ZCk7Ci0KLW91dDoKLQlmcHV0X2xpZ2h0KGZpbHAsIGZwdXRfbmVlZGVkKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICoKLWlub3RpZnlfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCi0JICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQotewotICAgIHJldHVybiBnZXRfc2JfcHNldWRvKGZzX3R5cGUsICJpbm90aWZ5IiwgTlVMTCwgMHhCQUQxREVBKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGlub3RpZnlfZnNfdHlwZSA9IHsKLSAgICAubmFtZSAgICAgICAgICAgPSAiaW5vdGlmeWZzIiwKLSAgICAuZ2V0X3NiICAgICAgICAgPSBpbm90aWZ5X2dldF9zYiwKLSAgICAua2lsbF9zYiAgICAgICAgPSBraWxsX2Fub25fc3VwZXIsCi19OworRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9ybV93YXRjaCk7CiAKIC8qCi0gKiBpbm90aWZ5X3NldHVwIC0gT3VyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAgTm90ZSB0aGF0IHdlIGNhbm5ub3QgcmV0dXJuCi0gKiBlcnJvciBiZWNhdXNlIHdlIGhhdmUgY29tcGlsZWQtaW4gVkZTIGhvb2tzLiAgU28gYW4gKHVubGlrZWx5KSBmYWlsdXJlIGhlcmUKLSAqIG11c3QgcmVzdWx0IGluIHBhbmljKCkuCisgKiBpbm90aWZ5X3NldHVwIC0gY29yZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgogICovCiBzdGF0aWMgaW50IF9faW5pdCBpbm90aWZ5X3NldHVwKHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmlub3RpZnlfZnNfdHlwZSk7Ci0JaWYgKHVubGlrZWx5KHJldCkpCi0JCXBhbmljKCJpbm90aWZ5OiByZWdpc3Rlcl9maWxlc3lzdGVtIHJldHVybmVkICVkIVxuIiwgcmV0KTsKLQotCWlub3RpZnlfbW50ID0ga2Vybl9tb3VudCgmaW5vdGlmeV9mc190eXBlKTsKLQlpZiAoSVNfRVJSKGlub3RpZnlfbW50KSkKLQkJcGFuaWMoImlub3RpZnk6IGtlcm5fbW91bnQgcmV0ICVsZCFcbiIsIFBUUl9FUlIoaW5vdGlmeV9tbnQpKTsKLQotCWlub3RpZnlfbWF4X3F1ZXVlZF9ldmVudHMgPSAxNjM4NDsKLQlpbm90aWZ5X21heF91c2VyX2luc3RhbmNlcyA9IDEyODsKLQlpbm90aWZ5X21heF91c2VyX3dhdGNoZXMgPSA4MTkyOwotCiAJYXRvbWljX3NldCgmaW5vdGlmeV9jb29raWUsIDApOwogCi0Jd2F0Y2hfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImlub3RpZnlfd2F0Y2hfY2FjaGUiLAotCQkJCQkgc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X3dhdGNoKSwKLQkJCQkJIDAsIFNMQUJfUEFOSUMsIE5VTEwsIE5VTEwpOwotCWV2ZW50X2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJpbm90aWZ5X2V2ZW50X2NhY2hlIiwKLQkJCQkJIHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQpLAotCQkJCQkgMCwgU0xBQl9QQU5JQywgTlVMTCwgTlVMTCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvaW5vdGlmeV91c2VyLmMgYi9mcy9pbm90aWZ5X3VzZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTk5MzFlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvaW5vdGlmeV91c2VyLmMKQEAgLTAsMCArMSw3MTkgQEAKKy8qCisgKiBmcy9pbm90aWZ5X3VzZXIuYyAtIGlub3RpZnkgc3VwcG9ydCBmb3IgdXNlcnNwYWNlCisgKgorICogQXV0aG9yczoKKyAqCUpvaG4gTWNDdXRjaGFuCTx0dGJAdGVudGFjbGUuZGhzLm9yZz4KKyAqCVJvYmVydCBMb3ZlCTxybWxAbm92ZWxsLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSm9obiBNY0N1dGNoYW4KKyAqIENvcHlyaWdodCAyMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisKKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisKK3N0YXRpYyBrbWVtX2NhY2hlX3QgKndhdGNoX2NhY2hlcCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGttZW1fY2FjaGVfdCAqZXZlbnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmlub3RpZnlfbW50IF9fcmVhZF9tb3N0bHk7CisKKy8qIHRoZXNlIGFyZSBjb25maWd1cmFibGUgdmlhIC9wcm9jL3N5cy9mcy9pbm90aWZ5LyAqLworaW50IGlub3RpZnlfbWF4X3VzZXJfaW5zdGFuY2VzIF9fcmVhZF9tb3N0bHk7CitpbnQgaW5vdGlmeV9tYXhfdXNlcl93YXRjaGVzIF9fcmVhZF9tb3N0bHk7CitpbnQgaW5vdGlmeV9tYXhfcXVldWVkX2V2ZW50cyBfX3JlYWRfbW9zdGx5OworCisvKgorICogTG9jayBvcmRlcmluZzoKKyAqCisgKiBpbm90aWZ5X2Rldi0+dXBfbXV0ZXggKGVuc3VyZXMgd2UgZG9uJ3QgcmUtYWRkIHRoZSBzYW1lIHdhdGNoKQorICogCWlub2RlLT5pbm90aWZ5X211dGV4IChwcm90ZWN0cyBpbm9kZSdzIHdhdGNoIGxpc3QpCisgKiAJCWlub3RpZnlfaGFuZGxlLT5tdXRleCAocHJvdGVjdHMgaW5vdGlmeV9oYW5kbGUncyB3YXRjaCBsaXN0KQorICogCQkJaW5vdGlmeV9kZXYtPmV2X211dGV4IChwcm90ZWN0cyBkZXZpY2UncyBldmVudCBxdWV1ZSkKKyAqLworCisvKgorICogTGlmZXRpbWVzIG9mIHRoZSBtYWluIGRhdGEgc3RydWN0dXJlczoKKyAqCisgKiBpbm90aWZ5X2RldmljZTogTGlmZXRpbWUgaXMgbWFuYWdlZCBieSByZWZlcmVuY2UgY291bnQsIGZyb20KKyAqIHN5c19pbm90aWZ5X2luaXQoKSB1bnRpbCByZWxlYXNlLiAgQWRkaXRpb25hbCByZWZlcmVuY2VzIGNhbiBidW1wIHRoZSBjb3VudAorICogdmlhIGdldF9pbm90aWZ5X2RldigpIGFuZCBkcm9wIHRoZSBjb3VudCB2aWEgcHV0X2lub3RpZnlfZGV2KCkuCisgKgorICogaW5vdGlmeV91c2VyX3dhdGNoOiBMaWZldGltZSBpcyBmcm9tIGNyZWF0ZV93YXRjaCgpIHRvIHRoZSByZWNlaXB0IG9mIGFuCisgKiBJTl9JR05PUkVEIGV2ZW50IGZyb20gaW5vdGlmeSwgb3Igd2hlbiB1c2luZyBJTl9PTkVTSE9ULCB0byByZWNlaXB0IG9mIHRoZQorICogZmlyc3QgZXZlbnQsIG9yIHRvIGlub3RpZnlfZGVzdHJveSgpLgorICovCisKKy8qCisgKiBzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgLSByZXByZXNlbnRzIGFuIGlub3RpZnkgaW5zdGFuY2UKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBwcm90ZWN0ZWQgYnkgdGhlIG11dGV4ICdtdXRleCcuCisgKi8KK3N0cnVjdCBpbm90aWZ5X2RldmljZSB7CisJd2FpdF9xdWV1ZV9oZWFkX3QgCXdxOwkJLyogd2FpdCBxdWV1ZSBmb3IgaS9vICovCisJc3RydWN0IG11dGV4CQlldl9tdXRleDsJLyogcHJvdGVjdHMgZXZlbnQgcXVldWUgKi8KKwlzdHJ1Y3QgbXV0ZXgJCXVwX211dGV4OwkvKiBzeW5jaHJvbml6ZXMgd2F0Y2ggdXBkYXRlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgCWV2ZW50czsJCS8qIGxpc3Qgb2YgcXVldWVkIGV2ZW50cyAqLworCWF0b21pY190CQljb3VudDsJCS8qIHJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCB1c2VyX3N0cnVjdAkqdXNlcjsJCS8qIHVzZXIgd2hvIG9wZW5lZCB0aGlzIGRldiAqLworCXN0cnVjdCBpbm90aWZ5X2hhbmRsZQkqaWg7CQkvKiBpbm90aWZ5IGhhbmRsZSAqLworCXVuc2lnbmVkIGludAkJcXVldWVfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgcXVldWUgKGJ5dGVzKSAqLworCXVuc2lnbmVkIGludAkJZXZlbnRfY291bnQ7CS8qIG51bWJlciBvZiBwZW5kaW5nIGV2ZW50cyAqLworCXVuc2lnbmVkIGludAkJbWF4X2V2ZW50czsJLyogbWF4aW11bSBudW1iZXIgb2YgZXZlbnRzICovCit9OworCisvKgorICogc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50IC0gQW4gaW5vdGlmeSBldmVudCwgb3JpZ2luYXRpbmcgZnJvbSBhIHdhdGNoIGFuZAorICogcXVldWVkIGZvciB1c2VyLXNwYWNlLiAgQSBsaXN0IG9mIHRoZXNlIGlzIGF0dGFjaGVkIHRvIGVhY2ggaW5zdGFuY2Ugb2YgdGhlCisgKiBkZXZpY2UuICBJbiByZWFkKCksIHRoaXMgbGlzdCBpcyB3YWxrZWQgYW5kIGFsbCBldmVudHMgdGhhdCBjYW4gZml0IGluIHRoZQorICogYnVmZmVyIGFyZSByZXR1cm5lZC4KKyAqCisgKiBQcm90ZWN0ZWQgYnkgZGV2LT5ldl9tdXRleCBvZiB0aGUgZGV2aWNlIGluIHdoaWNoIHdlIGFyZSBxdWV1ZWQuCisgKi8KK3N0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCB7CisJc3RydWN0IGlub3RpZnlfZXZlbnQJZXZlbnQ7CS8qIHRoZSB1c2VyLXNwYWNlIGV2ZW50ICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsJLyogZW50cnkgaW4gaW5vdGlmeV9kZXZpY2UncyBsaXN0ICovCisJY2hhcgkJCSpuYW1lOwkvKiBmaWxlbmFtZSwgaWYgYW55ICovCit9OworCisvKgorICogc3RydWN0IGlub3RpZnlfdXNlcl93YXRjaCAtIG91ciB2ZXJzaW9uIG9mIGFuIGlub3RpZnlfd2F0Y2gsIHdlIGFkZAorICogYSByZWZlcmVuY2UgdG8gdGhlIGFzc29jaWF0ZWQgaW5vdGlmeV9kZXZpY2UuCisgKi8KK3N0cnVjdCBpbm90aWZ5X3VzZXJfd2F0Y2ggeworCXN0cnVjdCBpbm90aWZ5X2RldmljZQkqZGV2OwkvKiBhc3NvY2lhdGVkIGRldmljZSAqLworCXN0cnVjdCBpbm90aWZ5X3dhdGNoCXdkYXRhOwkvKiBpbm90aWZ5IHdhdGNoIGRhdGEgKi8KK307CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisKKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKworc3RhdGljIGludCB6ZXJvOworCitjdGxfdGFibGUgaW5vdGlmeV90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gSU5PVElGWV9NQVhfVVNFUl9JTlNUQU5DRVMsCisJCS5wcm9jbmFtZQk9ICJtYXhfdXNlcl9pbnN0YW5jZXMiLAorCQkuZGF0YQkJPSAmaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBJTk9USUZZX01BWF9VU0VSX1dBVENIRVMsCisJCS5wcm9jbmFtZQk9ICJtYXhfdXNlcl93YXRjaGVzIiwKKwkJLmRhdGEJCT0gJmlub3RpZnlfbWF4X3VzZXJfd2F0Y2hlcywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCisJCS5leHRyYTEJCT0gJnplcm8sCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IElOT1RJRllfTUFYX1FVRVVFRF9FVkVOVFMsCisJCS5wcm9jbmFtZQk9ICJtYXhfcXVldWVkX2V2ZW50cyIsCisJCS5kYXRhCQk9ICZpbm90aWZ5X21heF9xdWV1ZWRfZXZlbnRzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKKwkJLmV4dHJhMQkJPSAmemVybworCX0sCisJeyAuY3RsX25hbWUgPSAwIH0KK307CisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2lub3RpZnlfZGV2KHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQoreworCWF0b21pY19pbmMoJmRldi0+Y291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2lub3RpZnlfZGV2KHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPmNvdW50KSkgeworCQlhdG9taWNfZGVjKCZkZXYtPnVzZXItPmlub3RpZnlfZGV2cyk7CisJCWZyZWVfdWlkKGRldi0+dXNlcik7CisJCWtmcmVlKGRldik7CisJfQorfQorCisvKgorICogZnJlZV9pbm90aWZ5X3VzZXJfd2F0Y2ggLSBjbGVhbnMgdXAgdGhlIHdhdGNoIGFuZCBpdHMgcmVmZXJlbmNlcworICovCitzdGF0aWMgdm9pZCBmcmVlX2lub3RpZnlfdXNlcl93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqdykKK3sKKwlzdHJ1Y3QgaW5vdGlmeV91c2VyX3dhdGNoICp3YXRjaDsKKwlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldjsKKworCXdhdGNoID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBpbm90aWZ5X3VzZXJfd2F0Y2gsIHdkYXRhKTsKKwlkZXYgPSB3YXRjaC0+ZGV2OworCisJYXRvbWljX2RlYygmZGV2LT51c2VyLT5pbm90aWZ5X3dhdGNoZXMpOworCXB1dF9pbm90aWZ5X2RldihkZXYpOworCWttZW1fY2FjaGVfZnJlZSh3YXRjaF9jYWNoZXAsIHdhdGNoKTsKK30KKworLyoKKyAqIGtlcm5lbF9ldmVudCAtIGNyZWF0ZSBhIG5ldyBrZXJuZWwgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycworICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIHNsZWVwLgorICovCitzdGF0aWMgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICoga2VybmVsX2V2ZW50KHMzMiB3ZCwgdTMyIG1hc2ssIHUzMiBjb29raWUsCisJCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQ7CisKKwlrZXZlbnQgPSBrbWVtX2NhY2hlX2FsbG9jKGV2ZW50X2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFrZXZlbnQpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHdlIGhhbmQgdGhpcyBvdXQgdG8gdXNlci1zcGFjZSwgc28gemVybyBpdCBqdXN0IGluIGNhc2UgKi8KKwltZW1zZXQoJmtldmVudC0+ZXZlbnQsIDAsIHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCkpOworCisJa2V2ZW50LT5ldmVudC53ZCA9IHdkOworCWtldmVudC0+ZXZlbnQubWFzayA9IG1hc2s7CisJa2V2ZW50LT5ldmVudC5jb29raWUgPSBjb29raWU7CisKKwlJTklUX0xJU1RfSEVBRCgma2V2ZW50LT5saXN0KTsKKworCWlmIChuYW1lKSB7CisJCXNpemVfdCBsZW4sIHJlbSwgZXZlbnRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCk7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBwYWQgdGhlIGZpbGVuYW1lIHNvIGFzIHRvIHByb3Blcmx5IGFsaWduIGFuCisJCSAqIGFycmF5IG9mIGlub3RpZnlfZXZlbnQgc3RydWN0dXJlcy4gIEJlY2F1c2UgdGhlIHN0cnVjdHVyZSBpcworCQkgKiBzbWFsbCBhbmQgdGhlIGNvbW1vbiBjYXNlIGlzIGEgc21hbGwgZmlsZW5hbWUsIHdlIGp1c3Qgcm91bmQKKwkJICogdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgdGhlIHN0cnVjdHVyZSdzIHNpemVvZi4gIFRoaXMgaXMKKwkJICogc2ltcGxlIGFuZCBzYWZlIGZvciBhbGwgYXJjaGl0ZWN0dXJlcy4KKwkJICovCisJCWxlbiA9IHN0cmxlbihuYW1lKSArIDE7CisJCXJlbSA9IGV2ZW50X3NpemUgLSBsZW47CisJCWlmIChsZW4gPiBldmVudF9zaXplKSB7CisJCQlyZW0gPSBldmVudF9zaXplIC0gKGxlbiAlIGV2ZW50X3NpemUpOworCQkJaWYgKGxlbiAlIGV2ZW50X3NpemUgPT0gMCkKKwkJCQlyZW0gPSAwOworCQl9CisKKwkJa2V2ZW50LT5uYW1lID0ga21hbGxvYyhsZW4gKyByZW0sIEdGUF9LRVJORUwpOworCQlpZiAodW5saWtlbHkoIWtldmVudC0+bmFtZSkpIHsKKwkJCWttZW1fY2FjaGVfZnJlZShldmVudF9jYWNoZXAsIGtldmVudCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQltZW1jcHkoa2V2ZW50LT5uYW1lLCBuYW1lLCBsZW4pOworCQlpZiAocmVtKQorCQkJbWVtc2V0KGtldmVudC0+bmFtZSArIGxlbiwgMCwgcmVtKTsKKwkJa2V2ZW50LT5ldmVudC5sZW4gPSBsZW4gKyByZW07CisJfSBlbHNlIHsKKwkJa2V2ZW50LT5ldmVudC5sZW4gPSAwOworCQlrZXZlbnQtPm5hbWUgPSBOVUxMOworCX0KKworCXJldHVybiBrZXZlbnQ7Cit9CisKKy8qCisgKiBpbm90aWZ5X2Rldl9nZXRfZXZlbnQgLSByZXR1cm4gdGhlIG5leHQgZXZlbnQgaW4gdGhlIGdpdmVuIGRldidzIHF1ZXVlCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPmV2X211dGV4LgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAqCitpbm90aWZ5X2Rldl9nZXRfZXZlbnQoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGxpc3RfZW50cnkoZGV2LT5ldmVudHMubmV4dCwgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50LCBsaXN0KTsKK30KKworLyoKKyAqIGlub3RpZnlfZGV2X3F1ZXVlX2V2ZW50IC0gZXZlbnQgaGFuZGxlciByZWdpc3RlcmVkIHdpdGggY29yZSBpbm90aWZ5LCBhZGRzCisgKiBhIG5ldyBldmVudCB0byB0aGUgZ2l2ZW4gZGV2aWNlCisgKgorICogQ2FuIHNsZWVwIChjYWxscyBrZXJuZWxfZXZlbnQoKSkuCisgKi8KK3N0YXRpYyB2b2lkIGlub3RpZnlfZGV2X3F1ZXVlX2V2ZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3LCB1MzIgd2QsIHUzMiBtYXNrLAorCQkJCSAgICB1MzIgY29va2llLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlnbm9yZWQpCit7CisJc3RydWN0IGlub3RpZnlfdXNlcl93YXRjaCAqd2F0Y2g7CisJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXY7CisJc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQsICpsYXN0OworCisJd2F0Y2ggPSBjb250YWluZXJfb2Yodywgc3RydWN0IGlub3RpZnlfdXNlcl93YXRjaCwgd2RhdGEpOworCWRldiA9IHdhdGNoLT5kZXY7CisKKwltdXRleF9sb2NrKCZkZXYtPmV2X211dGV4KTsKKworCS8qIHdlIGNhbiBzYWZlbHkgcHV0IHRoZSB3YXRjaCBhcyB3ZSBkb24ndCByZWZlcmVuY2UgaXQgd2hpbGUKKwkgKiBnZW5lcmF0aW5nIHRoZSBldmVudAorCSAqLworCWlmIChtYXNrICYgSU5fSUdOT1JFRCB8fCBtYXNrICYgSU5fT05FU0hPVCkKKwkJcHV0X2lub3RpZnlfd2F0Y2godyk7IC8qIGZpbmFsIHB1dCAqLworCisJLyogY29hbGVzY2luZzogZHJvcCB0aGlzIGV2ZW50IGlmIGl0IGlzIGEgZHVwZSBvZiB0aGUgcHJldmlvdXMgKi8KKwlsYXN0ID0gaW5vdGlmeV9kZXZfZ2V0X2V2ZW50KGRldik7CisJaWYgKGxhc3QgJiYgbGFzdC0+ZXZlbnQubWFzayA9PSBtYXNrICYmIGxhc3QtPmV2ZW50LndkID09IHdkICYmCisJCQlsYXN0LT5ldmVudC5jb29raWUgPT0gY29va2llKSB7CisJCWNvbnN0IGNoYXIgKmxhc3RuYW1lID0gbGFzdC0+bmFtZTsKKworCQlpZiAoIW5hbWUgJiYgIWxhc3RuYW1lKQorCQkJZ290byBvdXQ7CisJCWlmIChuYW1lICYmIGxhc3RuYW1lICYmICFzdHJjbXAobGFzdG5hbWUsIG5hbWUpKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogdGhlIHF1ZXVlIG92ZXJmbG93ZWQgYW5kIHdlIGFscmVhZHkgc2VudCB0aGUgUV9PVkVSRkxPVyBldmVudCAqLworCWlmICh1bmxpa2VseShkZXYtPmV2ZW50X2NvdW50ID4gZGV2LT5tYXhfZXZlbnRzKSkKKwkJZ290byBvdXQ7CisKKwkvKiBpZiB0aGUgcXVldWUgb3ZlcmZsb3dzLCB3ZSBuZWVkIHRvIG5vdGlmeSB1c2VyIHNwYWNlICovCisJaWYgKHVubGlrZWx5KGRldi0+ZXZlbnRfY291bnQgPT0gZGV2LT5tYXhfZXZlbnRzKSkKKwkJa2V2ZW50ID0ga2VybmVsX2V2ZW50KC0xLCBJTl9RX09WRVJGTE9XLCBjb29raWUsIE5VTEwpOworCWVsc2UKKwkJa2V2ZW50ID0ga2VybmVsX2V2ZW50KHdkLCBtYXNrLCBjb29raWUsIG5hbWUpOworCisJaWYgKHVubGlrZWx5KCFrZXZlbnQpKQorCQlnb3RvIG91dDsKKworCS8qIHF1ZXVlIHRoZSBldmVudCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyAqLworCWRldi0+ZXZlbnRfY291bnQrKzsKKwlkZXYtPnF1ZXVlX3NpemUgKz0gc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X2V2ZW50KSArIGtldmVudC0+ZXZlbnQubGVuOworCWxpc3RfYWRkX3RhaWwoJmtldmVudC0+bGlzdCwgJmRldi0+ZXZlbnRzKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d3EpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmV2X211dGV4KTsKK30KKworLyoKKyAqIHJlbW92ZV9rZXZlbnQgLSBjbGVhbnMgdXAgYW5kIHVsdGltYXRlbHkgZnJlZXMgdGhlIGdpdmVuIGtldmVudAorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgZGV2LT5ldl9tdXRleC4KKyAqLworc3RhdGljIHZvaWQgcmVtb3ZlX2tldmVudChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQpCit7CisJbGlzdF9kZWwoJmtldmVudC0+bGlzdCk7CisKKwlkZXYtPmV2ZW50X2NvdW50LS07CisJZGV2LT5xdWV1ZV9zaXplIC09IHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCkgKyBrZXZlbnQtPmV2ZW50LmxlbjsKKworCWtmcmVlKGtldmVudC0+bmFtZSk7CisJa21lbV9jYWNoZV9mcmVlKGV2ZW50X2NhY2hlcCwga2V2ZW50KTsKK30KKworLyoKKyAqIGlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUgLSBkZXN0cm95IGFuIGV2ZW50IG9uIHRoZSBnaXZlbiBkZXZpY2UKKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIGRldi0+ZXZfbXV0ZXguCisgKi8KK3N0YXRpYyB2b2lkIGlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYpCit7CisJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPmV2ZW50cykpIHsKKwkJc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQ7CisJCWtldmVudCA9IGlub3RpZnlfZGV2X2dldF9ldmVudChkZXYpOworCQlyZW1vdmVfa2V2ZW50KGRldiwga2V2ZW50KTsKKwl9Cit9CisKKy8qCisgKiBmaW5kX2lub2RlIC0gcmVzb2x2ZSBhIHVzZXItZ2l2ZW4gcGF0aCB0byBhIHNwZWNpZmljIGlub2RlIGFuZCByZXR1cm4gYSBuZAorICovCitzdGF0aWMgaW50IGZpbmRfaW5vZGUoY29uc3QgY2hhciBfX3VzZXIgKmRpcm5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAorCQkgICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IF9fdXNlcl93YWxrKGRpcm5hbWUsIGZsYWdzLCBuZCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJLyogeW91IGNhbiBvbmx5IHdhdGNoIGFuIGlub2RlIGlmIHlvdSBoYXZlIHJlYWQgcGVybWlzc2lvbnMgb24gaXQgKi8KKwllcnJvciA9IHZmc19wZXJtaXNzaW9uKG5kLCBNQVlfUkVBRCk7CisJaWYgKGVycm9yKQorCQlwYXRoX3JlbGVhc2UobmQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIGNyZWF0ZV93YXRjaCAtIGNyZWF0ZXMgYSB3YXRjaCBvbiB0aGUgZ2l2ZW4gZGV2aWNlLgorICoKKyAqIENhbGxlcnMgbXVzdCBob2xkIGRldi0+dXBfbXV0ZXguCisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJdTMyIG1hc2spCit7CisJc3RydWN0IGlub3RpZnlfdXNlcl93YXRjaCAqd2F0Y2g7CisJaW50IHJldDsKKworCWlmIChhdG9taWNfcmVhZCgmZGV2LT51c2VyLT5pbm90aWZ5X3dhdGNoZXMpID49CisJCQlpbm90aWZ5X21heF91c2VyX3dhdGNoZXMpCisJCXJldHVybiAtRU5PU1BDOworCisJd2F0Y2ggPSBrbWVtX2NhY2hlX2FsbG9jKHdhdGNoX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCF3YXRjaCkpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogc2F2ZSBhIHJlZmVyZW5jZSB0byBkZXZpY2UgYW5kIGJ1bXAgdGhlIGNvdW50IHRvIG1ha2UgaXQgb2ZmaWNpYWwgKi8KKwlnZXRfaW5vdGlmeV9kZXYoZGV2KTsKKwl3YXRjaC0+ZGV2ID0gZGV2OworCisJYXRvbWljX2luYygmZGV2LT51c2VyLT5pbm90aWZ5X3dhdGNoZXMpOworCisJaW5vdGlmeV9pbml0X3dhdGNoKCZ3YXRjaC0+d2RhdGEpOworCXJldCA9IGlub3RpZnlfYWRkX3dhdGNoKGRldi0+aWgsICZ3YXRjaC0+d2RhdGEsIGlub2RlLCBtYXNrKTsKKwlpZiAocmV0IDwgMCkKKwkJZnJlZV9pbm90aWZ5X3VzZXJfd2F0Y2goJndhdGNoLT53ZGF0YSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBEZXZpY2UgSW50ZXJmYWNlICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5vdGlmeV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQgPSAwOworCisJcG9sbF93YWl0KGZpbGUsICZkZXYtPndxLCB3YWl0KTsKKwltdXRleF9sb2NrKCZkZXYtPmV2X211dGV4KTsKKwlpZiAoIWxpc3RfZW1wdHkoJmRldi0+ZXZlbnRzKSkKKwkJcmV0ID0gUE9MTElOIHwgUE9MTFJETk9STTsKKwltdXRleF91bmxvY2soJmRldi0+ZXZfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgaW5vdGlmeV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJc2l6ZV90IGV2ZW50X3NpemUgPSBzaXplb2YgKHN0cnVjdCBpbm90aWZ5X2V2ZW50KTsKKwlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldjsKKwljaGFyIF9fdXNlciAqc3RhcnQ7CisJaW50IHJldDsKKwlERUZJTkVfV0FJVCh3YWl0KTsKKworCXN0YXJ0ID0gYnVmOworCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXdoaWxlICgxKSB7CisJCWludCBldmVudHM7CisKKwkJcHJlcGFyZV90b193YWl0KCZkZXYtPndxLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQltdXRleF9sb2NrKCZkZXYtPmV2X211dGV4KTsKKwkJZXZlbnRzID0gIWxpc3RfZW1wdHkoJmRldi0+ZXZlbnRzKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmV2X211dGV4KTsKKwkJaWYgKGV2ZW50cykgeworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldCA9IC1FSU5UUjsKKwkJCWJyZWFrOworCQl9CisKKwkJc2NoZWR1bGUoKTsKKwl9CisKKwlmaW5pc2hfd2FpdCgmZGV2LT53cSwgJndhaXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPmV2X211dGV4KTsKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgKmtldmVudDsKKworCQlyZXQgPSBidWYgLSBzdGFydDsKKwkJaWYgKGxpc3RfZW1wdHkoJmRldi0+ZXZlbnRzKSkKKwkJCWJyZWFrOworCisJCWtldmVudCA9IGlub3RpZnlfZGV2X2dldF9ldmVudChkZXYpOworCQlpZiAoZXZlbnRfc2l6ZSArIGtldmVudC0+ZXZlbnQubGVuID4gY291bnQpCisJCQlicmVhazsKKworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgJmtldmVudC0+ZXZlbnQsIGV2ZW50X3NpemUpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJYnVmICs9IGV2ZW50X3NpemU7CisJCWNvdW50IC09IGV2ZW50X3NpemU7CisKKwkJaWYgKGtldmVudC0+bmFtZSkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGtldmVudC0+bmFtZSwga2V2ZW50LT5ldmVudC5sZW4pKXsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJfQorCQkJYnVmICs9IGtldmVudC0+ZXZlbnQubGVuOworCQkJY291bnQgLT0ga2V2ZW50LT5ldmVudC5sZW47CisJCX0KKworCQlyZW1vdmVfa2V2ZW50KGRldiwga2V2ZW50KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmV2X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW5vdGlmeV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaWdub3JlZCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpbm90aWZ5X2Rlc3Ryb3koZGV2LT5paCk7CisKKwkvKiBkZXN0cm95IGFsbCBvZiB0aGUgZXZlbnRzIG9uIHRoaXMgZGV2aWNlICovCisJbXV0ZXhfbG9jaygmZGV2LT5ldl9tdXRleCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXYtPmV2ZW50cykpCisJCWlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+ZXZfbXV0ZXgpOworCisJLyogZnJlZSB0aGlzIGRldmljZTogdGhlIHB1dCBtYXRjaGluZyB0aGUgZ2V0IGluIGlub3RpZnlfaW5pdCgpICovCisJcHV0X2lub3RpZnlfZGV2KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgaW5vdGlmeV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXY7CisJdm9pZCBfX3VzZXIgKnA7CisJaW50IHJldCA9IC1FTk9UVFk7CisKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRklPTlJFQUQ6CisJCXJldCA9IHB1dF91c2VyKGRldi0+cXVldWVfc2l6ZSwgKGludCBfX3VzZXIgKikgcCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlub3RpZnlfZm9wcyA9IHsKKwkucG9sbCAgICAgICAgICAgPSBpbm90aWZ5X3BvbGwsCisJLnJlYWQgICAgICAgICAgID0gaW5vdGlmeV9yZWFkLAorCS5yZWxlYXNlICAgICAgICA9IGlub3RpZnlfcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBpbm90aWZ5X2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSBpbm90aWZ5X2lvY3RsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgaW5vdGlmeV91c2VyX29wcyA9IHsKKwkuaGFuZGxlX2V2ZW50CT0gaW5vdGlmeV9kZXZfcXVldWVfZXZlbnQsCisJLmRlc3Ryb3lfd2F0Y2gJPSBmcmVlX2lub3RpZnlfdXNlcl93YXRjaCwKK307CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfaW5vdGlmeV9pbml0KHZvaWQpCit7CisJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXY7CisJc3RydWN0IGlub3RpZnlfaGFuZGxlICppaDsKKwlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7CisJc3RydWN0IGZpbGUgKmZpbHA7CisJaW50IGZkLCByZXQ7CisKKwlmZCA9IGdldF91bnVzZWRfZmQoKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZmQ7CisKKwlmaWxwID0gZ2V0X2VtcHR5X2ZpbHAoKTsKKwlpZiAoIWZpbHApIHsKKwkJcmV0ID0gLUVORklMRTsKKwkJZ290byBvdXRfcHV0X2ZkOworCX0KKworCXVzZXIgPSBnZXRfdWlkKGN1cnJlbnQtPnVzZXIpOworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmdXNlci0+aW5vdGlmeV9kZXZzKSA+PQorCQkJaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMpKSB7CisJCXJldCA9IC1FTUZJTEU7CisJCWdvdG8gb3V0X2ZyZWVfdWlkOworCX0KKworCWRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghZGV2KSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX3VpZDsKKwl9CisKKwlpaCA9IGlub3RpZnlfaW5pdCgmaW5vdGlmeV91c2VyX29wcyk7CisJaWYgKHVubGlrZWx5KElTX0VSUihpaCkpKSB7CisJCXJldCA9IFBUUl9FUlIoaWgpOworCQlnb3RvIG91dF9mcmVlX2RldjsKKwl9CisJZGV2LT5paCA9IGloOworCisJZmlscC0+Zl9vcCA9ICZpbm90aWZ5X2ZvcHM7CisJZmlscC0+Zl92ZnNtbnQgPSBtbnRnZXQoaW5vdGlmeV9tbnQpOworCWZpbHAtPmZfZGVudHJ5ID0gZGdldChpbm90aWZ5X21udC0+bW50X3Jvb3QpOworCWZpbHAtPmZfbWFwcGluZyA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CisJZmlscC0+Zl9tb2RlID0gRk1PREVfUkVBRDsKKwlmaWxwLT5mX2ZsYWdzID0gT19SRE9OTFk7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZGV2OworCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZXZlbnRzKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndxKTsKKwltdXRleF9pbml0KCZkZXYtPmV2X211dGV4KTsKKwltdXRleF9pbml0KCZkZXYtPnVwX211dGV4KTsKKwlkZXYtPmV2ZW50X2NvdW50ID0gMDsKKwlkZXYtPnF1ZXVlX3NpemUgPSAwOworCWRldi0+bWF4X2V2ZW50cyA9IGlub3RpZnlfbWF4X3F1ZXVlZF9ldmVudHM7CisJZGV2LT51c2VyID0gdXNlcjsKKwlhdG9taWNfc2V0KCZkZXYtPmNvdW50LCAwKTsKKworCWdldF9pbm90aWZ5X2RldihkZXYpOworCWF0b21pY19pbmMoJnVzZXItPmlub3RpZnlfZGV2cyk7CisJZmRfaW5zdGFsbChmZCwgZmlscCk7CisKKwlyZXR1cm4gZmQ7CitvdXRfZnJlZV9kZXY6CisJa2ZyZWUoZGV2KTsKK291dF9mcmVlX3VpZDoKKwlmcmVlX3VpZCh1c2VyKTsKKwlwdXRfZmlscChmaWxwKTsKK291dF9wdXRfZmQ6CisJcHV0X3VudXNlZF9mZChmZCk7CisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c19pbm90aWZ5X2FkZF93YXRjaChpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRoLCB1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2OworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IGZpbGUgKmZpbHA7CisJaW50IHJldCwgZnB1dF9uZWVkZWQ7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCisJZmlscCA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKHVubGlrZWx5KCFmaWxwKSkKKwkJcmV0dXJuIC1FQkFERjsKKworCS8qIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIGFuIGlub3RpZnkgaW5zdGFuY2UgKi8KKwlpZiAodW5saWtlbHkoZmlscC0+Zl9vcCAhPSAmaW5vdGlmeV9mb3BzKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZwdXRfYW5kX291dDsKKwl9CisKKwlpZiAoIShtYXNrICYgSU5fRE9OVF9GT0xMT1cpKQorCQlmbGFncyB8PSBMT09LVVBfRk9MTE9XOworCWlmIChtYXNrICYgSU5fT05MWURJUikKKwkJZmxhZ3MgfD0gTE9PS1VQX0RJUkVDVE9SWTsKKworCXJldCA9IGZpbmRfaW5vZGUocGF0aCwgJm5kLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZnB1dF9hbmRfb3V0OworCisJLyogaW5vZGUgaGVsZCBpbiBwbGFjZSBieSByZWZlcmVuY2UgdG8gbmQ7IGRldiBieSBmZ2V0IG9uIGZkICovCisJaW5vZGUgPSBuZC5kZW50cnktPmRfaW5vZGU7CisJZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJbXV0ZXhfbG9jaygmZGV2LT51cF9tdXRleCk7CisJcmV0ID0gaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChkZXYtPmloLCBpbm9kZSwgbWFzayk7CisJaWYgKHJldCA9PSAtRU5PRU5UKQorCQlyZXQgPSBjcmVhdGVfd2F0Y2goZGV2LCBpbm9kZSwgbWFzayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnVwX211dGV4KTsKKworCXBhdGhfcmVsZWFzZSgmbmQpOworZnB1dF9hbmRfb3V0OgorCWZwdXRfbGlnaHQoZmlscCwgZnB1dF9uZWVkZWQpOworCXJldHVybiByZXQ7Cit9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfaW5vdGlmeV9ybV93YXRjaChpbnQgZmQsIHUzMiB3ZCkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKwlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldjsKKwlpbnQgcmV0LCBmcHV0X25lZWRlZDsKKworCWZpbHAgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmICh1bmxpa2VseSghZmlscCkpCisJCXJldHVybiAtRUJBREY7CisKKwkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIGluZGVlZCBhbiBpbm90aWZ5IGluc3RhbmNlICovCisJaWYgKHVubGlrZWx5KGZpbHAtPmZfb3AgIT0gJmlub3RpZnlfZm9wcykpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJLyogd2UgZnJlZSBvdXIgd2F0Y2ggZGF0YSB3aGVuIHdlIGdldCBJTl9JR05PUkVEICovCisJcmV0ID0gaW5vdGlmeV9ybV93ZChkZXYtPmloLCB3ZCk7CisKK291dDoKKwlmcHV0X2xpZ2h0KGZpbHAsIGZwdXRfbmVlZGVkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICoKK2lub3RpZnlfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCisJICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQoreworICAgIHJldHVybiBnZXRfc2JfcHNldWRvKGZzX3R5cGUsICJpbm90aWZ5IiwgTlVMTCwgMHhCQUQxREVBKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGlub3RpZnlfZnNfdHlwZSA9IHsKKyAgICAubmFtZSAgICAgICAgICAgPSAiaW5vdGlmeWZzIiwKKyAgICAuZ2V0X3NiICAgICAgICAgPSBpbm90aWZ5X2dldF9zYiwKKyAgICAua2lsbF9zYiAgICAgICAgPSBraWxsX2Fub25fc3VwZXIsCit9OworCisvKgorICogaW5vdGlmeV91c2VyX3NldHVwIC0gT3VyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAgTm90ZSB0aGF0IHdlIGNhbm5ub3QgcmV0dXJuCisgKiBlcnJvciBiZWNhdXNlIHdlIGhhdmUgY29tcGlsZWQtaW4gVkZTIGhvb2tzLiAgU28gYW4gKHVubGlrZWx5KSBmYWlsdXJlIGhlcmUKKyAqIG11c3QgcmVzdWx0IGluIHBhbmljKCkuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGlub3RpZnlfdXNlcl9zZXR1cCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZpbm90aWZ5X2ZzX3R5cGUpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlwYW5pYygiaW5vdGlmeTogcmVnaXN0ZXJfZmlsZXN5c3RlbSByZXR1cm5lZCAlZCFcbiIsIHJldCk7CisKKwlpbm90aWZ5X21udCA9IGtlcm5fbW91bnQoJmlub3RpZnlfZnNfdHlwZSk7CisJaWYgKElTX0VSUihpbm90aWZ5X21udCkpCisJCXBhbmljKCJpbm90aWZ5OiBrZXJuX21vdW50IHJldCAlbGQhXG4iLCBQVFJfRVJSKGlub3RpZnlfbW50KSk7CisKKwlpbm90aWZ5X21heF9xdWV1ZWRfZXZlbnRzID0gMTYzODQ7CisJaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMgPSAxMjg7CisJaW5vdGlmeV9tYXhfdXNlcl93YXRjaGVzID0gODE5MjsKKworCXdhdGNoX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJpbm90aWZ5X3dhdGNoX2NhY2hlIiwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaW5vdGlmeV91c2VyX3dhdGNoKSwKKwkJCQkJIDAsIFNMQUJfUEFOSUMsIE5VTEwsIE5VTEwpOworCWV2ZW50X2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJpbm90aWZ5X2V2ZW50X2NhY2hlIiwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQpLAorCQkJCQkgMCwgU0xBQl9QQU5JQywgTlVMTCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoaW5vdGlmeV91c2VyX3NldHVwKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMvaW50cmVwLmMgYi9mcy9qZmZzL2ludHJlcC5jCmluZGV4IDBlZjIwN2QuLjUzNzFhNDAgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMvaW50cmVwLmMKKysrIGIvZnMvamZmcy9pbnRyZXAuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJRDMocHJpbnRrKEtFUk5fTk9USUNFICJmbGFzaF9zYWZlX3JlYWQoJXAsICUwOHgsICVwLCAlMDh4KVxuIiwKIAkJICBtdGQsICh1bnNpZ25lZCBpbnQpIGZyb20sIGJ1ZiwgY291bnQpKTsKIAotCXJlcyA9IE1URF9SRUFEKG10ZCwgZnJvbSwgY291bnQsICZyZXRsZW4sIGJ1Zik7CisJcmVzID0gbXRkLT5yZWFkKG10ZCwgZnJvbSwgY291bnQsICZyZXRsZW4sIGJ1Zik7CiAJaWYgKHJldGxlbiAhPSBjb3VudCkgewogCQlwYW5pYygiRGlkbid0IHJlYWQgYWxsIGJ5dGVzIGluIGZsYXNoX3NhZmVfcmVhZCgpLiBSZXR1cm5lZCAlZFxuIiwgcmVzKTsKIAl9CkBAIC0yNjIsNyArMjYyLDcgQEAKIAlfX3UzMiByZXQ7CiAJaW50IHJlczsKIAotCXJlcyA9IE1URF9SRUFEKG10ZCwgZnJvbSwgNCwgJnJldGxlbiwgKHVuc2lnbmVkIGNoYXIgKikmcmV0KTsKKwlyZXMgPSBtdGQtPnJlYWQobXRkLCBmcm9tLCA0LCAmcmV0bGVuLCAodW5zaWduZWQgY2hhciAqKSZyZXQpOwogCWlmIChyZXRsZW4gIT0gNCkgewogCQlwcmludGsoIkRpZG4ndCByZWFkIGFsbCBieXRlcyBpbiBmbGFzaF9yZWFkX3UzMigpLiBSZXR1cm5lZCAlZFxuIiwgcmVzKTsKIAkJcmV0dXJuIDA7CkBAIC0yODIsNyArMjgyLDcgQEAKIAlEMyhwcmludGsoS0VSTl9OT1RJQ0UgImZsYXNoX3NhZmVfd3JpdGUoJXAsICUwOHgsICVwLCAlMDh4KVxuIiwKIAkJICBtdGQsICh1bnNpZ25lZCBpbnQpIHRvLCBidWYsIGNvdW50KSk7CiAKLQlyZXMgPSBNVERfV1JJVEUobXRkLCB0bywgY291bnQsICZyZXRsZW4sIGJ1Zik7CisJcmVzID0gbXRkLT53cml0ZShtdGQsIHRvLCBjb3VudCwgJnJldGxlbiwgYnVmKTsKIAlpZiAocmV0bGVuICE9IGNvdW50KSB7CiAJCXByaW50aygiRGlkbid0IHdyaXRlIGFsbCBieXRlcyBpbiBmbGFzaF9zYWZlX3dyaXRlKCkuIFJldHVybmVkICVkXG4iLCByZXMpOwogCX0KQEAgLTMwMCw5ICszMDAsOSBAQAogCiAJRDMocHJpbnRrKEtFUk5fTk9USUNFICJmbGFzaF9zYWZlX3dyaXRldiglcCwgJTA4eCwgJXApXG4iLAogCQkgIG10ZCwgKHVuc2lnbmVkIGludCkgdG8sIHZlY3MpKTsKLQkKKwogCWlmIChtdGQtPndyaXRldikgewotCQlyZXMgPSBNVERfV1JJVEVWKG10ZCwgdmVjcywgaW92ZWNfY250LCB0bywgJnJldGxlbik7CisJCXJlcyA9IG10ZC0+d3JpdGV2KG10ZCwgdmVjcywgaW92ZWNfY250LCB0bywgJnJldGxlbik7CiAJCXJldHVybiByZXMgPyByZXMgOiByZXRsZW47CiAJfQogCS8qIE5vdCBpbXBsZW1lbnRlZCB3cml0ZXYuIFJlcGVhdGVkbHkgdXNlIHdyaXRlIC0gb24gdGhlIG5vdCBzbwpAQCAtMzEyLDcgKzMxMiw4IEBACiAJcmV0bGVuPTA7CiAKIAlmb3IgKGk9MDsgIXJlcyAmJiBpPGlvdmVjX2NudDsgaSsrKSB7Ci0JCXJlcyA9IE1URF9XUklURShtdGQsIHRvLCB2ZWNzW2ldLmlvdl9sZW4sICZyZXRsZW5fYSwgdmVjc1tpXS5pb3ZfYmFzZSk7CisJCXJlcyA9IG10ZC0+d3JpdGUobXRkLCB0bywgdmVjc1tpXS5pb3ZfbGVuLCAmcmV0bGVuX2EsCisJCQkJIHZlY3NbaV0uaW92X2Jhc2UpOwogCQlpZiAocmV0bGVuX2EgIT0gdmVjc1tpXS5pb3ZfbGVuKSB7CiAJCQlwcmludGsoIkRpZG4ndCB3cml0ZSBhbGwgYnl0ZXMgaW4gZmxhc2hfc2FmZV93cml0ZXYoKS4gUmV0dXJuZWQgJWRcbiIsIHJlcyk7CiAJCQlpZiAoaSAhPSBpb3ZlY19jbnQtMSkKQEAgLTM5Myw3ICszOTQsNyBAQAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAlhZGRfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7CiAKLQlpZiAoTVREX0VSQVNFKG10ZCwgZXJhc2UpIDwgMCkgeworCWlmIChtdGQtPmVyYXNlKG10ZCwgZXJhc2UpIDwgMCkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7CiAJCWtmcmVlKGVyYXNlKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL01ha2VmaWxlIGIvZnMvamZmczIvTWFrZWZpbGUKaW5kZXggNzdkYzU1Ni4uN2YyOGVlMCAxMDA2NDQKLS0tIGEvZnMvamZmczIvTWFrZWZpbGUKKysrIGIvZnMvamZmczIvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDkgQEAKIGpmZnMyLXkJKz0gc3VwZXIubyBkZWJ1Zy5vCiAKIGpmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSKQkrPSB3YnVmLm8KK2pmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1hBVFRSKQkJKz0geGF0dHIubyB4YXR0cl90cnVzdGVkLm8geGF0dHJfdXNlci5vCitqZmZzMi0kKENPTkZJR19KRkZTMl9GU19TRUNVUklUWSkJKz0gc2VjdXJpdHkubworamZmczItJChDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMKQkrPSBhY2wubwogamZmczItJChDT05GSUdfSkZGUzJfUlVCSU4pCSs9IGNvbXByX3J1YmluLm8KIGpmZnMyLSQoQ09ORklHX0pGRlMyX1JUSU1FKQkrPSBjb21wcl9ydGltZS5vCiBqZmZzMi0kKENPTkZJR19KRkZTMl9aTElCKQkrPSBjb21wcl96bGliLm8KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL1JFQURNRS5Mb2NraW5nIGIvZnMvamZmczIvUkVBRE1FLkxvY2tpbmcKaW5kZXggYjc5NDM0MzkuLmM4ZjBiZDYgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL1JFQURNRS5Mb2NraW5nCisrKyBiL2ZzL2pmZnMyL1JFQURNRS5Mb2NraW5nCkBAIC0xNTAsMyArMTUwLDI0IEBACiAKIE9yZGVyaW5nIGNvbnN0cmFpbnRzOgogCUxvY2sgd2J1Zl9zZW0gbGFzdCwgYWZ0ZXIgdGhlIGFsbG9jX3NlbSBvciBhbmQgZi0+c2VtLgorCisKKwljLT54YXR0cl9zZW0KKwktLS0tLS0tLS0tLS0KKworVGhpcyByZWFkL3dyaXRlIHNlbWFwaG9yZSBwcm90ZWN0cyBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZQoreGF0dHIgcmVsYXRlZCBvYmplY3RzIHdoaWNoIGluY2x1ZGUgc3R1ZmYgaW4gc3VwZXJibG9jayBhbmQgaWMtPnhyZWYuCitJbiByZWFkLW9ubHkgcGF0aCwgd3JpdGUtc2VtYXBob3JlIGlzIHRvbyBtdWNoIGV4Y2x1c2lvbi4gSXQncyBlbm91Z2gKK2J5IHJlYWQtc2VtYXBob3JlLiBCdXQgeW91IG11c3QgaG9sZCB3cml0ZS1zZW1hcGhvcmUgd2hlbiB1cGRhdGluZywKK2NyZWF0aW5nIG9yIGRlbGV0aW5nIGFueSB4YXR0ciByZWxhdGVkIG9iamVjdC4KKworT25jZSB4YXR0cl9zZW0gcmVsZWFzZWQsIHRoZXJlIHdvdWxkIGJlIG5vIGFzc3VyYW5jZSBmb3IgdGhlIGV4aXN0ZW5jZQorb2YgdGhvc2Ugb2JqZWN0cy4gVGh1cywgYSBzZXJpZXMgb2YgcHJvY2Vzc2VzIGlzIG9mdGVuIHJlcXVpcmVkIHRvIHJldHJ5LAord2hlbiB1cGRhdGluZyBzdWNoIGEgb2JqZWN0IGlzIG5lY2Vzc2FyeSB1bmRlciBob2xkaW5nIHJlYWQgc2VtYXBob3JlLgorRm9yIGV4YW1wbGUsIGRvX2pmZnMyX2dldHhhdHRyKCkgaG9sZHMgcmVhZC1zZW1hcGhvcmUgdG8gc2NhbiB4cmVmIGFuZAoreGRhdHVtIGF0IGZpcnN0LiBCdXQgaXQgcmV0cmllcyB0aGlzIHByb2Nlc3Mgd2l0aCBob2xkaW5nIHdyaXRlLXNlbWFwaG9yZQorYWZ0ZXIgcmVsZWFzZSByZWFkLXNlbWFwaG9yZSwgaWYgaXQncyBuZWNlc3NhcnkgdG8gbG9hZCBuYW1lL3ZhbHVlIHBhaXIKK2Zyb20gbWVkaXVtLgorCitPcmRlcmluZyBjb25zdHJhaW50czoKKwlMb2NrIHhhdHRyX3NlbSBsYXN0LCBhZnRlciB0aGUgYWxsb2Nfc2VtLgpkaWZmIC0tZ2l0IGEvZnMvamZmczIvYWNsLmMgYi9mcy9qZmZzMi9hY2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjBkZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvamZmczIvYWNsLmMKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBKRkZTMiAtLSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgVmVyc2lvbiAyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiAgTkVDIENvcnBvcmF0aW9uCisgKgorICogQ3JlYXRlZCBieSBLYWlHYWkgS29oZWkgPGthaWdhaUBhay5qcC5uZWMuY29tPgorICoKKyAqIEZvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSAnTElDRU5DRScgaW4gdGhpcyBkaXJlY3RvcnkuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvamZmczIuaD4KKyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbF94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlICJub2RlbGlzdC5oIgorCitzdGF0aWMgc2l6ZV90IGpmZnMyX2FjbF9zaXplKGludCBjb3VudCkKK3sKKwlpZiAoY291bnQgPD0gNCkgeworCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfaGVhZGVyKQorCQkgICAgICAgKyBjb3VudCAqIHNpemVvZihzdHJ1Y3QgamZmczJfYWNsX2VudHJ5X3Nob3J0KTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfaGVhZGVyKQorCQkgICAgICAgKyA0ICogc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfZW50cnlfc2hvcnQpCisJCSAgICAgICArIChjb3VudCAtIDQpICogc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfZW50cnkpOworCX0KK30KKworc3RhdGljIGludCBqZmZzMl9hY2xfY291bnQoc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IHM7CisKKwlzaXplIC09IHNpemVvZihzdHJ1Y3QgamZmczJfYWNsX2hlYWRlcik7CisJcyA9IHNpemUgLSA0ICogc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfZW50cnlfc2hvcnQpOworCWlmIChzIDwgMCkgeworCQlpZiAoc2l6ZSAlIHNpemVvZihzdHJ1Y3QgamZmczJfYWNsX2VudHJ5X3Nob3J0KSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIHNpemUgLyBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9lbnRyeV9zaG9ydCk7CisJfSBlbHNlIHsKKwkJaWYgKHMgJSBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9lbnRyeSkpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiBzIC8gc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfZW50cnkpICsgNDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpqZmZzMl9hY2xfZnJvbV9tZWRpdW0odm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQoreworCXZvaWQgKmVuZCA9IHZhbHVlICsgc2l6ZTsKKwlzdHJ1Y3QgamZmczJfYWNsX2hlYWRlciAqaGVhZGVyID0gdmFsdWU7CisJc3RydWN0IGpmZnMyX2FjbF9lbnRyeSAqZW50cnk7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsOworCXVpbnQzMl90IHZlcjsKKwlpbnQgaSwgY291bnQ7CisKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3QgamZmczJfYWNsX2hlYWRlcikpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCXZlciA9IGplMzJfdG9fY3B1KGhlYWRlci0+YV92ZXJzaW9uKTsKKwlpZiAodmVyICE9IEpGRlMyX0FDTF9WRVJTSU9OKSB7CisJCUpGRlMyX1dBUk5JTkcoIkludmFsaWQgQUNMIHZlcnNpb24uICg9JXUpXG4iLCB2ZXIpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwl2YWx1ZSArPSBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9oZWFkZXIpOworCWNvdW50ID0gamZmczJfYWNsX2NvdW50KHNpemUpOworCWlmIChjb3VudCA8IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFjbCA9IHBvc2l4X2FjbF9hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY2wpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZm9yIChpPTA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWVudHJ5ID0gdmFsdWU7CisJCWlmICh2YWx1ZSArIHNpemVvZihzdHJ1Y3QgamZmczJfYWNsX2VudHJ5X3Nob3J0KSA+IGVuZCkKKwkJCWdvdG8gZmFpbDsKKwkJYWNsLT5hX2VudHJpZXNbaV0uZV90YWcgPSBqZTE2X3RvX2NwdShlbnRyeS0+ZV90YWcpOworCQlhY2wtPmFfZW50cmllc1tpXS5lX3Blcm0gPSBqZTE2X3RvX2NwdShlbnRyeS0+ZV9wZXJtKTsKKwkJc3dpdGNoIChhY2wtPmFfZW50cmllc1tpXS5lX3RhZykgeworCQkJY2FzZSBBQ0xfVVNFUl9PQko6CisJCQljYXNlIEFDTF9HUk9VUF9PQko6CisJCQljYXNlIEFDTF9NQVNLOgorCQkJY2FzZSBBQ0xfT1RIRVI6CisJCQkJdmFsdWUgKz0gc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfZW50cnlfc2hvcnQpOworCQkJCWFjbC0+YV9lbnRyaWVzW2ldLmVfaWQgPSBBQ0xfVU5ERUZJTkVEX0lEOworCQkJCWJyZWFrOworCisJCQljYXNlIEFDTF9VU0VSOgorCQkJY2FzZSBBQ0xfR1JPVVA6CisJCQkJdmFsdWUgKz0gc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfZW50cnkpOworCQkJCWlmICh2YWx1ZSA+IGVuZCkKKwkJCQkJZ290byBmYWlsOworCQkJCWFjbC0+YV9lbnRyaWVzW2ldLmVfaWQgPSBqZTMyX3RvX2NwdShlbnRyeS0+ZV9pZCk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJZ290byBmYWlsOworCQl9CisJfQorCWlmICh2YWx1ZSAhPSBlbmQpCisJCWdvdG8gZmFpbDsKKwlyZXR1cm4gYWNsOworIGZhaWw6CisJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworc3RhdGljIHZvaWQgKmpmZnMyX2FjbF90b19tZWRpdW0oY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpCit7CisJc3RydWN0IGpmZnMyX2FjbF9oZWFkZXIgKmhlYWRlcjsKKwlzdHJ1Y3QgamZmczJfYWNsX2VudHJ5ICplbnRyeTsKKwl2b2lkICplOworCXNpemVfdCBpOworCisJKnNpemUgPSBqZmZzMl9hY2xfc2l6ZShhY2wtPmFfY291bnQpOworCWhlYWRlciA9IGttYWxsb2Moc2l6ZW9mKCpoZWFkZXIpICsgYWNsLT5hX2NvdW50ICogc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghaGVhZGVyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwloZWFkZXItPmFfdmVyc2lvbiA9IGNwdV90b19qZTMyKEpGRlMyX0FDTF9WRVJTSU9OKTsKKwllID0gaGVhZGVyICsgMTsKKwlmb3IgKGk9MDsgaSA8IGFjbC0+YV9jb3VudDsgaSsrKSB7CisJCWVudHJ5ID0gZTsKKwkJZW50cnktPmVfdGFnID0gY3B1X3RvX2plMTYoYWNsLT5hX2VudHJpZXNbaV0uZV90YWcpOworCQllbnRyeS0+ZV9wZXJtID0gY3B1X3RvX2plMTYoYWNsLT5hX2VudHJpZXNbaV0uZV9wZXJtKTsKKwkJc3dpdGNoKGFjbC0+YV9lbnRyaWVzW2ldLmVfdGFnKSB7CisJCQljYXNlIEFDTF9VU0VSOgorCQkJY2FzZSBBQ0xfR1JPVVA6CisJCQkJZW50cnktPmVfaWQgPSBjcHVfdG9famUzMihhY2wtPmFfZW50cmllc1tpXS5lX2lkKTsKKwkJCQllICs9IHNpemVvZihzdHJ1Y3QgamZmczJfYWNsX2VudHJ5KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBQ0xfVVNFUl9PQko6CisJCQljYXNlIEFDTF9HUk9VUF9PQko6CisJCQljYXNlIEFDTF9NQVNLOgorCQkJY2FzZSBBQ0xfT1RIRVI6CisJCQkJZSArPSBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9lbnRyeV9zaG9ydCk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJZ290byBmYWlsOworCQl9CisJfQorCXJldHVybiBoZWFkZXI7CisgZmFpbDoKKwlrZnJlZShoZWFkZXIpOworCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworfQorCitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqamZmczJfaWdldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBvc2l4X2FjbCAqKmlfYWNsKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEOworCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlpZiAoKmlfYWNsICE9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEKQorCQlhY2wgPSBwb3NpeF9hY2xfZHVwKCppX2FjbCk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXJldHVybiBhY2w7Cit9CisKK3N0YXRpYyB2b2lkIGpmZnMyX2lzZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwb3NpeF9hY2wgKippX2FjbCwgc3RydWN0IHBvc2l4X2FjbCAqYWNsKQoreworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJaWYgKCppX2FjbCAhPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRCkKKwkJcG9zaXhfYWNsX3JlbGVhc2UoKmlfYWNsKTsKKwkqaV9hY2wgPSBwb3NpeF9hY2xfZHVwKGFjbCk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworfQorCitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqamZmczJfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKKwljaGFyICp2YWx1ZSA9IE5VTEw7CisJaW50IHJjLCB4cHJlZml4OworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CisJCWFjbCA9IGpmZnMyX2lnZXRfYWNsKGlub2RlLCAmZi0+aV9hY2xfYWNjZXNzKTsKKwkJaWYgKGFjbCAhPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRCkKKwkJCXJldHVybiBhY2w7CisJCXhwcmVmaXggPSBKRkZTMl9YUFJFRklYX0FDTF9BQ0NFU1M7CisJCWJyZWFrOworCWNhc2UgQUNMX1RZUEVfREVGQVVMVDoKKwkJYWNsID0gamZmczJfaWdldF9hY2woaW5vZGUsICZmLT5pX2FjbF9kZWZhdWx0KTsKKwkJaWYgKGFjbCAhPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRCkKKwkJCXJldHVybiBhY2w7CisJCXhwcmVmaXggPSBKRkZTMl9YUFJFRklYX0FDTF9ERUZBVUxUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisJcmMgPSBkb19qZmZzMl9nZXR4YXR0cihpbm9kZSwgeHByZWZpeCwgIiIsIE5VTEwsIDApOworCWlmIChyYyA+IDApIHsKKwkJdmFsdWUgPSBrbWFsbG9jKHJjLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlyYyA9IGRvX2pmZnMyX2dldHhhdHRyKGlub2RlLCB4cHJlZml4LCAiIiwgdmFsdWUsIHJjKTsKKwl9CisJaWYgKHJjID4gMCkgeworCQlhY2wgPSBqZmZzMl9hY2xfZnJvbV9tZWRpdW0odmFsdWUsIHJjKTsKKwl9IGVsc2UgaWYgKHJjID09IC1FTk9EQVRBIHx8IHJjID09IC1FTk9TWVMpIHsKKwkJYWNsID0gTlVMTDsKKwl9IGVsc2UgeworCQlhY2wgPSBFUlJfUFRSKHJjKTsKKwl9CisJaWYgKHZhbHVlKQorCQlrZnJlZSh2YWx1ZSk7CisJaWYgKCFJU19FUlIoYWNsKSkgeworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CisJCQlqZmZzMl9pc2V0X2FjbChpbm9kZSwgJmYtPmlfYWNsX2FjY2VzcywgYWNsKTsKKwkJCWJyZWFrOworCQljYXNlIEFDTF9UWVBFX0RFRkFVTFQ6CisJCQlqZmZzMl9pc2V0X2FjbChpbm9kZSwgJmYtPmlfYWNsX2RlZmF1bHQsIGFjbCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gYWNsOworfQorCitzdGF0aWMgaW50IGpmZnMyX3NldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCkKK3sKKwlzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOworCXNpemVfdCBzaXplID0gMDsKKwljaGFyICp2YWx1ZSA9IE5VTEw7CisJaW50IHJjLCB4cHJlZml4OworCisJaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgorCQl4cHJlZml4ID0gSkZGUzJfWFBSRUZJWF9BQ0xfQUNDRVNTOworCQlpZiAoYWNsKSB7CisJCQltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CisJCQlyYyA9IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGFjbCwgJm1vZGUpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlyZXR1cm4gcmM7CisJCQlpZiAoaW5vZGUtPmlfbW9kZSAhPSBtb2RlKSB7CisJCQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CisJCQkJamZmczJfZGlydHlfaW5vZGUoaW5vZGUpOworCQkJfQorCQkJaWYgKHJjID09IDApCisJCQkJYWNsID0gTlVMTDsKKwkJfQorCQlicmVhazsKKwljYXNlIEFDTF9UWVBFX0RFRkFVTFQ6CisJCXhwcmVmaXggPSBKRkZTMl9YUFJFRklYX0FDTF9ERUZBVUxUOworCQlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCQlyZXR1cm4gYWNsID8gLUVBQ0NFUyA6IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoYWNsKSB7CisJCXZhbHVlID0gamZmczJfYWNsX3RvX21lZGl1bShhY2wsICZzaXplKTsKKwkJaWYgKElTX0VSUih2YWx1ZSkpCisJCQlyZXR1cm4gUFRSX0VSUih2YWx1ZSk7CisJfQorCisJcmMgPSBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwgeHByZWZpeCwgIiIsIHZhbHVlLCBzaXplLCAwKTsKKwlpZiAodmFsdWUpCisJCWtmcmVlKHZhbHVlKTsKKwlpZiAoIXJjKSB7CisJCXN3aXRjaCh0eXBlKSB7CisJCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgorCQkJamZmczJfaXNldF9hY2woaW5vZGUsICZmLT5pX2FjbF9hY2Nlc3MsIGFjbCk7CisJCQlicmVhazsKKwkJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgorCQkJamZmczJfaXNldF9hY2woaW5vZGUsICZmLT5pX2FjbF9kZWZhdWx0LCBhY2wpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGpmZnMyX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CisJaW50IHJjOworCisJYWNsID0gamZmczJfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKKwlpZiAoSVNfRVJSKGFjbCkpCisJCXJldHVybiBQVFJfRVJSKGFjbCk7CisJaWYgKGFjbCkgeworCQlyYyA9IHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2spOworCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCQlyZXR1cm4gcmM7CisJfQorCXJldHVybiAtRUFHQUlOOworfQorCitpbnQgamZmczJfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgamZmczJfY2hlY2tfYWNsKTsKK30KKworaW50IGpmZnMyX2luaXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKQoreworCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0gSkZGUzJfSU5PREVfSU5GTyhpbm9kZSk7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTCwgKmNsb25lOworCW1vZGVfdCBtb2RlOworCWludCByYyA9IDA7CisKKwlmLT5pX2FjbF9hY2Nlc3MgPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRDsKKwlmLT5pX2FjbF9kZWZhdWx0ID0gSkZGUzJfQUNMX05PVF9DQUNIRUQ7CisJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7CisJCWFjbCA9IGpmZnMyX2dldF9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxUKTsKKwkJaWYgKElTX0VSUihhY2wpKQorCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKKwkJaWYgKCFhY2wpCisJCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJfQorCWlmIChhY2wpIHsKKwkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJCXJjID0gamZmczJfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfREVGQVVMVCwgYWNsKTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJY2xvbmUgPSBwb3NpeF9hY2xfY2xvbmUoYWNsLCBHRlBfS0VSTkVMKTsKKwkJcmMgPSAtRU5PTUVNOworCQlpZiAoIWNsb25lKQorCQkJZ290byBjbGVhbnVwOworCQltb2RlID0gaW5vZGUtPmlfbW9kZTsKKwkJcmMgPSBwb3NpeF9hY2xfY3JlYXRlX21hc3EoY2xvbmUsICZtb2RlKTsKKwkJaWYgKHJjID49IDApIHsKKwkJCWlub2RlLT5pX21vZGUgPSBtb2RlOworCQkJaWYgKHJjID4gMCkKKwkJCQlyYyA9IGpmZnMyX3NldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgY2xvbmUpOworCQl9CisJCXBvc2l4X2FjbF9yZWxlYXNlKGNsb25lKTsKKwl9CisgY2xlYW51cDoKKwlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCXJldHVybiByYzsKK30KKwordm9pZCBqZmZzMl9jbGVhcl9hY2woc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOworCisJaWYgKGYtPmlfYWNsX2FjY2VzcyAmJiBmLT5pX2FjbF9hY2Nlc3MgIT0gSkZGUzJfQUNMX05PVF9DQUNIRUQpIHsKKwkJcG9zaXhfYWNsX3JlbGVhc2UoZi0+aV9hY2xfYWNjZXNzKTsKKwkJZi0+aV9hY2xfYWNjZXNzID0gSkZGUzJfQUNMX05PVF9DQUNIRUQ7CisJfQorCWlmIChmLT5pX2FjbF9kZWZhdWx0ICYmIGYtPmlfYWNsX2RlZmF1bHQgIT0gSkZGUzJfQUNMX05PVF9DQUNIRUQpIHsKKwkJcG9zaXhfYWNsX3JlbGVhc2UoZi0+aV9hY2xfZGVmYXVsdCk7CisJCWYtPmlfYWNsX2RlZmF1bHQgPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRDsKKwl9Cit9CisKK2ludCBqZmZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2wsICpjbG9uZTsKKwlpbnQgcmM7CisKKwlpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWFjbCA9IGpmZnMyX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CisJaWYgKElTX0VSUihhY2wpIHx8ICFhY2wpCisJCXJldHVybiBQVFJfRVJSKGFjbCk7CisJY2xvbmUgPSBwb3NpeF9hY2xfY2xvbmUoYWNsLCBHRlBfS0VSTkVMKTsKKwlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCWlmICghY2xvbmUpCisJCXJldHVybiAtRU5PTUVNOworCXJjID0gcG9zaXhfYWNsX2NobW9kX21hc3EoY2xvbmUsIGlub2RlLT5pX21vZGUpOworCWlmICghcmMpCisJCXJjID0gamZmczJfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBjbG9uZSk7CisJcG9zaXhfYWNsX3JlbGVhc2UoY2xvbmUpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHNpemVfdCBqZmZzMl9hY2xfYWNjZXNzX2xpc3R4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQoreworCWNvbnN0IGludCByZXRsZW4gPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUyk7CisKKwlpZiAobGlzdCAmJiByZXRsZW4gPD0gbGlzdF9zaXplKQorCQlzdHJjcHkobGlzdCwgUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUyk7CisJcmV0dXJuIHJldGxlbjsKK30KKworc3RhdGljIHNpemVfdCBqZmZzMl9hY2xfZGVmYXVsdF9saXN0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJCQkJICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCit7CisJY29uc3QgaW50IHJldGxlbiA9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCk7CisKKwlpZiAobGlzdCAmJiByZXRsZW4gPD0gbGlzdF9zaXplKQorCQlzdHJjcHkobGlzdCwgUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQpOworCXJldHVybiByZXRsZW47Cit9CisKK3N0YXRpYyBpbnQgamZmczJfYWNsX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKKwlpbnQgcmM7CisKKwlhY2wgPSBqZmZzMl9nZXRfYWNsKGlub2RlLCB0eXBlKTsKKwlpZiAoSVNfRVJSKGFjbCkpCisJCXJldHVybiBQVFJfRVJSKGFjbCk7CisJaWYgKCFhY2wpCisJCXJldHVybiAtRU5PREFUQTsKKwlyYyA9IHBvc2l4X2FjbF90b194YXR0cihhY2wsIGJ1ZmZlciwgc2l6ZSk7CisJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBqZmZzMl9hY2xfYWNjZXNzX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJaWYgKG5hbWVbMF0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGpmZnMyX2FjbF9nZXR4YXR0cihpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGpmZnMyX2FjbF9kZWZhdWx0X2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJaWYgKG5hbWVbMF0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGpmZnMyX2FjbF9nZXR4YXR0cihpbm9kZSwgQUNMX1RZUEVfREVGQVVMVCwgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIGludCBqZmZzMl9hY2xfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CisJaW50IHJjOworCisJaWYgKChjdXJyZW50LT5mc3VpZCAhPSBpbm9kZS0+aV91aWQpICYmICFjYXBhYmxlKENBUF9GT1dORVIpKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKHZhbHVlKSB7CisJCWFjbCA9IHBvc2l4X2FjbF9mcm9tX3hhdHRyKHZhbHVlLCBzaXplKTsKKwkJaWYgKElTX0VSUihhY2wpKQorCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKKwkJaWYgKGFjbCkgeworCQkJcmMgPSBwb3NpeF9hY2xfdmFsaWQoYWNsKTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCWFjbCA9IE5VTEw7CisJfQorCXJjID0gamZmczJfc2V0X2FjbChpbm9kZSwgdHlwZSwgYWNsKTsKKyBvdXQ6CisJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfYWNsX2FjY2Vzc19zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCWlmIChuYW1lWzBdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBqZmZzMl9hY2xfc2V0eGF0dHIoaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIGludCBqZmZzMl9hY2xfZGVmYXVsdF9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlpZiAobmFtZVswXSAhPSAnXDAnKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gamZmczJfYWNsX3NldHhhdHRyKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCBidWZmZXIsIHNpemUpOworfQorCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciBqZmZzMl9hY2xfYWNjZXNzX3hhdHRyX2hhbmRsZXIgPSB7CisJLnByZWZpeAk9IFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsCisJLmxpc3QJPSBqZmZzMl9hY2xfYWNjZXNzX2xpc3R4YXR0ciwKKwkuZ2V0CT0gamZmczJfYWNsX2FjY2Vzc19nZXR4YXR0ciwKKwkuc2V0CT0gamZmczJfYWNsX2FjY2Vzc19zZXR4YXR0ciwKK307CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIGpmZnMyX2FjbF9kZWZhdWx0X3hhdHRyX2hhbmRsZXIgPSB7CisJLnByZWZpeAk9IFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxULAorCS5saXN0CT0gamZmczJfYWNsX2RlZmF1bHRfbGlzdHhhdHRyLAorCS5nZXQJPSBqZmZzMl9hY2xfZGVmYXVsdF9nZXR4YXR0ciwKKwkuc2V0CT0gamZmczJfYWNsX2RlZmF1bHRfc2V0eGF0dHIsCit9OwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvYWNsLmggYi9mcy9qZmZzMi9hY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODkzYmQxCi0tLSAvZGV2L251bGwKKysrIGIvZnMvamZmczIvYWNsLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2ICBORUMgQ29ycG9yYXRpb24KKyAqCisgKiBDcmVhdGVkIGJ5IEthaUdhaSBLb2hlaSA8a2FpZ2FpQGFrLmpwLm5lYy5jb20+CisgKgorICogRm9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmaWxlICdMSUNFTkNFJyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAqCisgKi8KK3N0cnVjdCBqZmZzMl9hY2xfZW50cnkgeworCWppbnQxNl90CWVfdGFnOworCWppbnQxNl90CWVfcGVybTsKKwlqaW50MzJfdAllX2lkOworfTsKKworc3RydWN0IGpmZnMyX2FjbF9lbnRyeV9zaG9ydCB7CisJamludDE2X3QJZV90YWc7CisJamludDE2X3QJZV9wZXJtOworfTsKKworc3RydWN0IGpmZnMyX2FjbF9oZWFkZXIgeworCWppbnQzMl90CWFfdmVyc2lvbjsKK307CisKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMCisKKyNkZWZpbmUgSkZGUzJfQUNMX05PVF9DQUNIRUQgKCh2b2lkICopLTEpCisKK2V4dGVybiBpbnQgamZmczJfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOworZXh0ZXJuIGludCBqZmZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludCBqZmZzMl9pbml0X2FjbChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgamZmczJfY2xlYXJfYWNsKHN0cnVjdCBpbm9kZSAqKTsKKworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGpmZnMyX2FjbF9hY2Nlc3NfeGF0dHJfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBqZmZzMl9hY2xfZGVmYXVsdF94YXR0cl9oYW5kbGVyOworCisjZWxzZQorCisjZGVmaW5lIGpmZnMyX3Blcm1pc3Npb24gTlVMTAorI2RlZmluZSBqZmZzMl9hY2xfY2htb2QoaW5vZGUpCQkoMCkKKyNkZWZpbmUgamZmczJfaW5pdF9hY2woaW5vZGUsZGlyKQkoMCkKKyNkZWZpbmUgamZmczJfY2xlYXJfYWNsKGlub2RlKQorCisjZW5kaWYJLyogQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTCAqLwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvYnVpbGQuYyBiL2ZzL2pmZnMyL2J1aWxkLmMKaW5kZXggNzBmN2E4OS4uMDI4MjY5NiAxMDA2NDQKLS0tIGEvZnMvamZmczIvYnVpbGQuYworKysgYi9mcy9qZmZzMi9idWlsZC5jCkBAIC0xNjAsNiArMTYwLDcgQEAKIAkJaWMtPnNjYW5fZGVudHMgPSBOVUxMOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CisJamZmczJfYnVpbGRfeGF0dHJfc3Vic3lzdGVtKGMpOwogCWMtPmZsYWdzICY9IH5KRkZTMl9TQl9GTEFHX0JVSUxESU5HOwogCiAJZGJnX2ZzYnVpbGQoIkZTIGJ1aWxkIGNvbXBsZXRlXG4iKTsKQEAgLTE3OCw2ICsxNzksNyBAQAogCQkJCWpmZnMyX2ZyZWVfZnVsbF9kaXJlbnQoZmQpOwogCQkJfQogCQl9CisJCWpmZnMyX2NsZWFyX3hhdHRyX3N1YnN5c3RlbShjKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvY29tcHIuYyBiL2ZzL2pmZnMyL2NvbXByLmMKaW5kZXggZTc5NDRlNi4uNzAwMWJhMiAxMDA2NDQKLS0tIGEvZnMvamZmczIvY29tcHIuYworKysgYi9mcy9qZmZzMi9jb21wci5jCkBAIC00MTIsNyArNDEyLDcgQEAKICAgICAgICAgICAgICAgICBrZnJlZShjb21wcmJ1Zik7CiB9CiAKLWludCBqZmZzMl9jb21wcmVzc29yc19pbml0KHZvaWQpCitpbnQgX19pbml0IGpmZnMyX2NvbXByZXNzb3JzX2luaXQodm9pZCkKIHsKIC8qIFJlZ2lzdGVyaW5nIGNvbXByZXNzb3JzICovCiAjaWZkZWYgQ09ORklHX0pGRlMyX1pMSUIKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2NvbXByLmggYi9mcy9qZmZzMi9jb21wci5oCmluZGV4IGE3N2U4MzAuLjUwOWI4YjEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2NvbXByLmgKKysrIGIvZnMvamZmczIvY29tcHIuaApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9qZmZzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2pmZnMyX2ZzX2kuaD4KLSNpbmNsdWRlIDxsaW51eC9qZmZzMl9mc19zYi5oPgorI2luY2x1ZGUgImpmZnMyX2ZzX2kuaCIKKyNpbmNsdWRlICJqZmZzMl9mc19zYi5oIgogI2luY2x1ZGUgIm5vZGVsaXN0LmgiCiAKICNkZWZpbmUgSkZGUzJfUlVCSU5NSVBTX1BSSU9SSVRZIDEwCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9kZWJ1Zy5jIGIvZnMvamZmczIvZGVidWcuYwppbmRleCAxZmUxN2RlLi43MmI0ZmMxIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9kZWJ1Zy5jCisrKyBiL2ZzL2pmZnMyL2RlYnVnLmMKQEAgLTE5MiwxMyArMTkyLDEzIEBACiAJCWVsc2UKIAkJCW15X2RpcnR5X3NpemUgKz0gdG90bGVuOwogCi0JCWlmICgoIXJlZjItPm5leHRfcGh5cykgIT0gKHJlZjIgPT0gamViLT5sYXN0X25vZGUpKSB7Ci0JCQlKRkZTMl9FUlJPUigibm9kZV9yZWYgZm9yIG5vZGUgYXQgJSMwOHggKG1lbSAlcCkgaGFzIG5leHRfcGh5cyBhdCAlIzA4eCAobWVtICVwKSwgbGFzdF9ub2RlIGlzIGF0ICUjMDh4IChtZW0gJXApLlxuIiwKLQkJCQlyZWZfb2Zmc2V0KHJlZjIpLCByZWYyLCByZWZfb2Zmc2V0KHJlZjItPm5leHRfcGh5cyksIHJlZjItPm5leHRfcGh5cywKLQkJCQlyZWZfb2Zmc2V0KGplYi0+bGFzdF9ub2RlKSwgamViLT5sYXN0X25vZGUpOworCQlpZiAoKCFyZWZfbmV4dChyZWYyKSkgIT0gKHJlZjIgPT0gamViLT5sYXN0X25vZGUpKSB7CisJCQlKRkZTMl9FUlJPUigibm9kZV9yZWYgZm9yIG5vZGUgYXQgJSMwOHggKG1lbSAlcCkgaGFzIG5leHQgYXQgJSMwOHggKG1lbSAlcCksIGxhc3Rfbm9kZSBpcyBhdCAlIzA4eCAobWVtICVwKS5cbiIsCisJCQkJICAgIHJlZl9vZmZzZXQocmVmMiksIHJlZjIsIHJlZl9vZmZzZXQocmVmX25leHQocmVmMikpLCByZWZfbmV4dChyZWYyKSwKKwkJCQkgICAgcmVmX29mZnNldChqZWItPmxhc3Rfbm9kZSksIGplYi0+bGFzdF9ub2RlKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJcmVmMiA9IHJlZjItPm5leHRfcGh5czsKKwkJcmVmMiA9IHJlZl9uZXh0KHJlZjIpOwogCX0KIAogCWlmIChteV91c2VkX3NpemUgIT0gamViLT51c2VkX3NpemUpIHsKQEAgLTI2OCw5ICsyNjgsOSBAQAogCX0KIAogCXByaW50ayhKRkZTMl9EQkcpOwotCWZvciAocmVmID0gamViLT5maXJzdF9ub2RlOyA7IHJlZiA9IHJlZi0+bmV4dF9waHlzKSB7CisJZm9yIChyZWYgPSBqZWItPmZpcnN0X25vZGU7IDsgcmVmID0gcmVmX25leHQocmVmKSkgewogCQlwcmludGsoIiUjMDh4KCUjeCkiLCByZWZfb2Zmc2V0KHJlZiksIHJlZi0+X190b3RsZW4pOwotCQlpZiAocmVmLT5uZXh0X3BoeXMpCisJCWlmIChyZWZfbmV4dChyZWYpKQogCQkJcHJpbnRrKCItPiIpOwogCQllbHNlCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2RlYnVnLmggYi9mcy9qZmZzMi9kZWJ1Zy5oCmluZGV4IDE2MmFmNmQuLjVmYTQ5NGEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2RlYnVnLmgKKysrIGIvZnMvamZmczIvZGVidWcuaApAQCAtMTcxLDYgKzE3MSwxMiBAQAogI2RlZmluZSBkYmdfbWVtYWxsb2MoZm10LCAuLi4pCiAjZW5kaWYKIAorLyogV2F0Y2ggdGhlIFhBVFRSIHN1YnN5c3RlbSAqLworI2lmZGVmIEpGRlMyX0RCR19YQVRUUl9NRVNTQUdFUworI2RlZmluZSBkYmdfeGF0dHIoZm10LCAuLi4pICBKRkZTMl9ERUJVRyhmbXQsICMjX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBkYmdfeGF0dHIoZm10LCAuLi4pCisjZW5kaWYgCiAKIC8qICJTYW5pdHkiIGNoZWNrcyAqLwogdm9pZApkaWZmIC0tZ2l0IGEvZnMvamZmczIvZGlyLmMgYi9mcy9qZmZzMi9kaXIuYwppbmRleCA4YmM3YTUwLi5lZGQ4MzcxIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9kaXIuYworKysgYi9mcy9qZmZzMi9kaXIuYwpAQCAtMTcsOCArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9qZmZzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2pmZnMyX2ZzX2kuaD4KLSNpbmNsdWRlIDxsaW51eC9qZmZzMl9mc19zYi5oPgorI2luY2x1ZGUgImpmZnMyX2ZzX2kuaCIKKyNpbmNsdWRlICJqZmZzMl9mc19zYi5oIgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlICJub2RlbGlzdC5oIgogCkBAIC01Nyw3ICs1NywxMiBAQAogCS5ybWRpciA9CWpmZnMyX3JtZGlyLAogCS5ta25vZCA9CWpmZnMyX21rbm9kLAogCS5yZW5hbWUgPQlqZmZzMl9yZW5hbWUsCisJLnBlcm1pc3Npb24gPQlqZmZzMl9wZXJtaXNzaW9uLAogCS5zZXRhdHRyID0JamZmczJfc2V0YXR0ciwKKwkuc2V0eGF0dHIgPQlqZmZzMl9zZXR4YXR0ciwKKwkuZ2V0eGF0dHIgPQlqZmZzMl9nZXR4YXR0ciwKKwkubGlzdHhhdHRyID0JamZmczJfbGlzdHhhdHRyLAorCS5yZW1vdmV4YXR0ciA9CWpmZnMyX3JlbW92ZXhhdHRyCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03OCw2ICs4Myw5IEBACiAKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfbG9va3VwKClcbiIpKTsKIAorCWlmICh0YXJnZXQtPmRfbmFtZS5sZW4gPiBKRkZTMl9NQVhfTkFNRV9MRU4pCisJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOworCiAJZGlyX2YgPSBKRkZTMl9JTk9ERV9JTkZPKGRpcl9pKTsKIAljID0gSkZGUzJfU0JfSU5GTyhkaXJfaS0+aV9zYik7CiAKQEAgLTIwNiwxMiArMjE0LDE1IEBACiAJcmV0ID0gamZmczJfZG9fY3JlYXRlKGMsIGRpcl9mLCBmLCByaSwKIAkJCSAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbik7CiAKLQlpZiAocmV0KSB7Ci0JCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKLQkJaXB1dChpbm9kZSk7Ci0JCWpmZnMyX2ZyZWVfcmF3X2lub2RlKHJpKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJcmV0ID0gamZmczJfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyX2kpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBqZmZzMl9pbml0X2FjbChpbm9kZSwgZGlyX2kpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKIAogCWRpcl9pLT5pX210aW1lID0gZGlyX2ktPmlfY3RpbWUgPSBJVElNRShqZTMyX3RvX2NwdShyaS0+Y3RpbWUpKTsKIApAQCAtMjIxLDYgKzIzMiwxMiBAQAogCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9jcmVhdGU6IENyZWF0ZWQgaW5vICMlbHUgd2l0aCBtb2RlICVvLCBubGluayAlZCglZCkuIG5ycGFnZXMgJWxkXG4iLAogCQkgIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfbmxpbmssIGYtPmlub2NhY2hlLT5ubGluaywgaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcykpOwogCXJldHVybiAwOworCisgZmFpbDoKKwltYWtlX2JhZF9pbm9kZShpbm9kZSk7CisJaXB1dChpbm9kZSk7CisJamZmczJfZnJlZV9yYXdfaW5vZGUocmkpOworCXJldHVybiByZXQ7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI5MSw3ICszMDgsNyBAQAogCXN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICpmbjsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmZkOwogCWludCBuYW1lbGVuOwotCXVpbnQzMl90IGFsbG9jbGVuLCBwaHlzX29mczsKKwl1aW50MzJfdCBhbGxvY2xlbjsKIAlpbnQgcmV0LCB0YXJnZXRsZW4gPSBzdHJsZW4odGFyZ2V0KTsKIAogCS8qIEZJWE1FOiBJZiB5b3UgY2FyZS4gV2UnZCBuZWVkIHRvIHVzZSBmcmFncyBmb3IgdGhlIHRhcmdldApAQCAtMzEwLDggKzMyNyw4IEBACiAJICogSnVzdCB0aGUgbm9kZSB3aWxsIGRvIGZvciBub3csIHRob3VnaAogCSAqLwogCW5hbWVsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47Ci0JcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJpKSArIHRhcmdldGxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCi0JCQkJQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOworCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyaSkgKyB0YXJnZXRsZW4sICZhbGxvY2xlbiwKKwkJCQkgIEFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKIAogCWlmIChyZXQpIHsKIAkJamZmczJfZnJlZV9yYXdfaW5vZGUocmkpOwpAQCAtMzM5LDcgKzM1Niw3IEBACiAJcmktPmRhdGFfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgdGFyZ2V0LCB0YXJnZXRsZW4pKTsKIAlyaS0+bm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCByaSwgc2l6ZW9mKCpyaSktOCkpOwogCi0JZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCByaSwgdGFyZ2V0LCB0YXJnZXRsZW4sIHBoeXNfb2ZzLCBBTExPQ19OT1JNQUwpOworCWZuID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgcmksIHRhcmdldCwgdGFyZ2V0bGVuLCBBTExPQ19OT1JNQUwpOwogCiAJamZmczJfZnJlZV9yYXdfaW5vZGUocmkpOwogCkBAIC0zNzEsOCArMzg4LDIwIEBACiAJdXAoJmYtPnNlbSk7CiAKIAlqZmZzMl9jb21wbGV0ZV9yZXNlcnZhdGlvbihjKTsKLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmQpK25hbWVsZW4sICZwaHlzX29mcywgJmFsbG9jbGVuLAotCQkJCUFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRShuYW1lbGVuKSk7CisKKwlyZXQgPSBqZmZzMl9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXJfaSk7CisJaWYgKHJldCkgeworCQlqZmZzMl9jbGVhcl9pbm9kZShpbm9kZSk7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IGpmZnMyX2luaXRfYWNsKGlub2RlLCBkaXJfaSk7CisJaWYgKHJldCkgeworCQlqZmZzMl9jbGVhcl9pbm9kZShpbm9kZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJkKStuYW1lbGVuLCAmYWxsb2NsZW4sCisJCQkJICBBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobmFtZWxlbikpOwogCWlmIChyZXQpIHsKIAkJLyogRWVwLiAqLwogCQlqZmZzMl9jbGVhcl9pbm9kZShpbm9kZSk7CkBAIC00MDQsNyArNDMzLDcgQEAKIAlyZC0+bm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCByZCwgc2l6ZW9mKCpyZCktOCkpOwogCXJkLT5uYW1lX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIG5hbWVsZW4pKTsKIAotCWZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIGRpcl9mLCByZCwgZGVudHJ5LT5kX25hbWUubmFtZSwgbmFtZWxlbiwgcGh5c19vZnMsIEFMTE9DX05PUk1BTCk7CisJZmQgPSBqZmZzMl93cml0ZV9kaXJlbnQoYywgZGlyX2YsIHJkLCBkZW50cnktPmRfbmFtZS5uYW1lLCBuYW1lbGVuLCBBTExPQ19OT1JNQUwpOwogCiAJaWYgKElTX0VSUihmZCkpIHsKIAkJLyogZGlyZW50IGZhaWxlZCB0byB3cml0ZS4gRGVsZXRlIHRoZSBpbm9kZSBub3JtYWxseQpAQCAtNDQyLDcgKzQ3MSw3IEBACiAJc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKmZuOwogCXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqZmQ7CiAJaW50IG5hbWVsZW47Ci0JdWludDMyX3QgYWxsb2NsZW4sIHBoeXNfb2ZzOworCXVpbnQzMl90IGFsbG9jbGVuOwogCWludCByZXQ7CiAKIAltb2RlIHw9IFNfSUZESVI7CkBAIC00NTcsOCArNDg2LDggQEAKIAkgKiBKdXN0IHRoZSBub2RlIHdpbGwgZG8gZm9yIG5vdywgdGhvdWdoCiAJICovCiAJbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmkpLCAmcGh5c19vZnMsICZhbGxvY2xlbiwgQUxMT0NfTk9STUFMLAotCQkJCUpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CisJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJpKSwgJmFsbG9jbGVuLCBBTExPQ19OT1JNQUwsCisJCQkJICBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOwogCiAJaWYgKHJldCkgewogCQlqZmZzMl9mcmVlX3Jhd19pbm9kZShyaSk7CkBAIC00ODMsNyArNTEyLDcgQEAKIAlyaS0+ZGF0YV9jcmMgPSBjcHVfdG9famUzMigwKTsKIAlyaS0+bm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCByaSwgc2l6ZW9mKCpyaSktOCkpOwogCi0JZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCByaSwgTlVMTCwgMCwgcGh5c19vZnMsIEFMTE9DX05PUk1BTCk7CisJZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCByaSwgTlVMTCwgMCwgQUxMT0NfTk9STUFMKTsKIAogCWpmZnMyX2ZyZWVfcmF3X2lub2RlKHJpKTsKIApAQCAtNTAxLDggKzUzMCwyMCBAQAogCXVwKCZmLT5zZW0pOwogCiAJamZmczJfY29tcGxldGVfcmVzZXJ2YXRpb24oYyk7Ci0JcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJkKStuYW1lbGVuLCAmcGh5c19vZnMsICZhbGxvY2xlbiwKLQkJCQlBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobmFtZWxlbikpOworCisJcmV0ID0gamZmczJfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyX2kpOworCWlmIChyZXQpIHsKKwkJamZmczJfY2xlYXJfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBqZmZzMl9pbml0X2FjbChpbm9kZSwgZGlyX2kpOworCWlmIChyZXQpIHsKKwkJamZmczJfY2xlYXJfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgJmFsbG9jbGVuLAorCQkJCSAgQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsKIAlpZiAocmV0KSB7CiAJCS8qIEVlcC4gKi8KIAkJamZmczJfY2xlYXJfaW5vZGUoaW5vZGUpOwpAQCAtNTM0LDcgKzU3NSw3IEBACiAJcmQtPm5vZGVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgcmQsIHNpemVvZigqcmQpLTgpKTsKIAlyZC0+bmFtZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCBkZW50cnktPmRfbmFtZS5uYW1lLCBuYW1lbGVuKSk7CiAKLQlmZCA9IGpmZnMyX3dyaXRlX2RpcmVudChjLCBkaXJfZiwgcmQsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIG5hbWVsZW4sIHBoeXNfb2ZzLCBBTExPQ19OT1JNQUwpOworCWZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIGRpcl9mLCByZCwgZGVudHJ5LT5kX25hbWUubmFtZSwgbmFtZWxlbiwgQUxMT0NfTk9STUFMKTsKIAogCWlmIChJU19FUlIoZmQpKSB7CiAJCS8qIGRpcmVudCBmYWlsZWQgdG8gd3JpdGUuIERlbGV0ZSB0aGUgaW5vZGUgbm9ybWFsbHkKQEAgLTU4OCwxMiArNjI5LDEyIEBACiAJc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKmZuOwogCXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqZmQ7CiAJaW50IG5hbWVsZW47Ci0JamludDE2X3QgZGV2OworCXVuaW9uIGpmZnMyX2RldmljZV9ub2RlIGRldjsKIAlpbnQgZGV2bGVuID0gMDsKLQl1aW50MzJfdCBhbGxvY2xlbiwgcGh5c19vZnM7CisJdWludDMyX3QgYWxsb2NsZW47CiAJaW50IHJldDsKIAotCWlmICghb2xkX3ZhbGlkX2RldihyZGV2KSkKKwlpZiAoIW5ld192YWxpZF9kZXYocmRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmkgPSBqZmZzMl9hbGxvY19yYXdfaW5vZGUoKTsKQEAgLTYwMiwxNyArNjQzLDE1IEBACiAKIAljID0gSkZGUzJfU0JfSU5GTyhkaXJfaS0+aV9zYik7CiAKLQlpZiAoU19JU0JMSyhtb2RlKSB8fCBTX0lTQ0hSKG1vZGUpKSB7Ci0JCWRldiA9IGNwdV90b19qZTE2KG9sZF9lbmNvZGVfZGV2KHJkZXYpKTsKLQkJZGV2bGVuID0gc2l6ZW9mKGRldik7Ci0JfQorCWlmIChTX0lTQkxLKG1vZGUpIHx8IFNfSVNDSFIobW9kZSkpCisJCWRldmxlbiA9IGpmZnMyX2VuY29kZV9kZXYoJmRldiwgcmRldik7CiAKIAkvKiBUcnkgdG8gcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgZm9yIGJvdGggbm9kZSBhbmQgZGlyZW50LgogCSAqIEp1c3QgdGhlIG5vZGUgd2lsbCBkbyBmb3Igbm93LCB0aG91Z2gKIAkgKi8KIAluYW1lbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOwotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyaSkgKyBkZXZsZW4sICZwaHlzX29mcywgJmFsbG9jbGVuLAotCQkJCUFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKKwlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmkpICsgZGV2bGVuLCAmYWxsb2NsZW4sCisJCQkJICBBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CiAKIAlpZiAocmV0KSB7CiAJCWpmZnMyX2ZyZWVfcmF3X2lub2RlKHJpKTsKQEAgLTYzOSw3ICs2NzgsNyBAQAogCXJpLT5kYXRhX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsICZkZXYsIGRldmxlbikpOwogCXJpLT5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHJpLCBzaXplb2YoKnJpKS04KSk7CiAKLQlmbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsIHJpLCAoY2hhciAqKSZkZXYsIGRldmxlbiwgcGh5c19vZnMsIEFMTE9DX05PUk1BTCk7CisJZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCByaSwgKGNoYXIgKikmZGV2LCBkZXZsZW4sIEFMTE9DX05PUk1BTCk7CiAKIAlqZmZzMl9mcmVlX3Jhd19pbm9kZShyaSk7CiAKQEAgLTY1Nyw4ICs2OTYsMjAgQEAKIAl1cCgmZi0+c2VtKTsKIAogCWpmZnMyX2NvbXBsZXRlX3Jlc2VydmF0aW9uKGMpOwotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCi0JCQkJQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsKKworCXJldCA9IGpmZnMyX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpcl9pKTsKKwlpZiAocmV0KSB7CisJCWpmZnMyX2NsZWFyX2lub2RlKGlub2RlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gamZmczJfaW5pdF9hY2woaW5vZGUsIGRpcl9pKTsKKwlpZiAocmV0KSB7CisJCWpmZnMyX2NsZWFyX2lub2RlKGlub2RlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmQpK25hbWVsZW4sICZhbGxvY2xlbiwKKwkJCQkgIEFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRShuYW1lbGVuKSk7CiAJaWYgKHJldCkgewogCQkvKiBFZXAuICovCiAJCWpmZnMyX2NsZWFyX2lub2RlKGlub2RlKTsKQEAgLTY5Myw3ICs3NDQsNyBAQAogCXJkLT5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHJkLCBzaXplb2YoKnJkKS04KSk7CiAJcmQtPm5hbWVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgZGVudHJ5LT5kX25hbWUubmFtZSwgbmFtZWxlbikpOwogCi0JZmQgPSBqZmZzMl93cml0ZV9kaXJlbnQoYywgZGlyX2YsIHJkLCBkZW50cnktPmRfbmFtZS5uYW1lLCBuYW1lbGVuLCBwaHlzX29mcywgQUxMT0NfTk9STUFMKTsKKwlmZCA9IGpmZnMyX3dyaXRlX2RpcmVudChjLCBkaXJfZiwgcmQsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIG5hbWVsZW4sIEFMTE9DX05PUk1BTCk7CiAKIAlpZiAoSVNfRVJSKGZkKSkgewogCQkvKiBkaXJlbnQgZmFpbGVkIHRvIHdyaXRlLiBEZWxldGUgdGhlIGlub2RlIG5vcm1hbGx5CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9lcmFzZS5jIGIvZnMvamZmczIvZXJhc2UuYwppbmRleCBkYWQ2OGZkLi4xODYyZThiIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9lcmFzZS5jCisrKyBiL2ZzL2pmZnMyL2VyYXNlLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNlbmRpZgogc3RhdGljIHZvaWQgamZmczJfZXJhc2VfZmFpbGVkKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLCB1aW50MzJfdCBiYWRfb2Zmc2V0KTsKIHN0YXRpYyB2b2lkIGpmZnMyX2VyYXNlX3N1Y2NlZWRlZChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYik7Ci1zdGF0aWMgdm9pZCBqZmZzMl9mcmVlX2FsbF9ub2RlX3JlZnMoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpOwogc3RhdGljIHZvaWQgamZmczJfbWFya19lcmFzZWRfYmxvY2soc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpOwogCiBzdGF0aWMgdm9pZCBqZmZzMl9lcmFzZV9ibG9jayhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKQEAgLTEzNiw3ICsxMzUsNyBAQAogCQkJYy0+dXNlZF9zaXplIC09IGplYi0+dXNlZF9zaXplOwogCQkJYy0+ZGlydHlfc2l6ZSAtPSBqZWItPmRpcnR5X3NpemU7CiAJCQlqZWItPndhc3RlZF9zaXplID0gamViLT51c2VkX3NpemUgPSBqZWItPmRpcnR5X3NpemUgPSBqZWItPmZyZWVfc2l6ZSA9IDA7Ci0JCQlqZmZzMl9mcmVlX2FsbF9ub2RlX3JlZnMoYywgamViKTsKKwkJCWpmZnMyX2ZyZWVfamViX25vZGVfcmVmcyhjLCBqZWIpOwogCQkJbGlzdF9hZGQoJmplYi0+bGlzdCwgJmMtPmVyYXNpbmdfbGlzdCk7CiAJCQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIApAQCAtMjMxLDYgKzIzMCw3IEBACiAJCQkgICBhdCB0aGUgZW5kIG9mIHRoZSBsaW5rZWQgbGlzdC4gU3Rhc2ggaXQgYW5kIGNvbnRpbnVlCiAJCQkgICBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgKi8KIAkJCWljID0gKHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqKSgqcHJldik7CisJCQlCVUdfT04oaWMtPmNsYXNzICE9IFJBV05PREVfQ0xBU1NfSU5PREVfQ0FDSEUpOwogCQkJcHJldiA9ICZpYy0+bm9kZXM7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjgzLDIyICsyODMsMjcgQEAKIAkJamZmczJfZGVsX2lub19jYWNoZShjLCBpYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGpmZnMyX2ZyZWVfYWxsX25vZGVfcmVmcyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYikKK3ZvaWQgamZmczJfZnJlZV9qZWJfbm9kZV9yZWZzKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViKQogewotCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJlZjsKKwlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpibG9jaywgKnJlZjsKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiRnJlZWluZyBhbGwgbm9kZSByZWZzIGZvciBlcmFzZWJsb2NrIG9mZnNldCAweCUwOHhcbiIsIGplYi0+b2Zmc2V0KSk7Ci0Jd2hpbGUoamViLT5maXJzdF9ub2RlKSB7Ci0JCXJlZiA9IGplYi0+Zmlyc3Rfbm9kZTsKLQkJamViLT5maXJzdF9ub2RlID0gcmVmLT5uZXh0X3BoeXM7CiAKLQkJLyogUmVtb3ZlIGZyb20gdGhlIGlub2RlLWxpc3QgKi8KLQkJaWYgKHJlZi0+bmV4dF9pbl9pbm8pCisJYmxvY2sgPSByZWYgPSBqZWItPmZpcnN0X25vZGU7CisKKwl3aGlsZSAocmVmKSB7CisJCWlmIChyZWYtPmZsYXNoX29mZnNldCA9PSBSRUZfTElOS19OT0RFKSB7CisJCQlyZWYgPSByZWYtPm5leHRfaW5faW5vOworCQkJamZmczJfZnJlZV9yZWZibG9jayhibG9jayk7CisJCQlibG9jayA9IHJlZjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyZWYtPmZsYXNoX29mZnNldCAhPSBSRUZfRU1QVFlfTk9ERSAmJiByZWYtPm5leHRfaW5faW5vKQogCQkJamZmczJfcmVtb3ZlX25vZGVfcmVmc19mcm9tX2lub19saXN0KGMsIHJlZiwgamViKTsKIAkJLyogZWxzZSBpdCB3YXMgYSBub24taW5vZGUgbm9kZSBvciBhbHJlYWR5IHJlbW92ZWQsIHNvIGRvbid0IGJvdGhlciAqLwogCi0JCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKHJlZik7CisJCXJlZisrOwogCX0KLQlqZWItPmxhc3Rfbm9kZSA9IE5VTEw7CisJamViLT5maXJzdF9ub2RlID0gamViLT5sYXN0X25vZGUgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGpmZnMyX2Jsb2NrX2NoZWNrX2VyYXNlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLCB1aW50MzJfdCAqYmFkX29mZnNldCkKQEAgLTM1MSw3ICszNTYsNiBAQAogCiBzdGF0aWMgdm9pZCBqZmZzMl9tYXJrX2VyYXNlZF9ibG9jayhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYikKIHsKLQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICptYXJrZXJfcmVmID0gTlVMTDsKIAlzaXplX3QgcmV0bGVuOwogCWludCByZXQ7CiAJdWludDMyX3QgYmFkX29mZnNldDsKQEAgLTM3MywxMiArMzc3LDggQEAKIAkJCQlnb3RvIGZpbGViYWQ7CiAJCX0KIAotCQlqZWItPmZpcnN0X25vZGUgPSBqZWItPmxhc3Rfbm9kZSA9IE5VTEw7CisJCS8qIEV2ZXJ5dGhpbmcgZWxzZSBnb3QgemVyb2VkIGJlZm9yZSB0aGUgZXJhc2UgKi8KIAkJamViLT5mcmVlX3NpemUgPSBjLT5zZWN0b3Jfc2l6ZTsKLQkJamViLT51c2VkX3NpemUgPSAwOwotCQlqZWItPmRpcnR5X3NpemUgPSAwOwotCQlqZWItPndhc3RlZF9zaXplID0gMDsKLQogCX0gZWxzZSB7CiAKIAkJc3RydWN0IGt2ZWMgdmVjc1sxXTsKQEAgLTM4OCwxMSArMzg4LDcgQEAKIAkJCS50b3RsZW4gPQljcHVfdG9famUzMihjLT5jbGVhbm1hcmtlcl9zaXplKQogCQl9OwogCi0JCW1hcmtlcl9yZWYgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKTsKLQkJaWYgKCFtYXJrZXJfcmVmKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gYWxsb2NhdGUgcmF3IG5vZGUgcmVmIGZvciBjbGVhbiBtYXJrZXIuIFJlZmlsaW5nXG4iKTsKLQkJCWdvdG8gcmVmaWxlOwotCQl9CisJCWpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoYywgamViLCAxKTsKIAogCQltYXJrZXIuaGRyX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsICZtYXJrZXIsIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKS00KSk7CiAKQEAgLTQwOCwyMSArNDA0LDEzIEBACiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2hvcnQgd3JpdGUgdG8gbmV3bHktZXJhc2VkIGJsb2NrIGF0IDB4JTA4eDogV2FudGVkICV6ZCwgZ290ICV6ZFxuIiwKIAkJCQkgICAgICAgamViLT5vZmZzZXQsIHNpemVvZihtYXJrZXIpLCByZXRsZW4pOwogCi0JCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihtYXJrZXJfcmVmKTsKIAkJCWdvdG8gZmlsZWJhZDsKIAkJfQogCi0JCW1hcmtlcl9yZWYtPm5leHRfaW5faW5vID0gTlVMTDsKLQkJbWFya2VyX3JlZi0+bmV4dF9waHlzID0gTlVMTDsKLQkJbWFya2VyX3JlZi0+Zmxhc2hfb2Zmc2V0ID0gamViLT5vZmZzZXQgfCBSRUZfTk9STUFMOwotCQltYXJrZXJfcmVmLT5fX3RvdGxlbiA9IGMtPmNsZWFubWFya2VyX3NpemU7Ci0KLQkJamViLT5maXJzdF9ub2RlID0gamViLT5sYXN0X25vZGUgPSBtYXJrZXJfcmVmOwotCi0JCWplYi0+ZnJlZV9zaXplID0gYy0+c2VjdG9yX3NpemUgLSBjLT5jbGVhbm1hcmtlcl9zaXplOwotCQlqZWItPnVzZWRfc2l6ZSA9IGMtPmNsZWFubWFya2VyX3NpemU7Ci0JCWplYi0+ZGlydHlfc2l6ZSA9IDA7Ci0JCWplYi0+d2FzdGVkX3NpemUgPSAwOworCQkvKiBFdmVyeXRoaW5nIGVsc2UgZ290IHplcm9lZCBiZWZvcmUgdGhlIGVyYXNlICovCisJCWplYi0+ZnJlZV9zaXplID0gYy0+c2VjdG9yX3NpemU7CisJCS8qIEZJWE1FIFNwZWNpYWwgY2FzZSBmb3IgY2xlYW5tYXJrZXIgaW4gZW1wdHkgYmxvY2sgKi8KKwkJamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIGplYi0+b2Zmc2V0IHwgUkVGX05PUk1BTCwgYy0+Y2xlYW5tYXJrZXJfc2l6ZSwgTlVMTCk7CiAJfQogCiAJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZmlsZS5jIGIvZnMvamZmczIvZmlsZS5jCmluZGV4IDlmNDE3MTIuLmJiODg0NGYgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2ZpbGUuYworKysgYi9mcy9qZmZzMi9maWxlLmMKQEAgLTU0LDcgKzU0LDEyIEBACiAKIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmZnMyX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9CiB7Ci0JLnNldGF0dHIgPQlqZmZzMl9zZXRhdHRyCisJLnBlcm1pc3Npb24gPQlqZmZzMl9wZXJtaXNzaW9uLAorCS5zZXRhdHRyID0JamZmczJfc2V0YXR0ciwKKwkuc2V0eGF0dHIgPQlqZmZzMl9zZXR4YXR0ciwKKwkuZ2V0eGF0dHIgPQlqZmZzMl9nZXR4YXR0ciwKKwkubGlzdHhhdHRyID0JamZmczJfbGlzdHhhdHRyLAorCS5yZW1vdmV4YXR0ciA9CWpmZnMyX3JlbW92ZXhhdHRyCiB9OwogCiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmZnMyX2ZpbGVfYWRkcmVzc19vcGVyYXRpb25zID0KQEAgLTEyOSwxMyArMTM0LDEzIEBACiAJCXN0cnVjdCBqZmZzMl9zYl9pbmZvICpjID0gSkZGUzJfU0JfSU5GTyhpbm9kZS0+aV9zYik7CiAJCXN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgcmk7CiAJCXN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICpmbjsKLQkJdWludDMyX3QgcGh5c19vZnMsIGFsbG9jX2xlbjsKKwkJdWludDMyX3QgYWxsb2NfbGVuOwogCiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJXcml0aW5nIG5ldyBob2xlIGZyYWcgMHgleC0weCV4IGJldHdlZW4gY3VycmVudCBFT0YgYW5kIG5ldyBwYWdlXG4iLAogCQkJICAodW5zaWduZWQgaW50KWlub2RlLT5pX3NpemUsIHBhZ2VvZnMpKTsKIAotCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZihyaSksICZwaHlzX29mcywgJmFsbG9jX2xlbiwKLQkJCQkJQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOworCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZihyaSksICZhbGxvY19sZW4sCisJCQkJCSAgQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIApAQCAtMTYxLDcgKzE2Niw3IEBACiAJCXJpLm5vZGVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgJnJpLCBzaXplb2YocmkpLTgpKTsKIAkJcmkuZGF0YV9jcmMgPSBjcHVfdG9famUzMigwKTsKIAotCQlmbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsICZyaSwgTlVMTCwgMCwgcGh5c19vZnMsIEFMTE9DX05PUk1BTCk7CisJCWZuID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgJnJpLCBOVUxMLCAwLCBBTExPQ19OT1JNQUwpOwogCiAJCWlmIChJU19FUlIoZm4pKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGZuKTsKQEAgLTIxNSwxMiArMjIwLDIwIEBACiAJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2NvbW1pdF93cml0ZSgpOiBpbm8gIyVsdSwgcGFnZSBhdCAweCVseCwgcmFuZ2UgJWQtJWQsIGZsYWdzICVseFxuIiwKIAkJICBpbm9kZS0+aV9pbm8sIHBnLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZULCBzdGFydCwgZW5kLCBwZy0+ZmxhZ3MpKTsKIAotCWlmICghc3RhcnQgJiYgZW5kID09IFBBR0VfQ0FDSEVfU0laRSkgewotCQkvKiBXZSBuZWVkIHRvIGF2b2lkIGRlYWRsb2NrIHdpdGggcGFnZV9jYWNoZV9yZWFkKCkgaW4KLQkJICAgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3Bhc3MoKS4gU28gd2UgaGF2ZSB0byBtYXJrIHRoZQotCQkgICBwYWdlIHVwIHRvIGRhdGUsIHRvIHByZXZlbnQgcGFnZV9jYWNoZV9yZWFkKCkgZnJvbQotCQkgICB0cnlpbmcgdG8gcmUtbG9jayBpdC4gKi8KLQkJU2V0UGFnZVVwdG9kYXRlKHBnKTsKKwlpZiAoZW5kID09IFBBR0VfQ0FDSEVfU0laRSkgeworCQlpZiAoIXN0YXJ0KSB7CisJCQkvKiBXZSBuZWVkIHRvIGF2b2lkIGRlYWRsb2NrIHdpdGggcGFnZV9jYWNoZV9yZWFkKCkgaW4KKwkJCSAgIGpmZnMyX2dhcmJhZ2VfY29sbGVjdF9wYXNzKCkuIFNvIHdlIGhhdmUgdG8gbWFyayB0aGUKKwkJCSAgIHBhZ2UgdXAgdG8gZGF0ZSwgdG8gcHJldmVudCBwYWdlX2NhY2hlX3JlYWQoKSBmcm9tCisJCQkgICB0cnlpbmcgdG8gcmUtbG9jayBpdC4gKi8KKwkJCVNldFBhZ2VVcHRvZGF0ZShwZyk7CisJCX0gZWxzZSB7CisJCQkvKiBXaGVuIHdyaXRpbmcgb3V0IHRoZSBlbmQgb2YgYSBwYWdlLCB3cml0ZSBvdXQgdGhlIAorCQkJICAgX3dob2xlXyBwYWdlLiBUaGlzIGhlbHBzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mCisJCQkgICBub2RlcyBpbiBmaWxlcyB3aGljaCBoYXZlIG1hbnkgc2hvcnQgd3JpdGVzLCBsaWtlCisJCQkgICBzeXNsb2cgZmlsZXMuICovCisJCQlzdGFydCA9IGFsaWduZWRfc3RhcnQgPSAwOworCQl9CiAJfQogCiAJcmkgPSBqZmZzMl9hbGxvY19yYXdfaW5vZGUoKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2ZzLmMgYi9mcy9qZmZzMi9mcy5jCmluZGV4IDA5ZTVkMTAuLjdiNmMyNGIgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2ZzLmMKKysrIGIvZnMvamZmczIvZnMuYwpAQCAtMzMsMTEgKzMzLDExIEBACiAJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYgPSBKRkZTMl9JTk9ERV9JTkZPKGlub2RlKTsKIAlzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyA9IEpGRlMyX1NCX0lORk8oaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKnJpOwotCXVuc2lnbmVkIHNob3J0IGRldjsKKwl1bmlvbiBqZmZzMl9kZXZpY2Vfbm9kZSBkZXY7CiAJdW5zaWduZWQgY2hhciAqbWRhdGEgPSBOVUxMOwogCWludCBtZGF0YWxlbiA9IDA7CiAJdW5zaWduZWQgaW50IGl2YWxpZDsKLQl1aW50MzJfdCBwaHlzX29mcywgYWxsb2NsZW47CisJdWludDMyX3QgYWxsb2NsZW47CiAJaW50IHJldDsKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfc2V0YXR0cigpOiBpbm8gIyVsdVxuIiwgaW5vZGUtPmlfaW5vKSk7CiAJcmV0ID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBpYXR0cik7CkBAIC01MSwyMCArNTEsMjQgQEAKIAkgICBpdCBvdXQgYWdhaW4gd2l0aCB0aGUgYXBwcm9wcmlhdGUgZGF0YSBhdHRhY2hlZCAqLwogCWlmIChTX0lTQkxLKGlub2RlLT5pX21vZGUpIHx8IFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJLyogRm9yIHRoZXNlLCB3ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIHJlYWQgdGhlIG9sZCBub2RlICovCi0JCWRldiA9IG9sZF9lbmNvZGVfZGV2KGlub2RlLT5pX3JkZXYpOworCQltZGF0YWxlbiA9IGpmZnMyX2VuY29kZV9kZXYoJmRldiwgaW5vZGUtPmlfcmRldik7CiAJCW1kYXRhID0gKGNoYXIgKikmZGV2OwotCQltZGF0YWxlbiA9IHNpemVvZihkZXYpOwogCQlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfc2V0YXR0cigpOiBXcml0aW5nICVkIGJ5dGVzIG9mIGtkZXZfdFxuIiwgbWRhdGFsZW4pKTsKIAl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKKwkJZG93bigmZi0+c2VtKTsKIAkJbWRhdGFsZW4gPSBmLT5tZXRhZGF0YS0+c2l6ZTsKIAkJbWRhdGEgPSBrbWFsbG9jKGYtPm1ldGFkYXRhLT5zaXplLCBHRlBfVVNFUik7Ci0JCWlmICghbWRhdGEpCisJCWlmICghbWRhdGEpIHsKKwkJCXVwKCZmLT5zZW0pOwogCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAkJcmV0ID0gamZmczJfcmVhZF9kbm9kZShjLCBmLCBmLT5tZXRhZGF0YSwgbWRhdGEsIDAsIG1kYXRhbGVuKTsKIAkJaWYgKHJldCkgeworCQkJdXAoJmYtPnNlbSk7CiAJCQlrZnJlZShtZGF0YSk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CisJCXVwKCZmLT5zZW0pOwogCQlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfc2V0YXR0cigpOiBXcml0aW5nICVkIGJ5dGVzIG9mIHN5bWxpbmsgdGFyZ2V0XG4iLCBtZGF0YWxlbikpOwogCX0KIApAQCAtNzUsOCArNzksOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmkpICsgbWRhdGFsZW4sICZwaHlzX29mcywgJmFsbG9jbGVuLAotCQkJCUFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKKwlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmkpICsgbWRhdGFsZW4sICZhbGxvY2xlbiwKKwkJCQkgIEFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKIAlpZiAocmV0KSB7CiAJCWpmZnMyX2ZyZWVfcmF3X2lub2RlKHJpKTsKIAkJaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkpCkBAIC0xMjcsNyArMTMxLDcgQEAKIAllbHNlCiAJCXJpLT5kYXRhX2NyYyA9IGNwdV90b19qZTMyKDApOwogCi0JbmV3X21ldGFkYXRhID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgcmksIG1kYXRhLCBtZGF0YWxlbiwgcGh5c19vZnMsIEFMTE9DX05PUk1BTCk7CisJbmV3X21ldGFkYXRhID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgcmksIG1kYXRhLCBtZGF0YWxlbiwgQUxMT0NfTk9STUFMKTsKIAlpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKIAkJa2ZyZWUobWRhdGEpOwogCkBAIC0xODAsNyArMTg0LDEyIEBACiAKIGludCBqZmZzMl9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKIHsKLQlyZXR1cm4gamZmczJfZG9fc2V0YXR0cihkZW50cnktPmRfaW5vZGUsIGlhdHRyKTsKKwlpbnQgcmM7CisKKwlyYyA9IGpmZnMyX2RvX3NldGF0dHIoZGVudHJ5LT5kX2lub2RlLCBpYXR0cik7CisJaWYgKCFyYyAmJiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSkKKwkJcmMgPSBqZmZzMl9hY2xfY2htb2QoZGVudHJ5LT5kX2lub2RlKTsKKwlyZXR1cm4gcmM7CiB9CiAKIGludCBqZmZzMl9zdGF0ZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKQEAgLTIxOSw2ICsyMjgsNyBAQAogCiAJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2NsZWFyX2lub2RlKCk6IGlubyAjJWx1IG1vZGUgJW9cbiIsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbW9kZSkpOwogCisJamZmczJfeGF0dHJfZGVsZXRlX2lub2RlKGMsIGYtPmlub2NhY2hlKTsKIAlqZmZzMl9kb19jbGVhcl9pbm9kZShjLCBmKTsKIH0KIApAQCAtMjI3LDYgKzIzNyw4IEBACiAJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmY7CiAJc3RydWN0IGpmZnMyX3NiX2luZm8gKmM7CiAJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSBsYXRlc3Rfbm9kZTsKKwl1bmlvbiBqZmZzMl9kZXZpY2Vfbm9kZSBqZGV2OworCWRldl90IHJkZXYgPSAwOwogCWludCByZXQ7CiAKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfcmVhZF9pbm9kZSgpOiBpbm9kZS0+aV9pbm8gPT0gJWx1XG4iLCBpbm9kZS0+aV9pbm8pKTsKQEAgLTI1OCw3ICsyNzAsNiBAQAogCWlub2RlLT5pX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgNTExKSA+PiA5OwogCiAJc3dpdGNoIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7Ci0JCWppbnQxNl90IHJkZXY7CiAKIAljYXNlIFNfSUZMTks6CiAJCWlub2RlLT5pX29wID0gJmpmZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTI5Miw4ICszMDMsMTYgQEAKIAljYXNlIFNfSUZCTEs6CiAJY2FzZSBTX0lGQ0hSOgogCQkvKiBSZWFkIHRoZSBkZXZpY2UgbnVtYmVycyBmcm9tIHRoZSBtZWRpYSAqLworCQlpZiAoZi0+bWV0YWRhdGEtPnNpemUgIT0gc2l6ZW9mKGpkZXYub2xkKSAmJgorCQkgICAgZi0+bWV0YWRhdGEtPnNpemUgIT0gc2l6ZW9mKGpkZXYubmV3KSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJEZXZpY2Ugbm9kZSBoYXMgc3RyYW5nZSBzaXplICVkXG4iLCBmLT5tZXRhZGF0YS0+c2l6ZSk7CisJCQl1cCgmZi0+c2VtKTsKKwkJCWpmZnMyX2RvX2NsZWFyX2lub2RlKGMsIGYpOworCQkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOworCQkJcmV0dXJuOworCQl9CiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJSZWFkaW5nIGRldmljZSBudW1iZXJzIGZyb20gZmxhc2hcbiIpKTsKLQkJaWYgKGpmZnMyX3JlYWRfZG5vZGUoYywgZiwgZi0+bWV0YWRhdGEsIChjaGFyICopJnJkZXYsIDAsIHNpemVvZihyZGV2KSkgPCAwKSB7CisJCWlmIChqZmZzMl9yZWFkX2Rub2RlKGMsIGYsIGYtPm1ldGFkYXRhLCAoY2hhciAqKSZqZGV2LCAwLCBmLT5tZXRhZGF0YS0+c2l6ZSkgPCAwKSB7CiAJCQkvKiBFZXAgKi8KIAkJCXByaW50ayhLRVJOX05PVElDRSAiUmVhZCBkZXZpY2UgbnVtYmVycyBmb3IgaW5vZGUgJWx1IGZhaWxlZFxuIiwgKHVuc2lnbmVkIGxvbmcpaW5vZGUtPmlfaW5vKTsKIAkJCXVwKCZmLT5zZW0pOwpAQCAtMzAxLDEyICszMjAsMTUgQEAKIAkJCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIAkJCXJldHVybjsKIAkJfQorCQlpZiAoZi0+bWV0YWRhdGEtPnNpemUgPT0gc2l6ZW9mKGpkZXYub2xkKSkKKwkJCXJkZXYgPSBvbGRfZGVjb2RlX2RldihqZTE2X3RvX2NwdShqZGV2Lm9sZCkpOworCQllbHNlCisJCQlyZGV2ID0gbmV3X2RlY29kZV9kZXYoamUzMl90b19jcHUoamRldi5uZXcpKTsKIAogCWNhc2UgU19JRlNPQ0s6CiAJY2FzZSBTX0lGSUZPOgogCQlpbm9kZS0+aV9vcCA9ICZqZmZzMl9maWxlX2lub2RlX29wZXJhdGlvbnM7Ci0JCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwKLQkJCQkgICBvbGRfZGVjb2RlX2RldigoamUxNl90b19jcHUocmRldikpKSk7CisJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgcmRldik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTQ5Miw2ICs1MTQsOCBAQAogCX0KIAltZW1zZXQoYy0+aW5vY2FjaGVfbGlzdCwgMCwgSU5PQ0FDSEVfSEFTSFNJWkUgKiBzaXplb2Yoc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICopKTsKIAorCWpmZnMyX2luaXRfeGF0dHJfc3Vic3lzdGVtKGMpOworCiAJaWYgKChyZXQgPSBqZmZzMl9kb19tb3VudF9mcyhjKSkpCiAJCWdvdG8gb3V0X2lub2hhc2g7CiAKQEAgLTUyNiw2ICs1NTAsNyBAQAogCWVsc2UKIAkJa2ZyZWUoYy0+YmxvY2tzKTsKICBvdXRfaW5vaGFzaDoKKwlqZmZzMl9jbGVhcl94YXR0cl9zdWJzeXN0ZW0oYyk7CiAJa2ZyZWUoYy0+aW5vY2FjaGVfbGlzdCk7CiAgb3V0X3didWY6CiAJamZmczJfZmxhc2hfY2xlYW51cChjKTsKQEAgLTYzOSwxMyArNjY0LDYgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JLyogYWRkIHNldHVwcyBmb3Igb3RoZXIgYml6YXJyZSBmbGFzaGVzIGhlcmUuLi4gKi8KLQlpZiAoamZmczJfbm9yX2VjYyhjKSkgewotCQlyZXQgPSBqZmZzMl9ub3JfZWNjX2ZsYXNoX3NldHVwKGMpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KIAkvKiBhbmQgRGF0YWZsYXNoICovCiAJaWYgKGpmZnMyX2RhdGFmbGFzaChjKSkgewogCQlyZXQgPSBqZmZzMl9kYXRhZmxhc2hfc2V0dXAoYyk7CkBAIC02NjksMTEgKzY4Nyw2IEBACiAJCWpmZnMyX25hbmRfZmxhc2hfY2xlYW51cChjKTsKIAl9CiAKLQkvKiBhZGQgY2xlYW51cHMgZm9yIG90aGVyIGJpemFycmUgZmxhc2hlcyBoZXJlLi4uICovCi0JaWYgKGpmZnMyX25vcl9lY2MoYykpIHsKLQkJamZmczJfbm9yX2VjY19mbGFzaF9jbGVhbnVwKGMpOwotCX0KLQogCS8qIGFuZCBEYXRhRmxhc2ggKi8KIAlpZiAoamZmczJfZGF0YWZsYXNoKGMpKSB7CiAJCWpmZnMyX2RhdGFmbGFzaF9jbGVhbnVwKGMpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZ2MuYyBiL2ZzL2pmZnMyL2djLmMKaW5kZXggZjlmZmVjZS4uNDc3YzUyNiAxMDA2NDQKLS0tIGEvZnMvamZmczIvZ2MuYworKysgYi9mcy9qZmZzMi9nYy5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIAlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViOwogCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsKIAlpbnQgcmV0ID0gMCwgaW51bSwgbmxpbms7CisJaW50IHhhdHRyID0gMDsKIAogCWlmIChkb3duX2ludGVycnVwdGlibGUoJmMtPmFsbG9jX3NlbSkpCiAJCXJldHVybiAtRUlOVFI7CkBAIC0xMzgsNyArMTM5LDcgQEAKIAkJICAgdGhlIG5vZGUgQ1JDcyBldGMuIERvIGl0IG5vdy4gKi8KIAogCQkvKiBjaGVja2VkX2lubyBpcyBwcm90ZWN0ZWQgYnkgdGhlIGFsbG9jX3NlbSAqLwotCQlpZiAoYy0+Y2hlY2tlZF9pbm8gPiBjLT5oaWdoZXN0X2lubykgeworCQlpZiAoYy0+Y2hlY2tlZF9pbm8gPiBjLT5oaWdoZXN0X2lubyAmJiB4YXR0cikgewogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiQ2hlY2tlZCBhbGwgaW5vZGVzIGJ1dCBzdGlsbCAweCV4IGJ5dGVzIG9mIHVuY2hlY2tlZCBzcGFjZT9cbiIsCiAJCQkgICAgICAgYy0+dW5jaGVja2VkX3NpemUpOwogCQkJamZmczJfZGJnX2R1bXBfYmxvY2tfbGlzdHNfbm9sb2NrKGMpOwpAQCAtMTQ4LDYgKzE0OSw5IEBACiAKIAkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAKKwkJaWYgKCF4YXR0cikKKwkJCXhhdHRyID0gamZmczJfdmVyaWZ5X3hhdHRyKGMpOworCiAJCXNwaW5fbG9jaygmYy0+aW5vY2FjaGVfbG9jayk7CiAKIAkJaWMgPSBqZmZzMl9nZXRfaW5vX2NhY2hlKGMsIGMtPmNoZWNrZWRfaW5vKyspOwpAQCAtMTgxLDYgKzE4NSwxMCBAQAogCQkJICAgYW5kIHRyaWdnZXIgdGhlIEJVRygpIGFib3ZlIHdoaWxlIHdlIGhhdmVuJ3QgeWV0CiAJCQkgICBmaW5pc2hlZCBjaGVja2luZyBhbGwgaXRzIG5vZGVzICovCiAJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiV2FpdGluZyBmb3IgaW5vICMldSB0byBmaW5pc2ggcmVhZGluZ1xuIiwgaWMtPmlubykpOworCQkJLyogV2UgbmVlZCB0byBjb21lIGJhY2sgYWdhaW4gZm9yIHRoZSBfc2FtZV8gaW5vZGUuIFdlJ3ZlCisJCQkgbWFkZSBubyBwcm9ncmVzcyBpbiB0aGlzIGNhc2UsIGJ1dCB0aGF0IHNob3VsZCBiZSBPSyAqLworCQkJYy0+Y2hlY2tlZF9pbm8tLTsKKwogCQkJdXAoJmMtPmFsbG9jX3NlbSk7CiAJCQlzbGVlcF9vbl9zcGludW5sb2NrKCZjLT5pbm9jYWNoZV93cSwgJmMtPmlub2NhY2hlX2xvY2spOwogCQkJcmV0dXJuIDA7CkBAIC0yMzEsNyArMjM5LDcgQEAKIAogCXdoaWxlKHJlZl9vYnNvbGV0ZShyYXcpKSB7CiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJOb2RlIGF0IDB4JTA4eCBpcyBvYnNvbGV0ZS4uLiBza2lwcGluZ1xuIiwgcmVmX29mZnNldChyYXcpKSk7Ci0JCXJhdyA9IHJhdy0+bmV4dF9waHlzOworCQlyYXcgPSByZWZfbmV4dChyYXcpOwogCQlpZiAodW5saWtlbHkoIXJhdykpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImVlcC4gRW5kIG9mIHJhdyBsaXN0IHdoaWxlIHN0aWxsIHN1cHBvc2VkbHkgbm9kZXMgdG8gR0NcbiIpOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZXJhc2UgYmxvY2sgYXQgMHglMDh4LiBmcmVlX3NpemUgMHglMDh4LCBkaXJ0eV9zaXplIDB4JTA4eCwgdXNlZF9zaXplIDB4JTA4eFxuIiwKQEAgLTI0OCwxNiArMjU2LDM3IEBACiAKIAlpZiAoIXJhdy0+bmV4dF9pbl9pbm8pIHsKIAkJLyogSW5vZGUtbGVzcyBub2RlLiBDbGVhbiBtYXJrZXIsIHNuYXBzaG90IG9yIHNvbWV0aGluZyBsaWtlIHRoYXQgKi8KLQkJLyogRklYTUU6IElmIGl0J3Mgc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkLCBpbmNsdWRpbmcgc29tZXRoaW5nCi0JCSAgIHdlIGRvbid0IGdyb2sgdGhhdCBoYXMgSkZGUzJfTk9ERVRZUEVfUldDT01QQVRfQ09QWSwgd2Ugc2hvdWxkIGRvIHNvICovCiAJCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCQlqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUoYywgcmF3KTsKKwkJaWYgKHJlZl9mbGFncyhyYXcpID09IFJFRl9QUklTVElORSkgeworCQkJLyogSXQncyBhbiB1bmtub3duIG5vZGUgd2l0aCBKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0NPUFkgKi8KKwkJCWpmZnMyX2dhcmJhZ2VfY29sbGVjdF9wcmlzdGluZShjLCBOVUxMLCByYXcpOworCQl9IGVsc2UgeworCQkJLyogSnVzdCBtYXJrIGl0IG9ic29sZXRlICovCisJCQlqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUoYywgcmF3KTsKKwkJfQogCQl1cCgmYy0+YWxsb2Nfc2VtKTsKIAkJZ290byBlcmFzZWl0X2xvY2s7CiAJfQogCiAJaWMgPSBqZmZzMl9yYXdfcmVmX3RvX2ljKHJhdyk7CiAKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKwkvKiBXaGVuICdpYycgcmVmZXJzIHhhdHRyX2RhdHVtL3hhdHRyX3JlZiwgdGhpcyBub2RlIGlzIEdDZWQgYXMgeGF0dHIuCisJICogV2UgY2FuIGRlY2lkZSB3aGV0aGVyIHRoaXMgbm9kZSBpcyBpbm9kZSBvciB4YXR0ciBieSBpYy0+Y2xhc3MuICAgICAqLworCWlmIChpYy0+Y2xhc3MgPT0gUkFXTk9ERV9DTEFTU19YQVRUUl9EQVRVTQorCSAgICB8fCBpYy0+Y2xhc3MgPT0gUkFXTk9ERV9DTEFTU19YQVRUUl9SRUYpIHsKKwkJQlVHX09OKHJhdy0+bmV4dF9pbl9pbm8gIT0gKHZvaWQgKilpYyk7CisJCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCisJCWlmIChpYy0+Y2xhc3MgPT0gUkFXTk9ERV9DTEFTU19YQVRUUl9EQVRVTSkgeworCQkJcmV0ID0gamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX2RhdHVtKGMsIChzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKilpYyk7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJfcmVmKGMsIChzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICopaWMpOworCQl9CisJCWdvdG8gcmVsZWFzZV9zZW07CisJfQorI2VuZGlmCisKIAkvKiBXZSBuZWVkIHRvIGhvbGQgdGhlIGlub2NhY2hlLiBFaXRoZXIgdGhlIGVyYXNlX2NvbXBsZXRpb25fbG9jayBvcgogCSAgIHRoZSBpbm9jYWNoZV9sb2NrIGFyZSBzdWZmaWNpZW50OyB3ZSB0cmFkZSBkb3duIHNpbmNlIHRoZSBpbm9jYWNoZV9sb2NrCiAJICAgY2F1c2VzIGxlc3MgY29udGVudGlvbi4gKi8KQEAgLTQ5OSw3ICs1MjgsNiBAQAogCQkJCQkgIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdykKIHsKIAl1bmlvbiBqZmZzMl9ub2RlX3VuaW9uICpub2RlOwotCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm5yYXc7CiAJc2l6ZV90IHJldGxlbjsKIAlpbnQgcmV0OwogCXVpbnQzMl90IHBoeXNfb2ZzLCBhbGxvY2xlbjsKQEAgLTUwOCwxNSArNTM2LDE2IEBACiAKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiR29pbmcgdG8gR0MgUkVGX1BSSVNUSU5FIG5vZGUgYXQgMHglMDh4XG4iLCByZWZfb2Zmc2V0KHJhdykpKTsKIAotCXJhd2xlbiA9IHJlZl90b3RsZW4oYywgYy0+Z2NibG9jaywgcmF3KTsKKwlhbGxvY2xlbiA9IHJhd2xlbiA9IHJlZl90b3RsZW4oYywgYy0+Z2NibG9jaywgcmF3KTsKIAogCS8qIEFzayBmb3IgYSBzbWFsbCBhbW91bnQgb2Ygc3BhY2UgKG9yIHRoZSB0b3RsZW4gaWYgc21hbGxlcikgYmVjYXVzZSB3ZQogCSAgIGRvbid0IHdhbnQgdG8gZm9yY2Ugd2FzdGFnZSBvZiB0aGUgZW5kIG9mIGEgYmxvY2sgaWYgc3BsaXR0aW5nIHdvdWxkCiAJICAgd29yay4gKi8KLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIG1pbl90KHVpbnQzMl90LCBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd19pbm9kZSkgKwotCQkJCUpGRlMyX01JTl9EQVRBX0xFTiwgcmF3bGVuKSwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sIHJhd2xlbik7Ci0JCQkJLyogdGhpcyBpcyBub3QgdGhlIGV4YWN0IHN1bW1hcnkgc2l6ZSBvZiBpdCwKLQkJCQkJaXQgaXMgb25seSBhbiB1cHBlciBlc3RpbWF0aW9uICovCisJaWYgKGljICYmIGFsbG9jbGVuID4gc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUpICsgSkZGUzJfTUlOX0RBVEFfTEVOKQorCQlhbGxvY2xlbiA9IHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X2lub2RlKSArIEpGRlMyX01JTl9EQVRBX0xFTjsKKworCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgYWxsb2NsZW4sICZhbGxvY2xlbiwgcmF3bGVuKTsKKwkvKiAncmF3bGVuJyBpcyBub3QgdGhlIGV4YWN0IHN1bW1hcnkgc2l6ZTsgaXQgaXMgb25seSBhbiB1cHBlciBlc3RpbWF0aW9uICovCiAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtNTgwLDIyICs2MDksMTcgQEAKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIG5vZGUgdHlwZSBmb3IgUkVGX1BSSVNUSU5FIG5vZGUgYXQgMHglMDh4OiAweCUwNHhcbiIsCi0JCSAgICAgICByZWZfb2Zmc2V0KHJhdyksIGplMTZfdG9fY3B1KG5vZGUtPnUubm9kZXR5cGUpKTsKLQkJZ290byBiYWlsOwotCX0KLQotCW5yYXcgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKTsKLQlpZiAoIW5yYXcpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfbm9kZTsKKwkJLyogSWYgaXQncyBpbm9kZS1sZXNzLCB3ZSBkb24ndCBfa25vd18gd2hhdCBpdCBpcy4gSnVzdCBjb3B5IGl0IGludGFjdCAqLworCQlpZiAoaWMpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gbm9kZSB0eXBlIGZvciBSRUZfUFJJU1RJTkUgbm9kZSBhdCAweCUwOHg6IDB4JTA0eFxuIiwKKwkJCSAgICAgICByZWZfb2Zmc2V0KHJhdyksIGplMTZfdG9fY3B1KG5vZGUtPnUubm9kZXR5cGUpKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQogCX0KIAogCS8qIE9LLCBhbGwgdGhlIENSQ3MgYXJlIGdvb2Q7IHRoaXMgbm9kZSBjYW4ganVzdCBiZSBjb3BpZWQgYXMtaXMuICovCiAgcmV0cnk6Ci0JbnJhdy0+Zmxhc2hfb2Zmc2V0ID0gcGh5c19vZnM7Ci0JbnJhdy0+X190b3RsZW4gPSByYXdsZW47Ci0JbnJhdy0+bmV4dF9waHlzID0gTlVMTDsKKwlwaHlzX29mcyA9IHdyaXRlX29mcyhjKTsKIAogCXJldCA9IGpmZnMyX2ZsYXNoX3dyaXRlKGMsIHBoeXNfb2ZzLCByYXdsZW4sICZyZXRsZW4sIChjaGFyICopbm9kZSk7CiAKQEAgLTYwMywxNyArNjI3LDExIEBACiAJCXByaW50ayhLRVJOX05PVElDRSAiV3JpdGUgb2YgJWQgYnl0ZXMgYXQgMHglMDh4IGZhaWxlZC4gcmV0dXJuZWQgJWQsIHJldGxlbiAlemRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJhd2xlbiwgcGh5c19vZnMsIHJldCwgcmV0bGVuKTsKIAkJaWYgKHJldGxlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9lc24ndCBiZWxvbmcgdG8gYW55IGlub2RlICovCi0JCQlucmF3LT5uZXh0X2luX2lubyA9IE5VTEw7Ci0KLQkJCW5yYXctPmZsYXNoX29mZnNldCB8PSBSRUZfT0JTT0xFVEU7Ci0JCQlqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoYywgbnJhdyk7Ci0JCQlqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUoYywgbnJhdyk7CisJCQlqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoYywgcGh5c19vZnMgfCBSRUZfT0JTT0xFVEUsIHJhd2xlbiwgTlVMTCk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIk5vdCBtYXJraW5nIHRoZSBzcGFjZSBhdCAweCUwOHggYXMgZGlydHkgYmVjYXVzZSB0aGUgZmxhc2ggZHJpdmVyIHJldHVybmVkIHJldGxlbiB6ZXJvXG4iLCBucmF3LT5mbGFzaF9vZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgamZmczJfZnJlZV9yYXdfbm9kZV9yZWYobnJhdyk7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIk5vdCBtYXJraW5nIHRoZSBzcGFjZSBhdCAweCUwOHggYXMgZGlydHkgYmVjYXVzZSB0aGUgZmxhc2ggZHJpdmVyIHJldHVybmVkIHJldGxlbiB6ZXJvXG4iLCBwaHlzX29mcyk7CiAJCX0KLQkJaWYgKCFyZXRyaWVkICYmIChucmF3ID0gamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCkpKSB7CisJCWlmICghcmV0cmllZCkgewogCQkJLyogVHJ5IHRvIHJlYWxsb2NhdGUgc3BhY2UgYW5kIHJldHJ5ICovCiAJCQl1aW50MzJfdCBkdW1teTsKIAkJCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIgPSAmYy0+YmxvY2tzW3BoeXNfb2ZzIC8gYy0+c2VjdG9yX3NpemVdOwpAQCAtNjI1LDcgKzY0Myw3IEBACiAJCQlqZmZzMl9kYmdfYWNjdF9zYW5pdHlfY2hlY2soYyxqZWIpOwogCQkJamZmczJfZGJnX2FjY3RfcGFyYW5vaWFfY2hlY2soYywgamViKTsKIAotCQkJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCByYXdsZW4sICZwaHlzX29mcywgJmR1bW15LCByYXdsZW4pOworCQkJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCByYXdsZW4sICZkdW1teSwgcmF3bGVuKTsKIAkJCQkJCS8qIHRoaXMgaXMgbm90IHRoZSBleGFjdCBzdW1tYXJ5IHNpemUgb2YgaXQsCiAJCQkJCQkJaXQgaXMgb25seSBhbiB1cHBlciBlc3RpbWF0aW9uICovCiAKQEAgLTYzOCwyNSArNjU2LDEzIEBACiAJCQkJZ290byByZXRyeTsKIAkJCX0KIAkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gYWxsb2NhdGUgc3BhY2UgdG8gcmV0cnkgZmFpbGVkIHdyaXRlOiAlZCFcbiIsIHJldCkpOwotCQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYobnJhdyk7CiAJCX0KIAotCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihucmF3KTsKIAkJaWYgKCFyZXQpCiAJCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dF9ub2RlOwogCX0KLQlucmF3LT5mbGFzaF9vZmZzZXQgfD0gUkVGX1BSSVNUSU5FOwotCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBucmF3KTsKLQotCS8qIExpbmsgaW50byBwZXItaW5vZGUgbGlzdC4gVGhpcyBpcyBzYWZlIGJlY2F1c2Ugb2YgdGhlIGljCi0JICAgc3RhdGUgYmVpbmcgSU5PX1NUQVRFX0dDLiBOb3RlIHRoYXQgaWYgd2UncmUgZG9pbmcgdGhpcwotCSAgIGZvciBhbiBpbm9kZSB3aGljaCBpcyBpbi1jb3JlLCB0aGUgJ25yYXcnIHBvaW50ZXIgaXMgdGhlbgotCSAgIGdvaW5nIHRvIGJlIGZldGNoZWQgZnJvbSBpYy0+bm9kZXMgYnkgb3VyIGNhbGxlci4gKi8KLQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0gICAgICAgIG5yYXctPm5leHRfaW5faW5vID0gaWMtPm5vZGVzOwotICAgICAgICBpYy0+bm9kZXMgPSBucmF3OwotCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBwaHlzX29mcyB8IFJFRl9QUklTVElORSwgcmF3bGVuLCBpYyk7CiAKIAlqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUoYywgcmF3KTsKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiV0hFRUUhIEdDIFJFRl9QUklTVElORSBub2RlIGF0IDB4JTA4eCBzdWNjZWVkZWRcbiIsIHJlZl9vZmZzZXQocmF3KSkpOwpAQCAtNjc1LDE5ICs2ODEsMTYgQEAKIAlzdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqbmV3X2ZuOwogCXN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgcmk7CiAJc3RydWN0IGpmZnMyX25vZGVfZnJhZyAqbGFzdF9mcmFnOwotCWppbnQxNl90IGRldjsKKwl1bmlvbiBqZmZzMl9kZXZpY2Vfbm9kZSBkZXY7CiAJY2hhciAqbWRhdGEgPSBOVUxMLCBtZGF0YWxlbiA9IDA7Ci0JdWludDMyX3QgYWxsb2NsZW4sIHBoeXNfb2ZzLCBpbGVuOworCXVpbnQzMl90IGFsbG9jbGVuLCBpbGVuOwogCWludCByZXQ7CiAKIAlpZiAoU19JU0JMSyhKRkZTMl9GX0lfTU9ERShmKSkgfHwKIAkgICAgU19JU0NIUihKRkZTMl9GX0lfTU9ERShmKSkgKSB7CiAJCS8qIEZvciB0aGVzZSwgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byByZWFkIHRoZSBvbGQgbm9kZSAqLwotCQkvKiBGSVhNRTogZm9yIG1pbm9yIG9yIG1ham9yID4gMjU1LiAqLwotCQlkZXYgPSBjcHVfdG9famUxNigoKEpGRlMyX0ZfSV9SREVWX01BSihmKSA8PCA4KSB8Ci0JCQlKRkZTMl9GX0lfUkRFVl9NSU4oZikpKTsKKwkJbWRhdGFsZW4gPSBqZmZzMl9lbmNvZGVfZGV2KCZkZXYsIEpGRlMyX0ZfSV9SREVWKGYpKTsKIAkJbWRhdGEgPSAoY2hhciAqKSZkZXY7Ci0JCW1kYXRhbGVuID0gc2l6ZW9mKGRldik7CiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9nYXJiYWdlX2NvbGxlY3RfbWV0YWRhdGEoKTogV3JpdGluZyAlZCBieXRlcyBvZiBrZGV2X3RcbiIsIG1kYXRhbGVuKSk7CiAJfSBlbHNlIGlmIChTX0lTTE5LKEpGRlMyX0ZfSV9NT0RFKGYpKSkgewogCQltZGF0YWxlbiA9IGZuLT5zaXplOwpAQCAtNzA2LDcgKzcwOSw3IEBACiAKIAl9CiAKLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHNpemVvZihyaSkgKyBtZGF0YWxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCisJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCBzaXplb2YocmkpICsgbWRhdGFsZW4sICZhbGxvY2xlbiwKIAkJCQlKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyBvZiAlemQgYnl0ZXMgZm9yIGdhcmJhZ2VfY29sbGVjdF9tZXRhZGF0YSBmYWlsZWQ6ICVkXG4iLApAQCAtNzQ0LDcgKzc0Nyw3IEBACiAJcmkubm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCAmcmksIHNpemVvZihyaSktOCkpOwogCXJpLmRhdGFfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgbWRhdGEsIG1kYXRhbGVuKSk7CiAKLQluZXdfZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCAmcmksIG1kYXRhLCBtZGF0YWxlbiwgcGh5c19vZnMsIEFMTE9DX0dDKTsKKwluZXdfZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCAmcmksIG1kYXRhLCBtZGF0YWxlbiwgQUxMT0NfR0MpOwogCiAJaWYgKElTX0VSUihuZXdfZm4pKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVycm9yIHdyaXRpbmcgbmV3IGRub2RlOiAlbGRcbiIsIFBUUl9FUlIobmV3X2ZuKSk7CkBAIC03NjUsNyArNzY4LDcgQEAKIHsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKm5ld19mZDsKIAlzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCByZDsKLQl1aW50MzJfdCBhbGxvY2xlbiwgcGh5c19vZnM7CisJdWludDMyX3QgYWxsb2NsZW47CiAJaW50IHJldDsKIAogCXJkLm1hZ2ljID0gY3B1X3RvX2plMTYoSkZGUzJfTUFHSUNfQklUTUFTSyk7CkBAIC03ODcsMTQgKzc5MCwxNCBAQAogCXJkLm5vZGVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgJnJkLCBzaXplb2YocmQpLTgpKTsKIAlyZC5uYW1lX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIGZkLT5uYW1lLCByZC5uc2l6ZSkpOwogCi0JcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCBzaXplb2YocmQpK3JkLm5zaXplLCAmcGh5c19vZnMsICZhbGxvY2xlbiwKKwlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHNpemVvZihyZCkrcmQubnNpemUsICZhbGxvY2xlbiwKIAkJCQlKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKHJkLm5zaXplKSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9yZXNlcnZlX3NwYWNlX2djIG9mICV6ZCBieXRlcyBmb3IgZ2FyYmFnZV9jb2xsZWN0X2RpcmVudCBmYWlsZWQ6ICVkXG4iLAogCQkgICAgICAgc2l6ZW9mKHJkKStyZC5uc2l6ZSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JbmV3X2ZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIGYsICZyZCwgZmQtPm5hbWUsIHJkLm5zaXplLCBwaHlzX29mcywgQUxMT0NfR0MpOworCW5ld19mZCA9IGpmZnMyX3dyaXRlX2RpcmVudChjLCBmLCAmcmQsIGZkLT5uYW1lLCByZC5uc2l6ZSwgQUxMT0NfR0MpOwogCiAJaWYgKElTX0VSUihuZXdfZmQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX3dyaXRlX2RpcmVudCBpbiBnYXJiYWdlX2NvbGxlY3RfZGlyZW50IGZhaWxlZDogJWxkXG4iLCBQVFJfRVJSKG5ld19mZCkpOwpAQCAtOTIyLDcgKzkyNSw3IEBACiAJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSByaTsKIAlzdHJ1Y3QgamZmczJfbm9kZV9mcmFnICpmcmFnOwogCXN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICpuZXdfZm47Ci0JdWludDMyX3QgYWxsb2NsZW4sIHBoeXNfb2ZzLCBpbGVuOworCXVpbnQzMl90IGFsbG9jbGVuLCBpbGVuOwogCWludCByZXQ7CiAKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiV3JpdGluZyByZXBsYWNlbWVudCBob2xlIG5vZGUgZm9yIGlubyAjJXUgZnJvbSBvZmZzZXQgMHgleCB0byAweCV4XG4iLApAQCAtMTAwMSwxNCArMTAwNCwxNCBAQAogCXJpLmRhdGFfY3JjID0gY3B1X3RvX2plMzIoMCk7CiAJcmkubm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCAmcmksIHNpemVvZihyaSktOCkpOwogCi0JcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCBzaXplb2YocmkpLCAmcGh5c19vZnMsICZhbGxvY2xlbiwKLQkJCQlKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOworCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgc2l6ZW9mKHJpKSwgJmFsbG9jbGVuLAorCQkJCSAgICAgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX3Jlc2VydmVfc3BhY2VfZ2Mgb2YgJXpkIGJ5dGVzIGZvciBnYXJiYWdlX2NvbGxlY3RfaG9sZSBmYWlsZWQ6ICVkXG4iLAogCQkgICAgICAgc2l6ZW9mKHJpKSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JbmV3X2ZuID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgJnJpLCBOVUxMLCAwLCBwaHlzX29mcywgQUxMT0NfR0MpOworCW5ld19mbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsICZyaSwgTlVMTCwgMCwgQUxMT0NfR0MpOwogCiAJaWYgKElTX0VSUihuZXdfZm4pKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVycm9yIHdyaXRpbmcgbmV3IGhvbGUgbm9kZTogJWxkXG4iLCBQVFJfRVJSKG5ld19mbikpOwpAQCAtMTA3MCw3ICsxMDczLDcgQEAKIHsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqbmV3X2ZuOwogCXN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgcmk7Ci0JdWludDMyX3QgYWxsb2NsZW4sIHBoeXNfb2ZzLCBvZmZzZXQsIG9yaWdfZW5kLCBvcmlnX3N0YXJ0OworCXVpbnQzMl90IGFsbG9jbGVuLCBvZmZzZXQsIG9yaWdfZW5kLCBvcmlnX3N0YXJ0OwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGNoYXIgKmNvbXByYnVmID0gTlVMTCwgKndyaXRlYnVmOwogCXVuc2lnbmVkIGxvbmcgcGc7CkBAIC0xMjI3LDcgKzEyMzAsNyBAQAogCQl1aW50MzJfdCBjZGF0YWxlbjsKIAkJdWludDE2X3QgY29tcHJ0eXBlID0gSkZGUzJfQ09NUFJfTk9ORTsKIAotCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHNpemVvZihyaSkgKyBKRkZTMl9NSU5fREFUQV9MRU4sICZwaHlzX29mcywKKwkJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCBzaXplb2YocmkpICsgSkZGUzJfTUlOX0RBVEFfTEVOLAogCQkJCQkmYWxsb2NsZW4sIEpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CiAKIAkJaWYgKHJldCkgewpAQCAtMTI2NCw3ICsxMjY3LDcgQEAKIAkJcmkubm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCAmcmksIHNpemVvZihyaSktOCkpOwogCQlyaS5kYXRhX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIGNvbXByYnVmLCBjZGF0YWxlbikpOwogCi0JCW5ld19mbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsICZyaSwgY29tcHJidWYsIGNkYXRhbGVuLCBwaHlzX29mcywgQUxMT0NfR0MpOworCQluZXdfZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCAmcmksIGNvbXByYnVmLCBjZGF0YWxlbiwgQUxMT0NfR0MpOwogCiAJCWpmZnMyX2ZyZWVfY29tcHJidWYoY29tcHJidWYsIHdyaXRlYnVmKTsKIApkaWZmIC0tZ2l0IGEvZnMvamZmczIvaGlzdG8uaCBiL2ZzL2pmZnMyL2hpc3RvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYTkzYTAuLjAwMDAwMDAKLS0tIGEvZnMvamZmczIvaGlzdG8uaAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLyogVGhpcyBmaWxlIHByb3ZpZGVzIHRoZSBiaXQtcHJvYmFiaWxpdGllcyBmb3IgdGhlIGlucHV0IGZpbGUgKi8KLSNkZWZpbmUgQklUX0RJVklERVIgNjI5Ci1zdGF0aWMgaW50IGJpdHNbOV0gPSB7IDE3OSwxNjcsMTgzLDE2NSwxNTksMTk4LDE3OCwxMTksfTsgLyogaWEzMiAuc28gZmlsZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamZmczJfZnNfaS5oIGIvZnMvamZmczIvamZmczJfZnNfaS5oCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIGluY2x1ZGUvbGludXgvamZmczJfZnNfaS5oCnJlbmFtZSB0byBmcy9qZmZzMi9qZmZzMl9mc19pLmgKaW5kZXggYWQ1NjViZi4uMmUwY2M4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qZmZzMl9mc19pLmgKKysrIGIvZnMvamZmczIvamZmczJfZnNfaS5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogc3RydWN0IGpmZnMyX2lub2RlX2luZm8gewpAQCAtNDUsNiArNDYsMTAgQEAKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogI2VuZGlmCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMCisJc3RydWN0IHBvc2l4X2FjbCAqaV9hY2xfYWNjZXNzOworCXN0cnVjdCBwb3NpeF9hY2wgKmlfYWNsX2RlZmF1bHQ7CisjZW5kaWYKIH07CiAKICNlbmRpZiAvKiBfSkZGUzJfRlNfSSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qZmZzMl9mc19zYi5oIGIvZnMvamZmczIvamZmczJfZnNfc2IuaApzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3NiLmgKcmVuYW1lIHRvIGZzL2pmZnMyL2pmZnMyX2ZzX3NiLmgKaW5kZXggNGJjZmI1NS4uOTM1ZmVjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qZmZzMl9mc19zYi5oCisrKyBiL2ZzL2pmZnMyL2pmZnMyX2ZzX3NiLmgKQEAgLTEwMCw2ICsxMDAsNyBAQAogI2lmZGVmIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUgogCS8qIFdyaXRlLWJlaGluZCBidWZmZXIgZm9yIE5BTkQgZmxhc2ggKi8KIAl1bnNpZ25lZCBjaGFyICp3YnVmOworCXVuc2lnbmVkIGNoYXIgKm9vYmJ1ZjsKIAl1aW50MzJfdCB3YnVmX29mczsKIAl1aW50MzJfdCB3YnVmX2xlbjsKIAlzdHJ1Y3QgamZmczJfaW5vZGlydHkgKndidWZfaW5vZGVzOwpAQCAtMTA3LDcgKzEwOCw3IEBACiAJc3RydWN0IHJ3X3NlbWFwaG9yZSB3YnVmX3NlbTsJLyogUHJvdGVjdHMgdGhlIHdyaXRlIGJ1ZmZlciAqLwogCiAJLyogSW5mb3JtYXRpb24gYWJvdXQgb3V0LW9mLWJhbmQgYXJlYSB1c2FnZS4uLiAqLwotCXN0cnVjdCBuYW5kX29vYmluZm8gKm9vYmluZm87CisJc3RydWN0IG5hbmRfZWNjbGF5b3V0ICplY2NsYXlvdXQ7CiAJdWludDMyX3QgYmFkYmxvY2tfcG9zOwogCXVpbnQzMl90IGZzZGF0YV9wb3M7CiAJdWludDMyX3QgZnNkYXRhX2xlbjsKQEAgLTExNSw2ICsxMTYsMTYgQEAKIAogCXN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzdW1tYXJ5OwkJLyogU3VtbWFyeSBpbmZvcm1hdGlvbiAqLwogCisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCisjZGVmaW5lIFhBVFRSSU5ERVhfSEFTSFNJWkUJKDU3KQorCXVpbnQzMl90IGhpZ2hlc3RfeGlkOworCXN0cnVjdCBsaXN0X2hlYWQgeGF0dHJpbmRleFtYQVRUUklOREVYX0hBU0hTSVpFXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHhhdHRyX3VuY2hlY2tlZDsKKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICp4cmVmX3RlbXA7CisJc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CisJdWludDMyX3QgeGRhdHVtX21lbV91c2FnZTsKKwl1aW50MzJfdCB4ZGF0dW1fbWVtX3RocmVzaG9sZDsKKyNlbmRpZgogCS8qIE9TLXByaXZhdGUgcG9pbnRlciBmb3IgZ2V0dGluZyBiYWNrIHRvIG1hc3RlciBzdXBlcmJsb2NrIGluZm8gKi8KIAl2b2lkICpvc19wcml2OwogfTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL21hbGxvYy5jIGIvZnMvamZmczIvbWFsbG9jLmMKaW5kZXggMDM2Y2JkMS4uNDg4OWQwNyAxMDA2NDQKLS0tIGEvZnMvamZmczIvbWFsbG9jLmMKKysrIGIvZnMvamZmczIvbWFsbG9jLmMKQEAgLTI2LDYgKzI2LDEwIEBACiBzdGF0aWMga21lbV9jYWNoZV90ICpyYXdfbm9kZV9yZWZfc2xhYjsKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKm5vZGVfZnJhZ19zbGFiOwogc3RhdGljIGttZW1fY2FjaGVfdCAqaW5vZGVfY2FjaGVfc2xhYjsKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKK3N0YXRpYyBrbWVtX2NhY2hlX3QgKnhhdHRyX2RhdHVtX2NhY2hlOworc3RhdGljIGttZW1fY2FjaGVfdCAqeGF0dHJfcmVmX2NhY2hlOworI2VuZGlmCiAKIGludCBfX2luaXQgamZmczJfY3JlYXRlX3NsYWJfY2FjaGVzKHZvaWQpCiB7CkBAIC01Myw4ICs1Nyw4IEBACiAJaWYgKCF0bXBfZG5vZGVfaW5mb19zbGFiKQogCQlnb3RvIGVycjsKIAotCXJhd19ub2RlX3JlZl9zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoImpmZnMyX3Jhd19ub2RlX3JlZiIsCi0JCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmKSwKKwlyYXdfbm9kZV9yZWZfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJqZmZzMl9yZWZibG9jayIsCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmKSAqIChSRUZTX1BFUl9CTE9DSyArIDEpLAogCQkJCQkgICAgICAwLCAwLCBOVUxMLCBOVUxMKTsKIAlpZiAoIXJhd19ub2RlX3JlZl9zbGFiKQogCQlnb3RvIGVycjsKQEAgLTY4LDggKzcyLDI0IEBACiAJaW5vZGVfY2FjaGVfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJqZmZzMl9pbm9kZV9jYWNoZSIsCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSksCiAJCQkJCSAgICAgMCwgMCwgTlVMTCwgTlVMTCk7Ci0JaWYgKGlub2RlX2NhY2hlX3NsYWIpCi0JCXJldHVybiAwOworCWlmICghaW5vZGVfY2FjaGVfc2xhYikKKwkJZ290byBlcnI7CisKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKwl4YXR0cl9kYXR1bV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJqZmZzMl94YXR0cl9kYXR1bSIsCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSksCisJCQkJCSAgICAgMCwgMCwgTlVMTCwgTlVMTCk7CisJaWYgKCF4YXR0cl9kYXR1bV9jYWNoZSkKKwkJZ290byBlcnI7CisKKwl4YXR0cl9yZWZfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiamZmczJfeGF0dHJfcmVmIiwKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl94YXR0cl9yZWYpLAorCQkJCQkgICAwLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoIXhhdHRyX3JlZl9jYWNoZSkKKwkJZ290byBlcnI7CisjZW5kaWYKKworCXJldHVybiAwOwogIGVycjoKIAlqZmZzMl9kZXN0cm95X3NsYWJfY2FjaGVzKCk7CiAJcmV0dXJuIC1FTk9NRU07CkBAIC05MSw2ICsxMTEsMTIgQEAKIAkJa21lbV9jYWNoZV9kZXN0cm95KG5vZGVfZnJhZ19zbGFiKTsKIAlpZihpbm9kZV9jYWNoZV9zbGFiKQogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koaW5vZGVfY2FjaGVfc2xhYik7CisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCisJaWYgKHhhdHRyX2RhdHVtX2NhY2hlKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3koeGF0dHJfZGF0dW1fY2FjaGUpOworCWlmICh4YXR0cl9yZWZfY2FjaGUpCisJCWttZW1fY2FjaGVfZGVzdHJveSh4YXR0cl9yZWZfY2FjaGUpOworI2VuZGlmCiB9CiAKIHN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqamZmczJfYWxsb2NfZnVsbF9kaXJlbnQoaW50IG5hbWVzaXplKQpAQCAtMTY0LDE1ICsxOTAsNjUgQEAKIAlrbWVtX2NhY2hlX2ZyZWUodG1wX2Rub2RlX2luZm9fc2xhYiwgeCk7CiB9CiAKLXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKmpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZih2b2lkKQorc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqamZmczJfYWxsb2NfcmVmYmxvY2sodm9pZCkKIHsKIAlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyZXQ7CisKIAlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jKHJhd19ub2RlX3JlZl9zbGFiLCBHRlBfS0VSTkVMKTsKLQlkYmdfbWVtYWxsb2MoIiVwXG4iLCByZXQpOworCWlmIChyZXQpIHsKKwkJaW50IGkgPSAwOworCQlmb3IgKGk9MDsgaSA8IFJFRlNfUEVSX0JMT0NLOyBpKyspIHsKKwkJCXJldFtpXS5mbGFzaF9vZmZzZXQgPSBSRUZfRU1QVFlfTk9ERTsKKwkJCXJldFtpXS5uZXh0X2luX2lubyA9IE5VTEw7CisJCX0KKwkJcmV0W2ldLmZsYXNoX29mZnNldCA9IFJFRl9MSU5LX05PREU7CisJCXJldFtpXS5uZXh0X2luX2lubyA9IE5VTEw7CisJfQogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgamZmczJfZnJlZV9yYXdfbm9kZV9yZWYoc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqeCkKK2ludCBqZmZzMl9wcmVhbGxvY19yYXdfbm9kZV9yZWZzKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJCSBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLCBpbnQgbnIpCit7CisJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqKnAsICpyZWY7CisJaW50IGkgPSBucjsKKworCWRiZ19tZW1hbGxvYygiJWRcbiIsIG5yKTsKKworCXAgPSAmamViLT5sYXN0X25vZGU7CisJcmVmID0gKnA7CisKKwlkYmdfbWVtYWxsb2MoIlJlc2VydmluZyAlZCByZWZzIGZvciBibG9jayBAMHglMDh4XG4iLCBuciwgamViLT5vZmZzZXQpOworCisJLyogSWYgamViLT5sYXN0X25vZGUgaXMgcmVhbGx5IGEgdmFsaWQgbm9kZSB0aGVuIHNraXAgb3ZlciBpdCAqLworCWlmIChyZWYgJiYgcmVmLT5mbGFzaF9vZmZzZXQgIT0gUkVGX0VNUFRZX05PREUpCisJCXJlZisrOworCisJd2hpbGUgKGkpIHsKKwkJaWYgKCFyZWYpIHsKKwkJCWRiZ19tZW1hbGxvYygiQWxsb2NhdGluZyBuZXcgcmVmYmxvY2sgbGlua2VkIGZyb20gJXBcbiIsIHApOworCQkJcmVmID0gKnAgPSBqZmZzMl9hbGxvY19yZWZibG9jaygpOworCQkJaWYgKCFyZWYpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJaWYgKHJlZi0+Zmxhc2hfb2Zmc2V0ID09IFJFRl9MSU5LX05PREUpIHsKKwkJCXAgPSAmcmVmLT5uZXh0X2luX2lubzsKKwkJCXJlZiA9ICpwOworCQkJY29udGludWU7CisJCX0KKwkJaS0tOworCQlyZWYrKzsKKwl9CisJamViLT5hbGxvY2F0ZWRfcmVmcyA9IG5yOworCisJZGJnX21lbWFsbG9jKCJSZXNlcnZlZCAlZCByZWZzIGZvciBibG9jayBAMHglMDh4LCBsYXN0X25vZGUgaXMgJXAgKCUwOHgsJXApXG4iLAorCQkgIG5yLCBqZWItPm9mZnNldCwgamViLT5sYXN0X25vZGUsIGplYi0+bGFzdF9ub2RlLT5mbGFzaF9vZmZzZXQsCisJCSAgamViLT5sYXN0X25vZGUtPm5leHRfaW5faW5vKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGpmZnMyX2ZyZWVfcmVmYmxvY2soc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqeCkKIHsKIAlkYmdfbWVtYWxsb2MoIiVwXG4iLCB4KTsKIAlrbWVtX2NhY2hlX2ZyZWUocmF3X25vZGVfcmVmX3NsYWIsIHgpOwpAQCAtMjA1LDMgKzI4MSw0MCBAQAogCWRiZ19tZW1hbGxvYygiJXBcbiIsIHgpOwogCWttZW1fY2FjaGVfZnJlZShpbm9kZV9jYWNoZV9zbGFiLCB4KTsKIH0KKworI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgorc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICpqZmZzMl9hbGxvY194YXR0cl9kYXR1bSh2b2lkKQoreworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisJeGQgPSBrbWVtX2NhY2hlX2FsbG9jKHhhdHRyX2RhdHVtX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlkYmdfbWVtYWxsb2MoIiVwXG4iLCB4ZCk7CisKKwltZW1zZXQoeGQsIDAsIHNpemVvZihzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0pKTsKKwl4ZC0+Y2xhc3MgPSBSQVdOT0RFX0NMQVNTX1hBVFRSX0RBVFVNOworCUlOSVRfTElTVF9IRUFEKCZ4ZC0+eGluZGV4KTsKKwlyZXR1cm4geGQ7Cit9CisKK3ZvaWQgamZmczJfZnJlZV94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKQoreworCWRiZ19tZW1hbGxvYygiJXBcbiIsIHhkKTsKKwlrbWVtX2NhY2hlX2ZyZWUoeGF0dHJfZGF0dW1fY2FjaGUsIHhkKTsKK30KKworc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqamZmczJfYWxsb2NfeGF0dHJfcmVmKHZvaWQpCit7CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmOworCXJlZiA9IGttZW1fY2FjaGVfYWxsb2MoeGF0dHJfcmVmX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlkYmdfbWVtYWxsb2MoIiVwXG4iLCByZWYpOworCisJbWVtc2V0KHJlZiwgMCwgc2l6ZW9mKHN0cnVjdCBqZmZzMl94YXR0cl9yZWYpKTsKKwlyZWYtPmNsYXNzID0gUkFXTk9ERV9DTEFTU19YQVRUUl9SRUY7CisJcmV0dXJuIHJlZjsKK30KKwordm9pZCBqZmZzMl9mcmVlX3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYpCit7CisJZGJnX21lbWFsbG9jKCIlcFxuIiwgcmVmKTsKKwlrbWVtX2NhY2hlX2ZyZWUoeGF0dHJfcmVmX2NhY2hlLCByZWYpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9ub2RlbGlzdC5jIGIvZnMvamZmczIvbm9kZWxpc3QuYwppbmRleCAxZDQ2Njc3Li45MjdkZmU0IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9ub2RlbGlzdC5jCisrKyBiL2ZzL2pmZnMyL25vZGVsaXN0LmMKQEAgLTQzOCw4ICs0MzgsNyBAQAogCWlmIChjLT5tdGQtPnBvaW50KSB7CiAJCWVyciA9IGMtPm10ZC0+cG9pbnQoYy0+bXRkLCBvZnMsIGxlbiwgJnJldGxlbiwgJmJ1ZmZlcik7CiAJCWlmICghZXJyICYmIHJldGxlbiA8IHRuLT5jc2l6ZSkgewotCQkJSkZGUzJfV0FSTklORygiTVREIHBvaW50IHJldHVybmVkIGxlbiB0b28gc2hvcnQ6ICV6dSAiCi0JCQkJCSJpbnN0ZWFkIG9mICV1LlxuIiwgcmV0bGVuLCB0bi0+Y3NpemUpOworCQkJSkZGUzJfV0FSTklORygiTVREIHBvaW50IHJldHVybmVkIGxlbiB0b28gc2hvcnQ6ICV6dSBpbnN0ZWFkIG9mICV1LlxuIiwgcmV0bGVuLCB0bi0+Y3NpemUpOwogCQkJYy0+bXRkLT51bnBvaW50KGMtPm10ZCwgYnVmZmVyLCBvZnMsIGxlbik7CiAJCX0gZWxzZSBpZiAoZXJyKQogCQkJSkZGUzJfV0FSTklORygiTVREIHBvaW50IGZhaWxlZDogZXJyb3IgY29kZSAlZC5cbiIsIGVycik7CkBAIC00NjIsOCArNDYxLDcgQEAKIAkJfQogCiAJCWlmIChyZXRsZW4gIT0gbGVuKSB7Ci0JCQlKRkZTMl9FUlJPUigic2hvcnQgcmVhZCBhdCAlIzA4eDogJXpkIGluc3RlYWQgb2YgJWQuXG4iLAotCQkJCQlvZnMsIHJldGxlbiwgbGVuKTsKKwkJCUpGRlMyX0VSUk9SKCJzaG9ydCByZWFkIGF0ICUjMDh4OiAlemQgaW5zdGVhZCBvZiAlZC5cbiIsIG9mcywgcmV0bGVuLCBsZW4pOwogCQkJZXJyID0gLUVJTzsKIAkJCWdvdG8gZnJlZV9vdXQ7CiAJCX0KQEAgLTk0MCw2ICs5MzgsNyBAQAogCQl0aGlzID0gYy0+aW5vY2FjaGVfbGlzdFtpXTsKIAkJd2hpbGUgKHRoaXMpIHsKIAkJCW5leHQgPSB0aGlzLT5uZXh0OworCQkJamZmczJfeGF0dHJfZnJlZV9pbm9kZShjLCB0aGlzKTsKIAkJCWpmZnMyX2ZyZWVfaW5vZGVfY2FjaGUodGhpcyk7CiAJCQl0aGlzID0gbmV4dDsKIAkJfQpAQCAtOTU0LDkgKzk1MywxMyBAQAogCiAJZm9yIChpPTA7IGk8Yy0+bnJfYmxvY2tzOyBpKyspIHsKIAkJdGhpcyA9IGMtPmJsb2Nrc1tpXS5maXJzdF9ub2RlOwotCQl3aGlsZSh0aGlzKSB7Ci0JCQluZXh0ID0gdGhpcy0+bmV4dF9waHlzOwotCQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYodGhpcyk7CisJCXdoaWxlICh0aGlzKSB7CisJCQlpZiAodGhpc1tSRUZTX1BFUl9CTE9DS10uZmxhc2hfb2Zmc2V0ID09IFJFRl9MSU5LX05PREUpCisJCQkJbmV4dCA9IHRoaXNbUkVGU19QRVJfQkxPQ0tdLm5leHRfaW5faW5vOworCQkJZWxzZQorCQkJCW5leHQgPSBOVUxMOworCisJCQlqZmZzMl9mcmVlX3JlZmJsb2NrKHRoaXMpOwogCQkJdGhpcyA9IG5leHQ7CiAJCX0KIAkJYy0+YmxvY2tzW2ldLmZpcnN0X25vZGUgPSBjLT5ibG9ja3NbaV0ubGFzdF9ub2RlID0gTlVMTDsKQEAgLTEwNDcsMyArMTA1MCwxNjkgQEAKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogfQorCitzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpqZmZzMl9saW5rX25vZGVfcmVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJCQkgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKKwkJCQkJICAgICAgIHVpbnQzMl90IG9mcywgdWludDMyX3QgbGVuLAorCQkJCQkgICAgICAgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYykKK3sKKwlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyZWY7CisKKwlCVUdfT04oIWplYi0+YWxsb2NhdGVkX3JlZnMpOworCWplYi0+YWxsb2NhdGVkX3JlZnMtLTsKKworCXJlZiA9IGplYi0+bGFzdF9ub2RlOworCisJZGJnX25vZGVyZWYoIkxhc3Qgbm9kZSBhdCAlcCBpcyAoJTA4eCwlcClcbiIsIHJlZiwgcmVmLT5mbGFzaF9vZmZzZXQsCisJCSAgICByZWYtPm5leHRfaW5faW5vKTsKKworCXdoaWxlIChyZWYtPmZsYXNoX29mZnNldCAhPSBSRUZfRU1QVFlfTk9ERSkgeworCQlpZiAocmVmLT5mbGFzaF9vZmZzZXQgPT0gUkVGX0xJTktfTk9ERSkKKwkJCXJlZiA9IHJlZi0+bmV4dF9pbl9pbm87CisJCWVsc2UKKwkJCXJlZisrOworCX0KKworCWRiZ19ub2RlcmVmKCJOZXcgcmVmIGlzICVwICglMDh4IGJlY29tZXMgJTA4eCwlcCkgbGVuIDB4JXhcbiIsIHJlZiwgCisJCSAgICByZWYtPmZsYXNoX29mZnNldCwgb2ZzLCByZWYtPm5leHRfaW5faW5vLCBsZW4pOworCisJcmVmLT5mbGFzaF9vZmZzZXQgPSBvZnM7CisKKwlpZiAoIWplYi0+Zmlyc3Rfbm9kZSkgeworCQlqZWItPmZpcnN0X25vZGUgPSByZWY7CisJCUJVR19PTihyZWZfb2Zmc2V0KHJlZikgIT0gamViLT5vZmZzZXQpOworCX0gZWxzZSBpZiAodW5saWtlbHkocmVmX29mZnNldChyZWYpICE9IGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLSBqZWItPmZyZWVfc2l6ZSkpIHsKKwkJdWludDMyX3QgbGFzdF9sZW4gPSByZWZfdG90bGVuKGMsIGplYiwgamViLT5sYXN0X25vZGUpOworCisJCUpGRlMyX0VSUk9SKCJBZGRpbmcgbmV3IHJlZiAlcCBhdCAoMHglMDh4LTB4JTA4eCkgbm90IGltbWVkaWF0ZWx5IGFmdGVyIHByZXZpb3VzICgweCUwOHgtMHglMDh4KVxuIiwKKwkJCSAgICByZWYsIHJlZl9vZmZzZXQocmVmKSwgcmVmX29mZnNldChyZWYpK2xlbiwKKwkJCSAgICByZWZfb2Zmc2V0KGplYi0+bGFzdF9ub2RlKSwgCisJCQkgICAgcmVmX29mZnNldChqZWItPmxhc3Rfbm9kZSkrbGFzdF9sZW4pOworCQlCVUcoKTsKKwl9CisJamViLT5sYXN0X25vZGUgPSByZWY7CisKKwlpZiAoaWMpIHsKKwkJcmVmLT5uZXh0X2luX2lubyA9IGljLT5ub2RlczsKKwkJaWMtPm5vZGVzID0gcmVmOworCX0gZWxzZSB7CisJCXJlZi0+bmV4dF9pbl9pbm8gPSBOVUxMOworCX0KKworCXN3aXRjaChyZWZfZmxhZ3MocmVmKSkgeworCWNhc2UgUkVGX1VOQ0hFQ0tFRDoKKwkJYy0+dW5jaGVja2VkX3NpemUgKz0gbGVuOworCQlqZWItPnVuY2hlY2tlZF9zaXplICs9IGxlbjsKKwkJYnJlYWs7CisKKwljYXNlIFJFRl9OT1JNQUw6CisJY2FzZSBSRUZfUFJJU1RJTkU6CisJCWMtPnVzZWRfc2l6ZSArPSBsZW47CisJCWplYi0+dXNlZF9zaXplICs9IGxlbjsKKwkJYnJlYWs7CisKKwljYXNlIFJFRl9PQlNPTEVURToKKwkJYy0+ZGlydHlfc2l6ZSArPSBsZW47CisJCWplYi0+ZGlydHlfc2l6ZSArPSBsZW47CisJCWJyZWFrOworCX0KKwljLT5mcmVlX3NpemUgLT0gbGVuOworCWplYi0+ZnJlZV9zaXplIC09IGxlbjsKKworI2lmZGVmIFRFU1RfVE9UTEVOCisJLyogU2V0IChhbmQgdGVzdCkgX190b3RsZW4gZmllbGQuLi4gZm9yIG5vdyAqLworCXJlZi0+X190b3RsZW4gPSBsZW47CisJcmVmX3RvdGxlbihjLCBqZWIsIHJlZik7CisjZW5kaWYKKwlyZXR1cm4gcmVmOworfQorCisvKiBObyBsb2NraW5nLCBubyByZXNlcnZhdGlvbiBvZiAncmVmJy4gRG8gbm90IHVzZSBvbiBhIGxpdmUgZmlsZSBzeXN0ZW0gKi8KK2ludCBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAorCQkJICAgdWludDMyX3Qgc2l6ZSkKK3sKKwlpZiAoIXNpemUpCisJCXJldHVybiAwOworCWlmICh1bmxpa2VseShzaXplID4gamViLT5mcmVlX3NpemUpKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIkRpcnR5IHNwYWNlIDB4JXggbGFyZ2VyIHRoZW4gZnJlZV9zaXplIDB4JXggKHdhc3RlZCAweCV4KVxuIiwKKwkJICAgICAgIHNpemUsIGplYi0+ZnJlZV9zaXplLCBqZWItPndhc3RlZF9zaXplKTsKKwkJQlVHKCk7CisJfQorCS8qIFJFRl9FTVBUWV9OT0RFIGlzICFvYnNvbGV0ZSwgc28gdGhhdCB3b3JrcyBPSyAqLworCWlmIChqZWItPmxhc3Rfbm9kZSAmJiByZWZfb2Jzb2xldGUoamViLT5sYXN0X25vZGUpKSB7CisjaWZkZWYgVEVTVF9UT1RMRU4KKwkJamViLT5sYXN0X25vZGUtPl9fdG90bGVuICs9IHNpemU7CisjZW5kaWYKKwkJYy0+ZGlydHlfc2l6ZSArPSBzaXplOworCQljLT5mcmVlX3NpemUgLT0gc2l6ZTsKKwkJamViLT5kaXJ0eV9zaXplICs9IHNpemU7CisJCWplYi0+ZnJlZV9zaXplIC09IHNpemU7CisJfSBlbHNlIHsKKwkJdWludDMyX3Qgb2ZzID0gamViLT5vZmZzZXQgKyBjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplOworCQlvZnMgfD0gUkVGX09CU09MRVRFOworCisJCWpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCBvZnMsIHNpemUsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCisvKiBDYWxjdWxhdGUgdG90bGVuIGZyb20gc3Vycm91bmRpbmcgbm9kZXMgb3IgZXJhc2VibG9jayAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBfX3JlZl90b3RsZW4oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCisJCQkJICAgIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsCisJCQkJICAgIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJlZikKK3sKKwl1aW50MzJfdCByZWZfZW5kOworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm5leHRfcmVmID0gcmVmX25leHQocmVmKTsKKworCWlmIChuZXh0X3JlZikKKwkJcmVmX2VuZCA9IHJlZl9vZmZzZXQobmV4dF9yZWYpOworCWVsc2UgeworCQlpZiAoIWplYikKKwkJCWplYiA9ICZjLT5ibG9ja3NbcmVmLT5mbGFzaF9vZmZzZXQgLyBjLT5zZWN0b3Jfc2l6ZV07CisKKwkJLyogTGFzdCBub2RlIGluIGJsb2NrLiBVc2UgZnJlZV9zcGFjZSAqLworCQlpZiAodW5saWtlbHkocmVmICE9IGplYi0+bGFzdF9ub2RlKSkgeworCQkJcHJpbnRrKEtFUk5fQ1JJVCAicmVmICVwIEAweCUwOHggaXMgbm90IGplYi0+bGFzdF9ub2RlICglcCBAMHglMDh4KVxuIiwKKwkJCSAgICAgICByZWYsIHJlZl9vZmZzZXQocmVmKSwgamViLT5sYXN0X25vZGUsIGplYi0+bGFzdF9ub2RlP3JlZl9vZmZzZXQoamViLT5sYXN0X25vZGUpOjApOworCQkJQlVHKCk7CisJCX0KKwkJcmVmX2VuZCA9IGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLSBqZWItPmZyZWVfc2l6ZTsKKwl9CisJcmV0dXJuIHJlZl9lbmQgLSByZWZfb2Zmc2V0KHJlZik7Cit9CisKK3VpbnQzMl90IF9famZmczJfcmVmX3RvdGxlbihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKKwkJCSAgICBzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyZWYpCit7CisJdWludDMyX3QgcmV0OworCisJcmV0ID0gX19yZWZfdG90bGVuKGMsIGplYiwgcmVmKTsKKworI2lmZGVmIFRFU1RfVE9UTEVOCisJaWYgKHVubGlrZWx5KHJldCAhPSByZWYtPl9fdG90bGVuKSkgeworCQlpZiAoIWplYikKKwkJCWplYiA9ICZjLT5ibG9ja3NbcmVmLT5mbGFzaF9vZmZzZXQgLyBjLT5zZWN0b3Jfc2l6ZV07CisKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiVG90bGVuIGZvciByZWYgYXQgJXAgKDB4JTA4eC0weCUwOHgpIG1pc2NhbGN1bGF0ZWQgYXMgMHgleCBpbnN0ZWFkIG9mICV4XG4iLAorCQkgICAgICAgcmVmLCByZWZfb2Zmc2V0KHJlZiksIHJlZl9vZmZzZXQocmVmKStyZWYtPl9fdG90bGVuLAorCQkgICAgICAgcmV0LCByZWYtPl9fdG90bGVuKTsKKwkJaWYgKHJlZl9uZXh0KHJlZikpIHsKKwkJCXByaW50ayhLRVJOX0NSSVQgIm5leHQgJXAgKDB4JTA4eC0weCUwOHgpXG4iLCByZWZfbmV4dChyZWYpLCByZWZfb2Zmc2V0KHJlZl9uZXh0KHJlZikpLAorCQkJICAgICAgIHJlZl9vZmZzZXQocmVmX25leHQocmVmKSkrcmVmLT5fX3RvdGxlbik7CisJCX0gZWxzZSAKKwkJCXByaW50ayhLRVJOX0NSSVQgIk5vIG5leHQgcmVmLiBqZWItPmxhc3Rfbm9kZSBpcyAlcFxuIiwgamViLT5sYXN0X25vZGUpOworCisJCXByaW50ayhLRVJOX0NSSVQgImplYi0+d2FzdGVkX3NpemUgJXgsIGRpcnR5X3NpemUgJXgsIHVzZWRfc2l6ZSAleCwgZnJlZV9zaXplICV4XG4iLCBqZWItPndhc3RlZF9zaXplLCBqZWItPmRpcnR5X3NpemUsIGplYi0+dXNlZF9zaXplLCBqZWItPmZyZWVfc2l6ZSk7CisKKyNpZiBkZWZpbmVkKEpGRlMyX0RCR19EVU1QUykgfHwgZGVmaW5lZChKRkZTMl9EQkdfUEFSQU5PSUFfQ0hFQ0tTKQorCQlfX2pmZnMyX2RiZ19kdW1wX25vZGVfcmVmc19ub2xvY2soYywgamViKTsKKyNlbmRpZgorCisJCVdBUk5fT04oMSk7CisKKwkJcmV0ID0gcmVmLT5fX3RvdGxlbjsKKwl9CisjZW5kaWYgLyogVEVTVF9UT1RMRU4gKi8KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZnMvamZmczIvbm9kZWxpc3QuaCBiL2ZzL2pmZnMyL25vZGVsaXN0LmgKaW5kZXggMjNhNjdiYi4uYjE2YzYwYiAxMDA2NDQKLS0tIGEvZnMvamZmczIvbm9kZWxpc3QuaAorKysgYi9mcy9qZmZzMi9ub2RlbGlzdC5oCkBAIC0xOCw4ICsxOCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9qZmZzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2pmZnMyX2ZzX3NiLmg+Ci0jaW5jbHVkZSA8bGludXgvamZmczJfZnNfaS5oPgorI2luY2x1ZGUgImpmZnMyX2ZzX3NiLmgiCisjaW5jbHVkZSAiamZmczJfZnNfaS5oIgorI2luY2x1ZGUgInhhdHRyLmgiCisjaW5jbHVkZSAiYWNsLmgiCiAjaW5jbHVkZSAic3VtbWFyeS5oIgogCiAjaWZkZWYgX19FQ09TCkBAIC03NSwxNCArNzcsNTAgQEAKIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYKIHsKIAlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpuZXh0X2luX2lubzsgLyogUG9pbnRzIHRvIHRoZSBuZXh0IHJhd19ub2RlX3JlZgotCQlmb3IgdGhpcyBpbm9kZS4gSWYgdGhpcyBpcyB0aGUgbGFzdCwgaXQgcG9pbnRzIHRvIHRoZSBpbm9kZV9jYWNoZQotCQlmb3IgdGhpcyBpbm9kZSBpbnN0ZWFkLiBUaGUgaW5vZGVfY2FjaGUgd2lsbCBoYXZlIE5VTEwgaW4gdGhlIGZpcnN0Ci0JCXdvcmQgc28geW91IGtub3cgd2hlbiB5b3UndmUgZ290IHRoZXJlIDopICovCi0Jc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqbmV4dF9waHlzOworCQlmb3IgdGhpcyBvYmplY3QuIElmIHRoaXMgX2lzXyB0aGUgbGFzdCwgaXQgcG9pbnRzIHRvIHRoZSBpbm9kZV9jYWNoZSwKKwkJeGF0dHJfcmVmIG9yIHhhdHRyX2RhdHVtIGluc3RlYWQuIFRoZSBjb21tb24gcGFydCBvZiB0aG9zZSBzdHJ1Y3R1cmVzCisJCWhhcyBOVUxMIGluIHRoZSBmaXJzdCB3b3JkLiBTZWUgamZmczJfcmF3X3JlZl90b19pYygpIGJlbG93ICovCiAJdWludDMyX3QgZmxhc2hfb2Zmc2V0OworI2RlZmluZSBURVNUX1RPVExFTgorI2lmZGVmIFRFU1RfVE9UTEVOCiAJdWludDMyX3QgX190b3RsZW47IC8qIFRoaXMgbWF5IGRpZTsgdXNlIHJlZl90b3RsZW4oYywgamViLCApIGJlbG93ICovCisjZW5kaWYKIH07CiAKKyNkZWZpbmUgUkVGX0xJTktfTk9ERSAoKGludDMyX3QpLTEpCisjZGVmaW5lIFJFRl9FTVBUWV9OT0RFICgoaW50MzJfdCktMikKKworLyogVXNlIGJsb2NrcyBvZiBhYm91dCAyNTYgYnl0ZXMgKi8KKyNkZWZpbmUgUkVGU19QRVJfQkxPQ0sgKCgyNTUvc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYpKS0xKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJlZl9uZXh0KHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJlZikKK3sKKwlyZWYrKzsKKworCS8qIExpbmsgdG8gYW5vdGhlciBibG9jayBvZiByZWZzICovCisJaWYgKHJlZi0+Zmxhc2hfb2Zmc2V0ID09IFJFRl9MSU5LX05PREUpIHsKKwkJcmVmID0gcmVmLT5uZXh0X2luX2lubzsKKwkJaWYgKCFyZWYpCisJCQlyZXR1cm4gcmVmOworCX0KKworCS8qIEVuZCBvZiBjaGFpbiAqLworCWlmIChyZWYtPmZsYXNoX29mZnNldCA9PSBSRUZfRU1QVFlfTk9ERSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcmVmOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqamZmczJfcmF3X3JlZl90b19pYyhzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXcpCit7CisJd2hpbGUocmF3LT5uZXh0X2luX2lubykKKwkJcmF3ID0gcmF3LT5uZXh0X2luX2lubzsKKworCS8qIE5CLiBUaGlzIGNhbiBiZSBhIGpmZnMyX3hhdHRyX2RhdHVtIG9yIGpmZnMyX3hhdHRyX3JlZiBhbmQKKwkgICBub3QgYWN0dWFsbHkgYSBqZmZzMl9pbm9kZV9jYWNoZS4gQ2hlY2sgLT5jbGFzcyAqLworCXJldHVybiAoKHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqKXJhdyk7Cit9CisKICAgICAgICAgLyogZmxhc2hfb2Zmc2V0ICYgMyBhbHdheXMgaGFzIHRvIGJlIHplcm8sIGJlY2F1c2Ugbm9kZXMgYXJlCiAJICAgYWx3YXlzIGFsaWduZWQgYXQgNCBieXRlcy4gU28gd2UgaGF2ZSBhIGNvdXBsZSBvZiBleHRyYSBiaXRzCiAJICAgdG8gcGxheSB3aXRoLCB3aGljaCBpbmRpY2F0ZSB0aGUgbm9kZSdzIHN0YXR1czsgc2VlIGJlbG93OiAqLwpAQCAtOTUsNiArMTMzLDExIEBACiAjZGVmaW5lIHJlZl9vYnNvbGV0ZShyZWYpCSgoKHJlZiktPmZsYXNoX29mZnNldCAmIDMpID09IFJFRl9PQlNPTEVURSkKICNkZWZpbmUgbWFya19yZWZfbm9ybWFsKHJlZikgICAgZG8geyAocmVmKS0+Zmxhc2hfb2Zmc2V0ID0gcmVmX29mZnNldChyZWYpIHwgUkVGX05PUk1BTDsgfSB3aGlsZSgwKQogCisvKiBOQjogUkVGX1BSSVNUSU5FIGZvciBhbiBpbm9kZS1sZXNzIG5vZGUgKHJlZi0+bmV4dF9pbl9pbm8gPT0gTlVMTCkgaW5kaWNhdGVzCisgICBpdCBpcyBhbiB1bmtub3duIG5vZGUgb2YgdHlwZSBKRkZTMl9OT0RFVFlQRV9SV0NPTVBBVF9DT1BZLCBzbyBpdCdsbCBnZXQKKyAgIGNvcGllZC4gSWYgeW91IG5lZWQgdG8gZG8gYW55dGhpbmcgZGlmZmVyZW50IHRvIEdDIGlub2RlLWxlc3Mgbm9kZXMsIHRoZW4KKyAgIHlvdSBuZWVkIHRvIG1vZGlmeSBnYy5jIGFjY29yZGluZ2x5LiAqLworCiAvKiBGb3IgZWFjaCBpbm9kZSBpbiB0aGUgZmlsZXN5c3RlbSwgd2UgbmVlZCB0byBrZWVwIGEgcmVjb3JkIG9mCiAgICBubGluaywgYmVjYXVzZSBpdCB3b3VsZCBiZSBhIFBJVEEgdG8gc2NhbiB0aGUgd2hvbGUgZGlyZWN0b3J5IHRyZWUKICAgIGF0IHJlYWRfaW5vZGUoKSB0aW1lIHRvIGNhbGN1bGF0ZSBpdCwgYW5kIHRvIGtlZXAgc3VmZmljaWVudCBpbmZvcm1hdGlvbgpAQCAtMTAzLDE1ICsxNDYsMjcgQEAKICAgIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgcGh5c2ljYWwgbm9kZSB3aGljaCBpcyBwYXJ0IG9mIHRoaXMgaW5vZGUsIHRvby4KICovCiBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgeworCS8qIEZpcnN0IHBhcnQgb2Ygc3RydWN0dXJlIGlzIHNoYXJlZCB3aXRoIG90aGVyIG9iamVjdHMgd2hpY2gKKwkgICBjYW4gdGVybWluYXRlIHRoZSByYXcgbm9kZSByZWZzJyBuZXh0X2luX2lubyBsaXN0IC0tIHdoaWNoCisJICAgY3VycmVudGx5IHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSBhbmQgc3RydWN0IGpmZnMyX3hhdHRyX3JlZi4gKi8KKwogCXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqc2Nhbl9kZW50czsgLyogVXNlZCBkdXJpbmcgc2NhbiB0byBob2xkCiAJCXRlbXBvcmFyeSBsaXN0cyBvZiBkaXJlbnRzLCBhbmQgbGF0ZXIgbXVzdCBiZSBzZXQgdG8KIAkJTlVMTCB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIHJhd19ub2RlX3JlZi0+bmV4dF9pbl9pbm8KIAkJY2hhaW4uICovCi0Jc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICpuZXh0OwogCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm5vZGVzOworCXVpbnQ4X3QgY2xhc3M7CS8qIEl0J3MgdXNlZCBmb3IgaWRlbnRpZmljYXRpb24gKi8KKworCS8qIGVuZCBvZiBzaGFyZWQgc3RydWN0dXJlICovCisKKwl1aW50OF90IGZsYWdzOworCXVpbnQxNl90IHN0YXRlOwogCXVpbnQzMl90IGlubzsKKwlzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKm5leHQ7CisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqeHJlZjsKKyNlbmRpZgogCWludCBubGluazsKLQlpbnQgc3RhdGU7CiB9OwogCiAvKiBJbm9kZSBzdGF0ZXMgZm9yICdzdGF0ZScgYWJvdmUuIFdlIG5lZWQgdGhlICdHQycgc3RhdGUgdG8gcHJldmVudApAQCAtMTI1LDggKzE4MCwxNiBAQAogI2RlZmluZSBJTk9fU1RBVEVfUkVBRElORwk1CS8qIEluIHJlYWRfaW5vZGUoKSAqLwogI2RlZmluZSBJTk9fU1RBVEVfQ0xFQVJJTkcJNgkvKiBJbiBjbGVhcl9pbm9kZSgpICovCiAKKyNkZWZpbmUgSU5PX0ZMQUdTX1hBVFRSX0NIRUNLRUQJMHgwMQkvKiBoYXMgbm8gZHVwbGljYXRlIHhhdHRyX3JlZiAqLworCisjZGVmaW5lIFJBV05PREVfQ0xBU1NfSU5PREVfQ0FDSEUJMAorI2RlZmluZSBSQVdOT0RFX0NMQVNTX1hBVFRSX0RBVFVNCTEKKyNkZWZpbmUgUkFXTk9ERV9DTEFTU19YQVRUUl9SRUYJCTIKKwogI2RlZmluZSBJTk9DQUNIRV9IQVNIU0laRSAxMjgKIAorI2RlZmluZSB3cml0ZV9vZnMoYykgKChjKS0+bmV4dGJsb2NrLT5vZmZzZXQgKyAoYyktPnNlY3Rvcl9zaXplIC0gKGMpLT5uZXh0YmxvY2stPmZyZWVfc2l6ZSkKKwogLyoKICAgTGFyZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGEgcmF3IG5vZGUsIGtlcHQgaW4tY29yZSBvbmx5IHdoZW4gdGhlCiAgIHN0cnVjdCBpbm9kZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlubyBpcyBpbnN0YW50aWF0ZWQuCkBAIC0xOTIsNiArMjU1LDcgQEAKIAl1aW50MzJfdCB3YXN0ZWRfc2l6ZTsKIAl1aW50MzJfdCBmcmVlX3NpemU7CS8qIE5vdGUgdGhhdCBzZWN0b3Jfc2l6ZSAtIGZyZWVfc2l6ZQogCQkJCSAgIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBmcmVlIHNwYWNlICovCisJdWludDMyX3QgYWxsb2NhdGVkX3JlZnM7CiAJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqZmlyc3Rfbm9kZTsKIAlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpsYXN0X25vZGU7CiAKQEAgLTIwMyw1NyArMjY3LDcgQEAKIAlyZXR1cm4gKChjLT5mbGFzaF9zaXplIC8gYy0+c2VjdG9yX3NpemUpICogc2l6ZW9mIChzdHJ1Y3QgamZmczJfZXJhc2VibG9jaykpID4gKDEyOCAqIDEwMjQpOwogfQogCi0vKiBDYWxjdWxhdGUgdG90bGVuIGZyb20gc3Vycm91bmRpbmcgbm9kZXMgb3IgZXJhc2VibG9jayAqLwotc3RhdGljIGlubGluZSB1aW50MzJfdCBfX3JlZl90b3RsZW4oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCi0JCQkJICAgIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsCi0JCQkJICAgIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJlZikKLXsKLQl1aW50MzJfdCByZWZfZW5kOwotCi0JaWYgKHJlZi0+bmV4dF9waHlzKQotCQlyZWZfZW5kID0gcmVmX29mZnNldChyZWYtPm5leHRfcGh5cyk7Ci0JZWxzZSB7Ci0JCWlmICghamViKQotCQkJamViID0gJmMtPmJsb2Nrc1tyZWYtPmZsYXNoX29mZnNldCAvIGMtPnNlY3Rvcl9zaXplXTsKLQotCQkvKiBMYXN0IG5vZGUgaW4gYmxvY2suIFVzZSBmcmVlX3NwYWNlICovCi0JCUJVR19PTihyZWYgIT0gamViLT5sYXN0X25vZGUpOwotCQlyZWZfZW5kID0gamViLT5vZmZzZXQgKyBjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplOwotCX0KLQlyZXR1cm4gcmVmX2VuZCAtIHJlZl9vZmZzZXQocmVmKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50MzJfdCByZWZfdG90bGVuKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAotCQkJCSAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKLQkJCQkgIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJlZikKLXsKLQl1aW50MzJfdCByZXQ7Ci0KLSNpZiBDT05GSUdfSkZGUzJfRlNfREVCVUcgPiAwCi0JaWYgKGplYiAmJiBqZWIgIT0gJmMtPmJsb2Nrc1tyZWYtPmZsYXNoX29mZnNldCAvIGMtPnNlY3Rvcl9zaXplXSkgewotCQlwcmludGsoS0VSTl9DUklUICJyZWZfdG90bGVuIGNhbGxlZCB3aXRoIHdyb25nIGJsb2NrIC0tIGF0IDB4JTA4eCBpbnN0ZWFkIG9mIDB4JTA4eDsgcmVmIDB4JTA4eFxuIiwKLQkJICAgICAgIGplYi0+b2Zmc2V0LCBjLT5ibG9ja3NbcmVmLT5mbGFzaF9vZmZzZXQgLyBjLT5zZWN0b3Jfc2l6ZV0ub2Zmc2V0LCByZWZfb2Zmc2V0KHJlZikpOwotCQlCVUcoKTsKLQl9Ci0jZW5kaWYKLQotI2lmIDEKLQlyZXQgPSByZWYtPl9fdG90bGVuOwotI2Vsc2UKLQkvKiBUaGlzIGRvZXNuJ3QgYWN0dWFsbHkgd29yayB5ZXQgKi8KLQlyZXQgPSBfX3JlZl90b3RsZW4oYywgamViLCByZWYpOwotCWlmIChyZXQgIT0gcmVmLT5fX3RvdGxlbikgewotCQlwcmludGsoS0VSTl9DUklUICJUb3RsZW4gZm9yIHJlZiBhdCAlcCAoMHglMDh4LTB4JTA4eCkgbWlzY2FsY3VsYXRlZCBhcyAweCV4IGluc3RlYWQgb2YgJXhcbiIsCi0JCSAgICAgICByZWYsIHJlZl9vZmZzZXQocmVmKSwgcmVmX29mZnNldChyZWYpK3JlZi0+X190b3RsZW4sCi0JCSAgICAgICByZXQsIHJlZi0+X190b3RsZW4pOwotCQlpZiAoIWplYikKLQkJCWplYiA9ICZjLT5ibG9ja3NbcmVmLT5mbGFzaF9vZmZzZXQgLyBjLT5zZWN0b3Jfc2l6ZV07Ci0JCWpmZnMyX2RiZ19kdW1wX25vZGVfcmVmc19ub2xvY2soYywgamViKTsKLQkJQlVHKCk7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KKyNkZWZpbmUgcmVmX3RvdGxlbihhLCBiLCBjKSBfX2pmZnMyX3JlZl90b3RsZW4oKGEpLCAoYiksIChjKSkKIAogI2RlZmluZSBBTExPQ19OT1JNQUwJMAkvKiBOb3JtYWwgYWxsb2NhdGlvbiAqLwogI2RlZmluZSBBTExPQ19ERUxFVElPTgkxCS8qIERlbGV0aW9uIG5vZGUuIEJlc3QgdG8gYWxsb3cgaXQgKi8KQEAgLTI2OCwxMyArMjgyLDE1IEBACiAKICNkZWZpbmUgUEFEKHgpICgoKHgpKzMpJn4zKQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqamZmczJfcmF3X3JlZl90b19pYyhzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXcpCitzdGF0aWMgaW5saW5lIGludCBqZmZzMl9lbmNvZGVfZGV2KHVuaW9uIGpmZnMyX2RldmljZV9ub2RlICpqZGV2LCBkZXZfdCByZGV2KQogewotCXdoaWxlKHJhdy0+bmV4dF9pbl9pbm8pIHsKLQkJcmF3ID0gcmF3LT5uZXh0X2luX2lubzsKKwlpZiAob2xkX3ZhbGlkX2RldihyZGV2KSkgeworCQlqZGV2LT5vbGQgPSBjcHVfdG9famUxNihvbGRfZW5jb2RlX2RldihyZGV2KSk7CisJCXJldHVybiBzaXplb2YoamRldi0+b2xkKTsKKwl9IGVsc2UgeworCQlqZGV2LT5uZXcgPSBjcHVfdG9famUzMihuZXdfZW5jb2RlX2RldihyZGV2KSk7CisJCXJldHVybiBzaXplb2YoamRldi0+bmV3KTsKIAl9Ci0KLQlyZXR1cm4gKChzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKilyYXcpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKmZyYWdfZmlyc3Qoc3RydWN0IHJiX3Jvb3QgKnJvb3QpCkBAIC0yOTksNyArMzE1LDYgQEAKIAlyZXR1cm4gcmJfZW50cnkobm9kZSwgc3RydWN0IGpmZnMyX25vZGVfZnJhZywgcmIpOwogfQogCi0jZGVmaW5lIHJiX3BhcmVudChyYikgKChyYiktPnJiX3BhcmVudCkKICNkZWZpbmUgZnJhZ19uZXh0KGZyYWcpIHJiX2VudHJ5KHJiX25leHQoJihmcmFnKS0+cmIpLCBzdHJ1Y3QgamZmczJfbm9kZV9mcmFnLCByYikKICNkZWZpbmUgZnJhZ19wcmV2KGZyYWcpIHJiX2VudHJ5KHJiX3ByZXYoJihmcmFnKS0+cmIpLCBzdHJ1Y3QgamZmczJfbm9kZV9mcmFnLCByYikKICNkZWZpbmUgZnJhZ19wYXJlbnQoZnJhZykgcmJfZW50cnkocmJfcGFyZW50KCYoZnJhZyktPnJiKSwgc3RydWN0IGpmZnMyX25vZGVfZnJhZywgcmIpCkBAIC0zMjQsMjggKzMzOSw0NCBAQAogaW50IGpmZnMyX2FkZF9mdWxsX2Rub2RlX3RvX2lub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwgc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKmZuKTsKIHZvaWQgamZmczJfdHJ1bmNhdGVfZnJhZ3RyZWUgKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgcmJfcm9vdCAqbGlzdCwgdWludDMyX3Qgc2l6ZSk7CiBpbnQgamZmczJfYWRkX29sZGVyX2ZyYWdfdG9fZnJhZ3RyZWUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCBzdHJ1Y3QgamZmczJfdG1wX2Rub2RlX2luZm8gKnRuKTsKK3N0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKmpmZnMyX2xpbmtfbm9kZV9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCisJCQkJCSAgICAgICBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAorCQkJCQkgICAgICAgdWludDMyX3Qgb2ZzLCB1aW50MzJfdCBsZW4sCisJCQkJCSAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKTsKK2V4dGVybiB1aW50MzJfdCBfX2pmZnMyX3JlZl90b3RsZW4oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCisJCQkJICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKKwkJCQkgICBzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyZWYpOwogCiAvKiBub2RlbWdtdC5jICovCiBpbnQgamZmczJfdGhyZWFkX3Nob3VsZF93YWtlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKLWludCBqZmZzMl9yZXNlcnZlX3NwYWNlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCB1aW50MzJfdCBtaW5zaXplLCB1aW50MzJfdCAqb2ZzLAoraW50IGpmZnMyX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHVpbnQzMl90IG1pbnNpemUsCiAJCQl1aW50MzJfdCAqbGVuLCBpbnQgcHJpbywgdWludDMyX3Qgc3Vtc2l6ZSk7Ci1pbnQgamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgdWludDMyX3QgbWluc2l6ZSwgdWludDMyX3QgKm9mcywKK2ludCBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCB1aW50MzJfdCBtaW5zaXplLAogCQkJdWludDMyX3QgKmxlbiwgdWludDMyX3Qgc3Vtc2l6ZSk7Ci1pbnQgamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpuZXcpOworc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCAKKwkJCQkJCSAgICAgICB1aW50MzJfdCBvZnMsIHVpbnQzMl90IGxlbiwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKTsKIHZvaWQgamZmczJfY29tcGxldGVfcmVzZXJ2YXRpb24oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwogdm9pZCBqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdyk7CiAKIC8qIHdyaXRlLmMgKi8KIGludCBqZmZzMl9kb19uZXdfaW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCB1aW50MzJfdCBtb2RlLCBzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaSk7CiAKLXN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICpqZmZzMl93cml0ZV9kbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsIHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKnJpLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1aW50MzJfdCBkYXRhbGVuLCB1aW50MzJfdCBmbGFzaF9vZnMsIGludCBhbGxvY19tb2RlKTsKLXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqamZmczJfd3JpdGVfZGlyZW50KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwgc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCB1aW50MzJfdCBuYW1lbGVuLCB1aW50MzJfdCBmbGFzaF9vZnMsIGludCBhbGxvY19tb2RlKTsKK3N0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICpqZmZzMl93cml0ZV9kbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsCisJCQkJCSAgIHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKnJpLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJCQkgICB1aW50MzJfdCBkYXRhbGVuLCBpbnQgYWxsb2NfbW9kZSk7CitzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmpmZnMyX3dyaXRlX2RpcmVudChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsCisJCQkJCSAgICAgc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCQkJCQkgICAgIHVpbnQzMl90IG5hbWVsZW4sIGludCBhbGxvY19tb2RlKTsKIGludCBqZmZzMl93cml0ZV9pbm9kZV9yYW5nZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsCiAJCQkgICAgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmksIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJCSAgICB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHdyaXRlbGVuLCB1aW50MzJfdCAqcmV0bGVuKTsKLWludCBqZmZzMl9kb19jcmVhdGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpkaXJfZiwgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsIHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKnJpLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbik7Ci1pbnQgamZmczJfZG9fdW5saW5rKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZGlyX2YsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZGVhZF9mLCB1aW50MzJfdCB0aW1lKTsKLWludCBqZmZzMl9kb19saW5rIChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmRpcl9mLCB1aW50MzJfdCBpbm8sIHVpbnQ4X3QgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIHVpbnQzMl90IHRpbWUpOworaW50IGpmZnMyX2RvX2NyZWF0ZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmRpcl9mLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwKKwkJICAgIHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKnJpLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbik7CitpbnQgamZmczJfZG9fdW5saW5rKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZGlyX2YsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICBpbnQgbmFtZWxlbiwgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmRlYWRfZiwgdWludDMyX3QgdGltZSk7CitpbnQgamZmczJfZG9fbGluayhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmRpcl9mLCB1aW50MzJfdCBpbm8sCisJCSAgIHVpbnQ4X3QgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIHVpbnQzMl90IHRpbWUpOwogCiAKIC8qIHJlYWRpbm9kZS5jICovCkBAIC0zNjgsMTIgKzM5OSwxOSBAQAogdm9pZCBqZmZzMl9mcmVlX3Jhd19pbm9kZShzdHJ1Y3QgamZmczJfcmF3X2lub2RlICopOwogc3RydWN0IGpmZnMyX3RtcF9kbm9kZV9pbmZvICpqZmZzMl9hbGxvY190bXBfZG5vZGVfaW5mbyh2b2lkKTsKIHZvaWQgamZmczJfZnJlZV90bXBfZG5vZGVfaW5mbyhzdHJ1Y3QgamZmczJfdG1wX2Rub2RlX2luZm8gKik7Ci1zdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYodm9pZCk7Ci12b2lkIGpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKik7CitpbnQgamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwgaW50IG5yKTsKK3ZvaWQgamZmczJfZnJlZV9yZWZibG9jayhzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICopOwogc3RydWN0IGpmZnMyX25vZGVfZnJhZyAqamZmczJfYWxsb2Nfbm9kZV9mcmFnKHZvaWQpOwogdm9pZCBqZmZzMl9mcmVlX25vZGVfZnJhZyhzdHJ1Y3QgamZmczJfbm9kZV9mcmFnICopOwogc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICpqZmZzMl9hbGxvY19pbm9kZV9jYWNoZSh2b2lkKTsKIHZvaWQgamZmczJfZnJlZV9pbm9kZV9jYWNoZShzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKik7CisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCitzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKmpmZnMyX2FsbG9jX3hhdHRyX2RhdHVtKHZvaWQpOwordm9pZCBqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqKTsKK3N0cnVjdCBqZmZzMl94YXR0cl9yZWYgKmpmZnMyX2FsbG9jX3hhdHRyX3JlZih2b2lkKTsKK3ZvaWQgamZmczJfZnJlZV94YXR0cl9yZWYoc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqKTsKKyNlbmRpZgogCiAvKiBnYy5jICovCiBpbnQgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3Bhc3Moc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwpAQCAtMzkzLDEyICs0MzEsMTQgQEAKIAkJCQl1aW50MzJfdCBvZnMsIHVpbnQzMl90IGxlbik7CiBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmpmZnMyX3NjYW5fbWFrZV9pbm9fY2FjaGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHVpbnQzMl90IGlubyk7CiBpbnQgamZmczJfc2Nhbl9jbGFzc2lmeV9qZWIoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpOworaW50IGpmZnMyX3NjYW5fZGlydHlfc3BhY2Uoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsIHVpbnQzMl90IHNpemUpOwogCiAvKiBidWlsZC5jICovCiBpbnQgamZmczJfZG9fbW91bnRfZnMoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwogCiAvKiBlcmFzZS5jICovCiB2b2lkIGpmZnMyX2VyYXNlX3BlbmRpbmdfYmxvY2tzKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBpbnQgY291bnQpOwordm9pZCBqZmZzMl9mcmVlX2plYl9ub2RlX3JlZnMoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpOwogCiAjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSCiAvKiB3YnVmLmMgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL25vZGVtZ210LmMgYi9mcy9qZmZzMi9ub2RlbWdtdC5jCmluZGV4IDQ5MTI3YTEuLjhiZWRmZDIgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL25vZGVtZ210LmMKKysrIGIvZnMvamZmczIvbm9kZW1nbXQuYwpAQCAtMjMsMTMgKzIzLDEyIEBACiAgKglqZmZzMl9yZXNlcnZlX3NwYWNlIC0gcmVxdWVzdCBwaHlzaWNhbCBzcGFjZSB0byB3cml0ZSBub2RlcyB0byBmbGFzaAogICoJQGM6IHN1cGVyYmxvY2sgaW5mbwogICoJQG1pbnNpemU6IE1pbmltdW0gYWNjZXB0YWJsZSBzaXplIG9mIGFsbG9jYXRpb24KLSAqCUBvZnM6IFJldHVybmVkIHZhbHVlIG9mIG5vZGUgb2Zmc2V0CiAgKglAbGVuOiBSZXR1cm5lZCB2YWx1ZSBvZiBhbGxvY2F0aW9uIGxlbmd0aAogICoJQHByaW86IEFsbG9jYXRpb24gdHlwZSAtIEFMTE9DX3tOT1JNQUwsREVMRVRJT059CiAgKgogICoJUmVxdWVzdHMgYSBibG9jayBvZiBwaHlzaWNhbCBzcGFjZSBvbiB0aGUgZmxhc2guIFJldHVybnMgemVybyBmb3Igc3VjY2VzcwotICoJYW5kIHB1dHMgJ29mcycgYW5kICdsZW4nIGludG8gdGhlIGFwcHJpb3ByaWF0ZSBwbGFjZSwgb3IgcmV0dXJucyAtRU5PU1BDCi0gKglvciBvdGhlciBlcnJvciBpZiBhcHByb3ByaWF0ZS4KKyAqCWFuZCBwdXRzICdsZW4nIGludG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlLCBvciByZXR1cm5zIC1FTk9TUEMgb3Igb3RoZXIgCisgKgllcnJvciBpZiBhcHByb3ByaWF0ZS4gRG9lc24ndCByZXR1cm4gbGVuIHNpbmNlIHRoYXQncyAKICAqCiAgKglJZiBpdCByZXR1cm5zIHplcm8sIGpmZnMyX3Jlc2VydmVfc3BhY2UoKSBhbHNvIGRvd25zIHRoZSBwZXItZmlsZXN5c3RlbQogICoJYWxsb2NhdGlvbiBzZW1hcGhvcmUsIHRvIHByZXZlbnQgbW9yZSB0aGFuIG9uZSBhbGxvY2F0aW9uIGZyb20gYmVpbmcKQEAgLTQwLDkgKzM5LDkgQEAKICAqLwogCiBzdGF0aWMgaW50IGpmZnMyX2RvX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsICB1aW50MzJfdCBtaW5zaXplLAotCQkJCQl1aW50MzJfdCAqb2ZzLCB1aW50MzJfdCAqbGVuLCB1aW50MzJfdCBzdW1zaXplKTsKKwkJCQkgIHVpbnQzMl90ICpsZW4sIHVpbnQzMl90IHN1bXNpemUpOwogCi1pbnQgamZmczJfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgdWludDMyX3QgbWluc2l6ZSwgdWludDMyX3QgKm9mcywKK2ludCBqZmZzMl9yZXNlcnZlX3NwYWNlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCB1aW50MzJfdCBtaW5zaXplLAogCQkJdWludDMyX3QgKmxlbiwgaW50IHByaW8sIHVpbnQzMl90IHN1bXNpemUpCiB7CiAJaW50IHJldCA9IC1FQUdBSU47CkBAIC0xMzIsMTkgKzEzMSwyMSBAQAogCQkJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwogCQl9CiAKLQkJcmV0ID0gamZmczJfZG9fcmVzZXJ2ZV9zcGFjZShjLCBtaW5zaXplLCBvZnMsIGxlbiwgc3Vtc2l6ZSk7CisJCXJldCA9IGpmZnMyX2RvX3Jlc2VydmVfc3BhY2UoYywgbWluc2l6ZSwgbGVuLCBzdW1zaXplKTsKIAkJaWYgKHJldCkgewogCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX3Jlc2VydmVfc3BhY2U6IHJldCBpcyAlZFxuIiwgcmV0KSk7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJaWYgKCFyZXQpCisJCXJldCA9IGpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoYywgYy0+bmV4dGJsb2NrLCAxKTsKIAlpZiAocmV0KQogCQl1cCgmYy0+YWxsb2Nfc2VtKTsKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgdWludDMyX3QgbWluc2l6ZSwgdWludDMyX3QgKm9mcywKLQkJCXVpbnQzMl90ICpsZW4sIHVpbnQzMl90IHN1bXNpemUpCitpbnQgamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgdWludDMyX3QgbWluc2l6ZSwKKwkJCSAgIHVpbnQzMl90ICpsZW4sIHVpbnQzMl90IHN1bXNpemUpCiB7CiAJaW50IHJldCA9IC1FQUdBSU47CiAJbWluc2l6ZSA9IFBBRChtaW5zaXplKTsKQEAgLTE1MywxMiArMTU0LDE1IEBACiAKIAlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAJd2hpbGUocmV0ID09IC1FQUdBSU4pIHsKLQkJcmV0ID0gamZmczJfZG9fcmVzZXJ2ZV9zcGFjZShjLCBtaW5zaXplLCBvZnMsIGxlbiwgc3Vtc2l6ZSk7CisJCXJldCA9IGpmZnMyX2RvX3Jlc2VydmVfc3BhY2UoYywgbWluc2l6ZSwgbGVuLCBzdW1zaXplKTsKIAkJaWYgKHJldCkgewogCQkgICAgICAgIEQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9yZXNlcnZlX3NwYWNlX2djOiBsb29waW5nLCByZXQgaXMgJWRcbiIsIHJldCkpOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCWlmICghcmV0KQorCQlyZXQgPSBqZmZzMl9wcmVhbGxvY19yYXdfbm9kZV9yZWZzKGMsIGMtPm5leHRibG9jaywgMSk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNTksMTAgKzI2MywxMSBAQAogfQogCiAvKiBDYWxsZWQgd2l0aCBhbGxvYyBzZW0gX2FuZF8gZXJhc2VfY29tcGxldGlvbl9sb2NrICovCi1zdGF0aWMgaW50IGpmZnMyX2RvX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHVpbnQzMl90IG1pbnNpemUsIHVpbnQzMl90ICpvZnMsIHVpbnQzMl90ICpsZW4sIHVpbnQzMl90IHN1bXNpemUpCitzdGF0aWMgaW50IGpmZnMyX2RvX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHVpbnQzMl90IG1pbnNpemUsCisJCQkJICB1aW50MzJfdCAqbGVuLCB1aW50MzJfdCBzdW1zaXplKQogewogCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIgPSBjLT5uZXh0YmxvY2s7Ci0JdWludDMyX3QgcmVzZXJ2ZWRfc2l6ZTsgCQkJLyogZm9yIHN1bW1hcnkgaW5mb3JtYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgamViICovCisJdWludDMyX3QgcmVzZXJ2ZWRfc2l6ZTsJCQkJLyogZm9yIHN1bW1hcnkgaW5mb3JtYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgamViICovCiAJaW50IHJldDsKIAogIHJlc3RhcnQ6CkBAIC0zMTIsNiArMzE3LDggQEAKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChqZWIgJiYgbWluc2l6ZSA+IGplYi0+ZnJlZV9zaXplKSB7CisJCQl1aW50MzJfdCB3YXN0ZTsKKwogCQkJLyogU2tpcCB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgYW5kIGZpbGUgaXQgYXMgaGF2aW5nIHNvbWUgZGlydHkgc3BhY2UgKi8KIAkJCS8qIElmIHRoZXJlJ3MgYSBwZW5kaW5nIHdyaXRlIHRvIGl0LCBmbHVzaCBub3cgKi8KIApAQCAtMzI0LDEwICszMzEsMjYgQEAKIAkJCQlnb3RvIHJlc3RhcnQ7CiAJCQl9CiAKLQkJCWMtPndhc3RlZF9zaXplICs9IGplYi0+ZnJlZV9zaXplOwotCQkJYy0+ZnJlZV9zaXplIC09IGplYi0+ZnJlZV9zaXplOwotCQkJamViLT53YXN0ZWRfc2l6ZSArPSBqZWItPmZyZWVfc2l6ZTsKLQkJCWplYi0+ZnJlZV9zaXplID0gMDsKKwkJCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCisJCQlyZXQgPSBqZmZzMl9wcmVhbGxvY19yYXdfbm9kZV9yZWZzKGMsIGplYiwgMSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQkvKiBKdXN0IGxvY2sgaXQgYWdhaW4gYW5kIGNvbnRpbnVlLiBOb3RoaW5nIG11Y2ggY2FuIGNoYW5nZSBiZWNhdXNlCisJCQkgICB3ZSBob2xkIGMtPmFsbG9jX3NlbSBhbnl3YXkuIEluIGZhY3QsIGl0J3Mgbm90IGVudGlyZWx5IGNsZWFyIHdoeQorCQkJICAgd2UgaG9sZCBjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2sgaW4gdGhlIG1ham9yaXR5IG9mIHRoaXMgZnVuY3Rpb24uLi4KKwkJCSAgIGJ1dCB0aGF0J3MgYSBxdWVzdGlvbiBmb3IgYW5vdGhlciAobW9yZSBjYWZmZWluZS1yaWNoKSBkYXkuICovCisJCQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisKKwkJCXdhc3RlID0gamViLT5mcmVlX3NpemU7CisJCQlqZmZzMl9saW5rX25vZGVfcmVmKGMsIGplYiwKKwkJCQkJICAgIChqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0gd2FzdGUpIHwgUkVGX09CU09MRVRFLAorCQkJCQkgICAgd2FzdGUsIE5VTEwpOworCQkJLyogRklYTUU6IHRoYXQgbWFkZSBpdCBjb3VudCBhcyBkaXJ0eS4gQ29udmVydCB0byB3YXN0ZWQgKi8KKwkJCWplYi0+ZGlydHlfc2l6ZSAtPSB3YXN0ZTsKKwkJCWMtPmRpcnR5X3NpemUgLT0gd2FzdGU7CisJCQlqZWItPndhc3RlZF9zaXplICs9IHdhc3RlOworCQkJYy0+d2FzdGVkX3NpemUgKz0gd2FzdGU7CiAKIAkJCWpmZnMyX2Nsb3NlX25leHRibG9jayhjLCBqZWIpOwogCQkJamViID0gTlVMTDsKQEAgLTM0OSw3ICszNzIsNiBAQAogCX0KIAkvKiBPSywgamViICg9PWMtPm5leHRibG9jaykgaXMgbm93IHBvaW50aW5nIGF0IGEgYmxvY2sgd2hpY2ggZGVmaW5pdGVseSBoYXMKIAkgICBlbm91Z2ggc3BhY2UgKi8KLQkqb2ZzID0gamViLT5vZmZzZXQgKyAoYy0+c2VjdG9yX3NpemUgLSBqZWItPmZyZWVfc2l6ZSk7CiAJKmxlbiA9IGplYi0+ZnJlZV9zaXplIC0gcmVzZXJ2ZWRfc2l6ZTsKIAogCWlmIChjLT5jbGVhbm1hcmtlcl9zaXplICYmIGplYi0+dXNlZF9zaXplID09IGMtPmNsZWFubWFya2VyX3NpemUgJiYKQEAgLTM2NSw3ICszODcsOCBAQAogCQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAJfQogCi0JRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2RvX3Jlc2VydmVfc3BhY2UoKTogR2l2aW5nIDB4JXggYnl0ZXMgYXQgMHgleFxuIiwgKmxlbiwgKm9mcykpOworCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9kb19yZXNlcnZlX3NwYWNlKCk6IEdpdmluZyAweCV4IGJ5dGVzIGF0IDB4JXhcbiIsCisJCSAgKmxlbiwgamViLT5vZmZzZXQgKyAoYy0+c2VjdG9yX3NpemUgLSBqZWItPmZyZWVfc2l6ZSkpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzc0LDcgKzM5Nyw2IEBACiAgKglAYzogc3VwZXJibG9jayBpbmZvCiAgKglAbmV3OiBuZXcgbm9kZSByZWZlcmVuY2UgdG8gYWRkCiAgKglAbGVuOiBsZW5ndGggb2YgdGhpcyBwaHlzaWNhbCBub2RlCi0gKglAZGlydHk6IGRpcnR5IGZsYWcgZm9yIG5ldyBub2RlCiAgKgogICoJU2hvdWxkIG9ubHkgYmUgdXNlZCB0byByZXBvcnQgbm9kZXMgZm9yIHdoaWNoIHNwYWNlIGhhcyBiZWVuIGFsbG9jYXRlZAogICoJYnkgamZmczJfcmVzZXJ2ZV9zcGFjZS4KQEAgLTM4Miw0MiArNDA0LDMwIEBACiAgKglNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBhbGxvY19zZW0gaGVsZC4KICAqLwogCi1pbnQgamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpuZXcpCitzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCisJCQkJCQkgICAgICAgdWludDMyX3Qgb2ZzLCB1aW50MzJfdCBsZW4sCisJCQkJCQkgICAgICAgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYykKIHsKIAlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViOwotCXVpbnQzMl90IGxlbjsKKwlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpuZXc7CiAKLQlqZWIgPSAmYy0+YmxvY2tzW25ldy0+Zmxhc2hfb2Zmc2V0IC8gYy0+c2VjdG9yX3NpemVdOwotCWxlbiA9IHJlZl90b3RsZW4oYywgamViLCBuZXcpOworCWplYiA9ICZjLT5ibG9ja3Nbb2ZzIC8gYy0+c2VjdG9yX3NpemVdOwogCi0JRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZigpOiBOb2RlIGF0IDB4JXgoJWQpLCBzaXplIDB4JXhcbiIsIHJlZl9vZmZzZXQobmV3KSwgcmVmX2ZsYWdzKG5ldyksIGxlbikpOworCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoKTogTm9kZSBhdCAweCV4KCVkKSwgc2l6ZSAweCV4XG4iLAorCQkgIG9mcyAmIH4zLCBvZnMgJiAzLCBsZW4pKTsKICNpZiAxCi0JLyogd2UgY291bGQgZ2V0IHNvbWUgb2Jzb2xldGUgbm9kZXMgYWZ0ZXIgbmV4dGJsb2NrIHdhcyByZWZpbGVkCi0JICAgaW4gd2J1Zi5jICovCi0JaWYgKChjLT5uZXh0YmxvY2sgfHwgIXJlZl9vYnNvbGV0ZShuZXcpKQotCSAgICAmJihqZWIgIT0gYy0+bmV4dGJsb2NrIHx8IHJlZl9vZmZzZXQobmV3KSAhPSBqZWItPm9mZnNldCArIChjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplKSkpIHsKKwkvKiBBbGxvdyBub24tb2Jzb2xldGUgbm9kZXMgb25seSB0byBiZSBhZGRlZCBhdCB0aGUgZW5kIG9mIGMtPm5leHRibG9jaywgCisJICAgaWYgYy0+bmV4dGJsb2NrIGlzIHNldC4gTm90ZSB0aGF0IHdidWYuYyB3aWxsIGZpbGUgb2Jzb2xldGUgbm9kZXMKKwkgICBldmVuIGFmdGVyIHJlZmlsaW5nIGMtPm5leHRibG9jayAqLworCWlmICgoYy0+bmV4dGJsb2NrIHx8ICgob2ZzICYgMykgIT0gUkVGX09CU09MRVRFKSkKKwkgICAgJiYgKGplYiAhPSBjLT5uZXh0YmxvY2sgfHwgKG9mcyAmIH4zKSAhPSBqZWItPm9mZnNldCArIChjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplKSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXJnaC4gbm9kZSBhZGRlZCBpbiB3cm9uZyBwbGFjZVxuIik7Ci0JCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKG5ldyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAjZW5kaWYKIAlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAKLQlpZiAoIWplYi0+Zmlyc3Rfbm9kZSkKLQkJamViLT5maXJzdF9ub2RlID0gbmV3OwotCWlmIChqZWItPmxhc3Rfbm9kZSkKLQkJamViLT5sYXN0X25vZGUtPm5leHRfcGh5cyA9IG5ldzsKLQlqZWItPmxhc3Rfbm9kZSA9IG5ldzsKLQotCWplYi0+ZnJlZV9zaXplIC09IGxlbjsKLQljLT5mcmVlX3NpemUgLT0gbGVuOwotCWlmIChyZWZfb2Jzb2xldGUobmV3KSkgewotCQlqZWItPmRpcnR5X3NpemUgKz0gbGVuOwotCQljLT5kaXJ0eV9zaXplICs9IGxlbjsKLQl9IGVsc2UgewotCQlqZWItPnVzZWRfc2l6ZSArPSBsZW47Ci0JCWMtPnVzZWRfc2l6ZSArPSBsZW47Ci0JfQorCW5ldyA9IGpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCBvZnMsIGxlbiwgaWMpOwogCiAJaWYgKCFqZWItPmZyZWVfc2l6ZSAmJiAhamViLT5kaXJ0eV9zaXplICYmICFJU0RJUlRZKGplYi0+d2FzdGVkX3NpemUpKSB7CiAJCS8qIElmIGl0IGxpdmVzIG9uIHRoZSBkaXJ0eV9saXN0LCBqZmZzMl9yZXNlcnZlX3NwYWNlIHdpbGwgcHV0IGl0IHRoZXJlICovCkBAIC00MzgsNyArNDQ4LDcgQEAKIAogCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIG5ldzsKIH0KIAogCkBAIC00NzAsOCArNDgwLDkgQEAKIAlzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlIG47CiAJaW50IHJldCwgYWRkZWRzaXplOwogCXNpemVfdCByZXRsZW47CisJdWludDMyX3QgZnJlZWRfbGVuOwogCi0JaWYoIXJlZikgeworCWlmKHVubGlrZWx5KCFyZWYpKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiRUVFRUVLLiBqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUgY2FsbGVkIHdpdGggTlVMTCBub2RlXG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ5OSwzMiArNTEwLDM0IEBACiAKIAlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAKKwlmcmVlZF9sZW4gPSByZWZfdG90bGVuKGMsIGplYiwgcmVmKTsKKwogCWlmIChyZWZfZmxhZ3MocmVmKSA9PSBSRUZfVU5DSEVDS0VEKSB7Ci0JCUQxKGlmICh1bmxpa2VseShqZWItPnVuY2hlY2tlZF9zaXplIDwgcmVmX3RvdGxlbihjLCBqZWIsIHJlZikpKSB7CisJCUQxKGlmICh1bmxpa2VseShqZWItPnVuY2hlY2tlZF9zaXplIDwgZnJlZWRfbGVuKSkgewogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJyYXcgdW5jaGVja2VkIG5vZGUgb2Ygc2l6ZSAweCUwOHggZnJlZWQgZnJvbSBlcmFzZSBibG9jayAlZCBhdCAweCUwOHgsIGJ1dCB1bmNoZWNrZWRfc2l6ZSB3YXMgYWxyZWFkeSAweCUwOHhcbiIsCi0JCQkgICAgICAgcmVmX3RvdGxlbihjLCBqZWIsIHJlZiksIGJsb2NrbnIsIHJlZi0+Zmxhc2hfb2Zmc2V0LCBqZWItPnVzZWRfc2l6ZSk7CisJCQkgICAgICAgZnJlZWRfbGVuLCBibG9ja25yLCByZWYtPmZsYXNoX29mZnNldCwgamViLT51c2VkX3NpemUpOwogCQkJQlVHKCk7CiAJCX0pCi0JCUQxKHByaW50ayhLRVJOX0RFQlVHICJPYnNvbGV0aW5nIHByZXZpb3VzbHkgdW5jaGVja2VkIG5vZGUgYXQgMHglMDh4IG9mIGxlbiAleDogIiwgcmVmX29mZnNldChyZWYpLCByZWZfdG90bGVuKGMsIGplYiwgcmVmKSkpOwotCQlqZWItPnVuY2hlY2tlZF9zaXplIC09IHJlZl90b3RsZW4oYywgamViLCByZWYpOwotCQljLT51bmNoZWNrZWRfc2l6ZSAtPSByZWZfdG90bGVuKGMsIGplYiwgcmVmKTsKKwkJRDEocHJpbnRrKEtFUk5fREVCVUcgIk9ic29sZXRpbmcgcHJldmlvdXNseSB1bmNoZWNrZWQgbm9kZSBhdCAweCUwOHggb2YgbGVuICV4OiAiLCByZWZfb2Zmc2V0KHJlZiksIGZyZWVkX2xlbikpOworCQlqZWItPnVuY2hlY2tlZF9zaXplIC09IGZyZWVkX2xlbjsKKwkJYy0+dW5jaGVja2VkX3NpemUgLT0gZnJlZWRfbGVuOwogCX0gZWxzZSB7Ci0JCUQxKGlmICh1bmxpa2VseShqZWItPnVzZWRfc2l6ZSA8IHJlZl90b3RsZW4oYywgamViLCByZWYpKSkgeworCQlEMShpZiAodW5saWtlbHkoamViLT51c2VkX3NpemUgPCBmcmVlZF9sZW4pKSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgInJhdyBub2RlIG9mIHNpemUgMHglMDh4IGZyZWVkIGZyb20gZXJhc2UgYmxvY2sgJWQgYXQgMHglMDh4LCBidXQgdXNlZF9zaXplIHdhcyBhbHJlYWR5IDB4JTA4eFxuIiwKLQkJCSAgICAgICByZWZfdG90bGVuKGMsIGplYiwgcmVmKSwgYmxvY2tuciwgcmVmLT5mbGFzaF9vZmZzZXQsIGplYi0+dXNlZF9zaXplKTsKKwkJCSAgICAgICBmcmVlZF9sZW4sIGJsb2NrbnIsIHJlZi0+Zmxhc2hfb2Zmc2V0LCBqZWItPnVzZWRfc2l6ZSk7CiAJCQlCVUcoKTsKIAkJfSkKLQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIk9ic29sZXRpbmcgbm9kZSBhdCAweCUwOHggb2YgbGVuICUjeDogIiwgcmVmX29mZnNldChyZWYpLCByZWZfdG90bGVuKGMsIGplYiwgcmVmKSkpOwotCQlqZWItPnVzZWRfc2l6ZSAtPSByZWZfdG90bGVuKGMsIGplYiwgcmVmKTsKLQkJYy0+dXNlZF9zaXplIC09IHJlZl90b3RsZW4oYywgamViLCByZWYpOworCQlEMShwcmludGsoS0VSTl9ERUJVRyAiT2Jzb2xldGluZyBub2RlIGF0IDB4JTA4eCBvZiBsZW4gJSN4OiAiLCByZWZfb2Zmc2V0KHJlZiksIGZyZWVkX2xlbikpOworCQlqZWItPnVzZWRfc2l6ZSAtPSBmcmVlZF9sZW47CisJCWMtPnVzZWRfc2l6ZSAtPSBmcmVlZF9sZW47CiAJfQogCiAJLy8gVGFrZSBjYXJlLCB0aGF0IHdhc3RlZCBzaXplIGlzIHRha2VuIGludG8gY29uY2VybgotCWlmICgoamViLT5kaXJ0eV9zaXplIHx8IElTRElSVFkoamViLT53YXN0ZWRfc2l6ZSArIHJlZl90b3RsZW4oYywgamViLCByZWYpKSkgJiYgamViICE9IGMtPm5leHRibG9jaykgewotCQlEMShwcmludGsoS0VSTl9ERUJVRyAiRGlydHlpbmdcbiIpKTsKLQkJYWRkZWRzaXplID0gcmVmX3RvdGxlbihjLCBqZWIsIHJlZik7Ci0JCWplYi0+ZGlydHlfc2l6ZSArPSByZWZfdG90bGVuKGMsIGplYiwgcmVmKTsKLQkJYy0+ZGlydHlfc2l6ZSArPSByZWZfdG90bGVuKGMsIGplYiwgcmVmKTsKKwlpZiAoKGplYi0+ZGlydHlfc2l6ZSB8fCBJU0RJUlRZKGplYi0+d2FzdGVkX3NpemUgKyBmcmVlZF9sZW4pKSAmJiBqZWIgIT0gYy0+bmV4dGJsb2NrKSB7CisJCUQxKHByaW50aygiRGlydHlpbmdcbiIpKTsKKwkJYWRkZWRzaXplID0gZnJlZWRfbGVuOworCQlqZWItPmRpcnR5X3NpemUgKz0gZnJlZWRfbGVuOworCQljLT5kaXJ0eV9zaXplICs9IGZyZWVkX2xlbjsKIAogCQkvKiBDb252ZXJ0IHdhc3RlZCBzcGFjZSB0byBkaXJ0eSwgaWYgbm90IGEgYmFkIGJsb2NrICovCiAJCWlmIChqZWItPndhc3RlZF9zaXplKSB7CkBAIC01NDMsMTAgKzU1NiwxMCBAQAogCQkJfQogCQl9CiAJfSBlbHNlIHsKLQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIldhc3RpbmdcbiIpKTsKKwkJRDEocHJpbnRrKCJXYXN0aW5nXG4iKSk7CiAJCWFkZGVkc2l6ZSA9IDA7Ci0JCWplYi0+d2FzdGVkX3NpemUgKz0gcmVmX3RvdGxlbihjLCBqZWIsIHJlZik7Ci0JCWMtPndhc3RlZF9zaXplICs9IHJlZl90b3RsZW4oYywgamViLCByZWYpOworCQlqZWItPndhc3RlZF9zaXplICs9IGZyZWVkX2xlbjsKKwkJYy0+d2FzdGVkX3NpemUgKz0gZnJlZWRfbGVuOwogCX0KIAlyZWYtPmZsYXNoX29mZnNldCA9IHJlZl9vZmZzZXQocmVmKSB8IFJFRl9PQlNPTEVURTsKIApAQCAtNjIyLDcgKzYzNSw3IEBACiAJLyogVGhlIGVyYXNlX2ZyZWVfc2VtIGlzIGxvY2tlZCwgYW5kIGhhcyBiZWVuIHNpbmNlIGJlZm9yZSB3ZSBtYXJrZWQgdGhlIG5vZGUgb2Jzb2xldGUKIAkgICBhbmQgcG90ZW50aWFsbHkgcHV0IGl0cyBlcmFzZWJsb2NrIG9udG8gdGhlIGVyYXNlX3BlbmRpbmdfbGlzdC4gVGh1cywgd2Uga25vdyB0aGF0CiAJICAgdGhlIGJsb2NrIGhhc24ndCBfYWxyZWFkeV8gYmVlbiBlcmFzZWQsIGFuZCB0aGF0ICdyZWYnIGl0c2VsZiBoYXNuJ3QgYmVlbiBmcmVlZCB5ZXQKLQkgICBieSBqZmZzMl9mcmVlX2FsbF9ub2RlX3JlZnMoKSBpbiBlcmFzZS5jLiBXaGljaCBpcyBuaWNlLiAqLworCSAgIGJ5IGpmZnMyX2ZyZWVfamViX25vZGVfcmVmcygpIGluIGVyYXNlLmMuIFdoaWNoIGlzIG5pY2UuICovCiAKIAlEMShwcmludGsoS0VSTl9ERUJVRyAib2JsaXRlcmF0aW5nIG9ic29sZXRlZCBub2RlIGF0IDB4JTA4eFxuIiwgcmVmX29mZnNldChyZWYpKSk7CiAJcmV0ID0gamZmczJfZmxhc2hfcmVhZChjLCByZWZfb2Zmc2V0KHJlZiksIHNpemVvZihuKSwgJnJldGxlbiwgKGNoYXIgKikmbik7CkBAIC02MzQsOCArNjQ3LDggQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2hvcnQgcmVhZCBmcm9tIG9ic29sZXRlZCBub2RlIGF0IDB4JTA4eDogJXpkXG4iLCByZWZfb2Zmc2V0KHJlZiksIHJldGxlbik7CiAJCWdvdG8gb3V0X2VyYXNlX3NlbTsKIAl9Ci0JaWYgKFBBRChqZTMyX3RvX2NwdShuLnRvdGxlbikpICE9IFBBRChyZWZfdG90bGVuKGMsIGplYiwgcmVmKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm9kZSB0b3RsZW4gb24gZmxhc2ggKDB4JTA4eCkgIT0gdG90bGVuIGZyb20gbm9kZSByZWYgKDB4JTA4eClcbiIsIGplMzJfdG9fY3B1KG4udG90bGVuKSwgcmVmX3RvdGxlbihjLCBqZWIsIHJlZikpOworCWlmIChQQUQoamUzMl90b19jcHUobi50b3RsZW4pKSAhPSBQQUQoZnJlZWRfbGVuKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJOb2RlIHRvdGxlbiBvbiBmbGFzaCAoMHglMDh4KSAhPSB0b3RsZW4gZnJvbSBub2RlIHJlZiAoMHglMDh4KVxuIiwgamUzMl90b19jcHUobi50b3RsZW4pLCBmcmVlZF9sZW4pOwogCQlnb3RvIG91dF9lcmFzZV9zZW07CiAJfQogCWlmICghKGplMTZfdG9fY3B1KG4ubm9kZXR5cGUpICYgSkZGUzJfTk9ERV9BQ0NVUkFURSkpIHsKQEAgLTY3MSw2ICs2ODQsMTAgQEAKIAkJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwogCiAJCWljID0gamZmczJfcmF3X3JlZl90b19pYyhyZWYpOworCQkvKiBJdCBzZWVtcyB3ZSBzaG91bGQgbmV2ZXIgY2FsbCBqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUoKSBmb3IKKwkJICAgWEFUVFIgbm9kZXMuLi4uIHlldC4gTWFrZSBzdXJlIHdlIG5vdGljZSBpZi93aGVuIHdlIGNoYW5nZQorCQkgICB0aGF0IDopICovCisJCUJVR19PTihpYy0+Y2xhc3MgIT0gUkFXTk9ERV9DTEFTU19JTk9ERV9DQUNIRSk7CiAJCWZvciAocCA9ICZpYy0+bm9kZXM7ICgqcCkgIT0gcmVmOyBwID0gJigoKnApLT5uZXh0X2luX2lubykpCiAJCQk7CiAKQEAgLTY4Myw1MSArNzAwLDYgQEAKIAkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAJfQogCi0KLQkvKiBNZXJnZSB3aXRoIHRoZSBuZXh0IG5vZGUgaW4gdGhlIHBoeXNpY2FsIGxpc3QsIGlmIHRoZXJlIGlzIG9uZQotCSAgIGFuZCBpZiBpdCdzIGFsc28gb2Jzb2xldGUgYW5kIGlmIGl0IGRvZXNuJ3QgYmVsb25nIHRvIGFueSBpbm9kZSAqLwotCWlmIChyZWYtPm5leHRfcGh5cyAmJiByZWZfb2Jzb2xldGUocmVmLT5uZXh0X3BoeXMpICYmCi0JICAgICFyZWYtPm5leHRfcGh5cy0+bmV4dF9pbl9pbm8pIHsKLQkJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqbiA9IHJlZi0+bmV4dF9waHlzOwotCi0JCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQotCQlyZWYtPl9fdG90bGVuICs9IG4tPl9fdG90bGVuOwotCQlyZWYtPm5leHRfcGh5cyA9IG4tPm5leHRfcGh5czsKLSAgICAgICAgICAgICAgICBpZiAoamViLT5sYXN0X25vZGUgPT0gbikgamViLT5sYXN0X25vZGUgPSByZWY7Ci0JCWlmIChqZWItPmdjX25vZGUgPT0gbikgewotCQkJLyogZ2Mgd2lsbCBiZSBoYXBweSBjb250aW51aW5nIGdjIG9uIHRoaXMgbm9kZSAqLwotCQkJamViLT5nY19ub2RlPXJlZjsKLQkJfQotCQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQotCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihuKTsKLQl9Ci0KLQkvKiBBbHNvIG1lcmdlIHdpdGggdGhlIHByZXZpb3VzIG5vZGUgaW4gdGhlIGxpc3QsIGlmIHRoZXJlIGlzIG9uZQotCSAgIGFuZCB0aGF0IG9uZSBpcyBvYnNvbGV0ZSAqLwotCWlmIChyZWYgIT0gamViLT5maXJzdF9ub2RlICkgewotCQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpwID0gamViLT5maXJzdF9ub2RlOwotCi0JCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQotCQl3aGlsZSAocC0+bmV4dF9waHlzICE9IHJlZikKLQkJCXAgPSBwLT5uZXh0X3BoeXM7Ci0KLQkJaWYgKHJlZl9vYnNvbGV0ZShwKSAmJiAhcmVmLT5uZXh0X2luX2lubykgewotCQkJcC0+X190b3RsZW4gKz0gcmVmLT5fX3RvdGxlbjsKLQkJCWlmIChqZWItPmxhc3Rfbm9kZSA9PSByZWYpIHsKLQkJCQlqZWItPmxhc3Rfbm9kZSA9IHA7Ci0JCQl9Ci0JCQlpZiAoamViLT5nY19ub2RlID09IHJlZikgewotCQkJCS8qIGdjIHdpbGwgYmUgaGFwcHkgY29udGludWluZyBnYyBvbiB0aGlzIG5vZGUgKi8KLQkJCQlqZWItPmdjX25vZGU9cDsKLQkJCX0KLQkJCXAtPm5leHRfcGh5cyA9IHJlZi0+bmV4dF9waHlzOwotCQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYocmVmKTsKLQkJfQotCQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQl9CiAgb3V0X2VyYXNlX3NlbToKIAl1cCgmYy0+ZXJhc2VfZnJlZV9zZW0pOwogfQpkaWZmIC0tZ2l0IGEvZnMvamZmczIvb3MtbGludXguaCBiL2ZzL2pmZnMyL29zLWxpbnV4LmgKaW5kZXggZDMwN2NmNS4uY2Q0MDIxYiAxMDA2NDQKLS0tIGEvZnMvamZmczIvb3MtbGludXguaAorKysgYi9mcy9qZmZzMi9vcy1saW51eC5oCkBAIC0zMSw5ICszMSw3IEBACiAjZGVmaW5lIEpGRlMyX0ZfSV9NT0RFKGYpIChPRk5JX0VET05JXzJTRkZKKGYpLT5pX21vZGUpCiAjZGVmaW5lIEpGRlMyX0ZfSV9VSUQoZikgKE9GTklfRURPTklfMlNGRkooZiktPmlfdWlkKQogI2RlZmluZSBKRkZTMl9GX0lfR0lEKGYpIChPRk5JX0VET05JXzJTRkZKKGYpLT5pX2dpZCkKLQotI2RlZmluZSBKRkZTMl9GX0lfUkRFVl9NSU4oZikgKGltaW5vcihPRk5JX0VET05JXzJTRkZKKGYpKSkKLSNkZWZpbmUgSkZGUzJfRl9JX1JERVZfTUFKKGYpIChpbWFqb3IoT0ZOSV9FRE9OSV8yU0ZGSihmKSkpCisjZGVmaW5lIEpGRlMyX0ZfSV9SREVWKGYpIChPRk5JX0VET05JXzJTRkZKKGYpLT5pX3JkZXYpCiAKICNkZWZpbmUgSVRJTUUoc2VjKSAoKHN0cnVjdCB0aW1lc3BlYyl7c2VjLCAwfSkKICNkZWZpbmUgSV9TRUModHYpICgodHYpLnR2X3NlYykKQEAgLTYwLDYgKzU4LDEwIEBACiAJZi0+dGFyZ2V0ID0gTlVMTDsKIAlmLT5mbGFncyA9IDA7CiAJZi0+dXNlcmNvbXByID0gMDsKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMCisJZi0+aV9hY2xfYWNjZXNzID0gSkZGUzJfQUNMX05PVF9DQUNIRUQ7CisJZi0+aV9hY2xfZGVmYXVsdCA9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEOworI2VuZGlmCiB9CiAKIApAQCAtOTAsMTMgKzkyLDEwIEBACiAjZGVmaW5lIGpmZnMyX2ZsYXNoX3dyaXRldihhLGIsYyxkLGUsZikgamZmczJfZmxhc2hfZGlyZWN0X3dyaXRldihhLGIsYyxkLGUpCiAjZGVmaW5lIGpmZnMyX3didWZfdGltZW91dCBOVUxMCiAjZGVmaW5lIGpmZnMyX3didWZfcHJvY2VzcyBOVUxMCi0jZGVmaW5lIGpmZnMyX25vcl9lY2MoYykgKDApCiAjZGVmaW5lIGpmZnMyX2RhdGFmbGFzaChjKSAoMCkKLSNkZWZpbmUgamZmczJfbm9yX3didWZfZmxhc2goYykgKDApCi0jZGVmaW5lIGpmZnMyX25vcl9lY2NfZmxhc2hfc2V0dXAoYykgKDApCi0jZGVmaW5lIGpmZnMyX25vcl9lY2NfZmxhc2hfY2xlYW51cChjKSBkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgamZmczJfZGF0YWZsYXNoX3NldHVwKGMpICgwKQogI2RlZmluZSBqZmZzMl9kYXRhZmxhc2hfY2xlYW51cChjKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgamZmczJfbm9yX3didWZfZmxhc2goYykgKDApCiAjZGVmaW5lIGpmZnMyX25vcl93YnVmX2ZsYXNoX3NldHVwKGMpICgwKQogI2RlZmluZSBqZmZzMl9ub3Jfd2J1Zl9mbGFzaF9jbGVhbnVwKGMpIGRvIHt9IHdoaWxlICgwKQogCkBAIC0xMDcsOSArMTA2LDcgQEAKICNpZmRlZiBDT05GSUdfSkZGUzJfU1VNTUFSWQogI2RlZmluZSBqZmZzMl9jYW5fbWFya19vYnNvbGV0ZShjKSAoMCkKICNlbHNlCi0jZGVmaW5lIGpmZnMyX2Nhbl9tYXJrX29ic29sZXRlKGMpIFwKLSAgKChjLT5tdGQtPnR5cGUgPT0gTVREX05PUkZMQVNIICYmICEoYy0+bXRkLT5mbGFncyAmIChNVERfRUNDfE1URF9QUk9HUkFNX1JFR0lPTlMpKSkgfHwgXAotICAgYy0+bXRkLT50eXBlID09IE1URF9SQU0pCisjZGVmaW5lIGpmZnMyX2Nhbl9tYXJrX29ic29sZXRlKGMpIChjLT5tdGQtPmZsYWdzICYgKE1URF9CSVRfV1JJVEVBQkxFKSkKICNlbmRpZgogCiAjZGVmaW5lIGpmZnMyX2NsZWFubWFya2VyX29vYihjKSAoYy0+bXRkLT50eXBlID09IE1URF9OQU5ERkxBU0gpCkBAIC0xMzMsMTUgKzEzMCwxMSBAQAogaW50IGpmZnMyX25hbmRfZmxhc2hfc2V0dXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwogdm9pZCBqZmZzMl9uYW5kX2ZsYXNoX2NsZWFudXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwogCi0jZGVmaW5lIGpmZnMyX25vcl9lY2MoYykgKGMtPm10ZC0+dHlwZSA9PSBNVERfTk9SRkxBU0ggJiYgKGMtPm10ZC0+ZmxhZ3MgJiBNVERfRUNDKSkKLWludCBqZmZzMl9ub3JfZWNjX2ZsYXNoX3NldHVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKLXZvaWQgamZmczJfbm9yX2VjY19mbGFzaF9jbGVhbnVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKLQogI2RlZmluZSBqZmZzMl9kYXRhZmxhc2goYykgKGMtPm10ZC0+dHlwZSA9PSBNVERfREFUQUZMQVNIKQogaW50IGpmZnMyX2RhdGFmbGFzaF9zZXR1cChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CiB2b2lkIGpmZnMyX2RhdGFmbGFzaF9jbGVhbnVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKIAotI2RlZmluZSBqZmZzMl9ub3Jfd2J1Zl9mbGFzaChjKSAoYy0+bXRkLT50eXBlID09IE1URF9OT1JGTEFTSCAmJiAoYy0+bXRkLT5mbGFncyAmIE1URF9QUk9HUkFNX1JFR0lPTlMpKQorI2RlZmluZSBqZmZzMl9ub3Jfd2J1Zl9mbGFzaChjKSAoYy0+bXRkLT50eXBlID09IE1URF9OT1JGTEFTSCAmJiAhIChjLT5tdGQtPmZsYWdzICYgTVREX0JJVF9XUklURUFCTEUpKQogaW50IGpmZnMyX25vcl93YnVmX2ZsYXNoX3NldHVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKIHZvaWQgamZmczJfbm9yX3didWZfZmxhc2hfY2xlYW51cChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3JlYWRpbm9kZS5jIGIvZnMvamZmczIvcmVhZGlub2RlLmMKaW5kZXggZjE2OTU2NC4uNWZlYzAxMiAxMDA2NDQKLS0tIGEvZnMvamZmczIvcmVhZGlub2RlLmMKKysrIGIvZnMvamZmczIvcmVhZGlub2RlLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkJCWpmZnMyX2ZyZWVfZnVsbF9kbm9kZSh0bi0+Zm4pOwogCQkJamZmczJfZnJlZV90bXBfZG5vZGVfaW5mbyh0bik7CiAKLQkJCXRoaXMgPSB0aGlzLT5yYl9wYXJlbnQ7CisJCQl0aGlzID0gcmJfcGFyZW50KHRoaXMpOwogCQkJaWYgKCF0aGlzKQogCQkJCWJyZWFrOwogCkBAIC0xMTYsMTkgKzExNiw0MiBAQAogCQkJCXVpbnQzMl90ICpsYXRlc3RfbWN0aW1lLCB1aW50MzJfdCAqbWN0aW1lX3ZlcikKIHsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmZkOworCXVpbnQzMl90IGNyYzsKIAotCS8qIFRoZSBkaXJlbnRyeSBub2RlcyBhcmUgY2hlY2tlZCBkdXJpbmcgdGhlIGZsYXNoIHNjYW5uaW5nICovCi0JQlVHX09OKHJlZl9mbGFncyhyZWYpID09IFJFRl9VTkNIRUNLRUQpOwogCS8qIE9ic29sZXRlZC4gVGhpcyBjYW5ub3QgaGFwcGVuLCBzdXJlbHk/IGR3bXcyIDIwMDIwMzA4ICovCiAJQlVHX09OKHJlZl9vYnNvbGV0ZShyZWYpKTsKIAotCS8qIFNhbml0eSBjaGVjayAqLwotCWlmICh1bmxpa2VseShQQUQoKHJkLT5uc2l6ZSArIHNpemVvZigqcmQpKSkgIT0gUEFEKGplMzJfdG9fY3B1KHJkLT50b3RsZW4pKSkpIHsKLQkJSkZGUzJfRVJST1IoImlsbGVnYWwgbnNpemUgaW4gbm9kZSBhdCAlIzA4eDogbnNpemUgJSMwMngsIHRvdGxlbiAlIzA0eFxuIiwKLQkJICAgICAgIHJlZl9vZmZzZXQocmVmKSwgcmQtPm5zaXplLCBqZTMyX3RvX2NwdShyZC0+dG90bGVuKSk7CisJY3JjID0gY3JjMzIoMCwgcmQsIHNpemVvZigqcmQpIC0gOCk7CisJaWYgKHVubGlrZWx5KGNyYyAhPSBqZTMyX3RvX2NwdShyZC0+bm9kZV9jcmMpKSkgeworCQlKRkZTMl9OT1RJQ0UoImhlYWRlciBDUkMgZmFpbGVkIG9uIGRpcmVudCBub2RlIGF0ICUjMDh4OiByZWFkICUjMDh4LCBjYWxjdWxhdGVkICUjMDh4XG4iLAorCQkJICAgICByZWZfb2Zmc2V0KHJlZiksIGplMzJfdG9fY3B1KHJkLT5ub2RlX2NyYyksIGNyYyk7CiAJCXJldHVybiAxOwogCX0KIAorCS8qIElmIHdlJ3ZlIG5ldmVyIGNoZWNrZWQgdGhlIENSQ3Mgb24gdGhpcyBub2RlLCBjaGVjayB0aGVtIG5vdyAqLworCWlmIChyZWZfZmxhZ3MocmVmKSA9PSBSRUZfVU5DSEVDS0VEKSB7CisJCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWI7CisJCWludCBsZW47CisKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmICh1bmxpa2VseShQQUQoKHJkLT5uc2l6ZSArIHNpemVvZigqcmQpKSkgIT0gUEFEKGplMzJfdG9fY3B1KHJkLT50b3RsZW4pKSkpIHsKKwkJCUpGRlMyX0VSUk9SKCJpbGxlZ2FsIG5zaXplIGluIG5vZGUgYXQgJSMwOHg6IG5zaXplICUjMDJ4LCB0b3RsZW4gJSMwNHhcbiIsCisJCQkJICAgIHJlZl9vZmZzZXQocmVmKSwgcmQtPm5zaXplLCBqZTMyX3RvX2NwdShyZC0+dG90bGVuKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWplYiA9ICZjLT5ibG9ja3NbcmVmLT5mbGFzaF9vZmZzZXQgLyBjLT5zZWN0b3Jfc2l6ZV07CisJCWxlbiA9IHJlZl90b3RsZW4oYywgamViLCByZWYpOworCisJCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwkJamViLT51c2VkX3NpemUgKz0gbGVuOworCQlqZWItPnVuY2hlY2tlZF9zaXplIC09IGxlbjsKKwkJYy0+dXNlZF9zaXplICs9IGxlbjsKKwkJYy0+dW5jaGVja2VkX3NpemUgLT0gbGVuOworCQlyZWYtPmZsYXNoX29mZnNldCA9IHJlZl9vZmZzZXQocmVmKSB8IFJFRl9QUklTVElORTsKKwkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJfQorCiAJZmQgPSBqZmZzMl9hbGxvY19mdWxsX2RpcmVudChyZC0+bnNpemUgKyAxKTsKIAlpZiAodW5saWtlbHkoIWZkKSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xOTgsMTMgKzIyMSwyMSBAQAogCXN0cnVjdCBqZmZzMl90bXBfZG5vZGVfaW5mbyAqdG47CiAJdWludDMyX3QgbGVuLCBjc2l6ZTsKIAlpbnQgcmV0ID0gMTsKKwl1aW50MzJfdCBjcmM7CiAKIAkvKiBPYnNvbGV0ZWQuIFRoaXMgY2Fubm90IGhhcHBlbiwgc3VyZWx5PyBkd213MiAyMDAyMDMwOCAqLwogCUJVR19PTihyZWZfb2Jzb2xldGUocmVmKSk7CiAKKwljcmMgPSBjcmMzMigwLCByZCwgc2l6ZW9mKCpyZCkgLSA4KTsKKwlpZiAodW5saWtlbHkoY3JjICE9IGplMzJfdG9fY3B1KHJkLT5ub2RlX2NyYykpKSB7CisJCUpGRlMyX05PVElDRSgibm9kZSBDUkMgZmFpbGVkIG9uIGRub2RlIGF0ICUjMDh4OiByZWFkICUjMDh4LCBjYWxjdWxhdGVkICUjMDh4XG4iLAorCQkJICAgICByZWZfb2Zmc2V0KHJlZiksIGplMzJfdG9fY3B1KHJkLT5ub2RlX2NyYyksIGNyYyk7CisJCXJldHVybiAxOworCX0KKwogCXRuID0gamZmczJfYWxsb2NfdG1wX2Rub2RlX2luZm8oKTsKIAlpZiAoIXRuKSB7Ci0JCUpGRlMyX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgdG4gKCVkIGJ5dGVzKS5cbiIsIHNpemVvZigqdG4pKTsKKwkJSkZGUzJfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSB0biAoJXp1IGJ5dGVzKS5cbiIsIHNpemVvZigqdG4pKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yMTMsMTQgKzI0NCw2IEBACiAKIAkvKiBJZiB3ZSd2ZSBuZXZlciBjaGVja2VkIHRoZSBDUkNzIG9uIHRoaXMgbm9kZSwgY2hlY2sgdGhlbSBub3cgKi8KIAlpZiAocmVmX2ZsYWdzKHJlZikgPT0gUkVGX1VOQ0hFQ0tFRCkgewotCQl1aW50MzJfdCBjcmM7Ci0KLQkJY3JjID0gY3JjMzIoMCwgcmQsIHNpemVvZigqcmQpIC0gOCk7Ci0JCWlmICh1bmxpa2VseShjcmMgIT0gamUzMl90b19jcHUocmQtPm5vZGVfY3JjKSkpIHsKLQkJCUpGRlMyX05PVElDRSgiaGVhZGVyIENSQyBmYWlsZWQgb24gbm9kZSBhdCAlIzA4eDogcmVhZCAlIzA4eCwgY2FsY3VsYXRlZCAlIzA4eFxuIiwKLQkJCQkJcmVmX29mZnNldChyZWYpLCBqZTMyX3RvX2NwdShyZC0+bm9kZV9jcmMpLCBjcmMpOwotCQkJZ290byBmcmVlX291dDsKLQkJfQogCiAJCS8qIFNhbml0eSBjaGVja3MgKi8KIAkJaWYgKHVubGlrZWx5KGplMzJfdG9fY3B1KHJkLT5vZmZzZXQpID4gamUzMl90b19jcHUocmQtPmlzaXplKSkgfHwKQEAgLTM0Myw3ICszNjYsNyBAQAogICogSGVscGVyIGZ1bmN0aW9uIGZvciBqZmZzMl9nZXRfaW5vZGVfbm9kZXMoKS4KICAqIEl0IGlzIGNhbGxlZCBldmVyeSB0aW1lIGFuIHVua25vd24gbm9kZSBpcyBmb3VuZC4KICAqCi0gKiBSZXR1cm5zOiAwIG9uIHN1Y2NlczsKKyAqIFJldHVybnM6IDAgb24gc3VjY2VzczsKICAqIAkgICAgMSBpZiB0aGUgbm9kZSBzaG91bGQgYmUgbWFya2VkIG9ic29sZXRlOwogICogCSAgICBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KQEAgLTM1NCwzNyArMzc3LDMwIEBACiAKIAl1bi0+bm9kZXR5cGUgPSBjcHVfdG9famUxNihKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgamUxNl90b19jcHUodW4tPm5vZGV0eXBlKSk7CiAKLQlpZiAoY3JjMzIoMCwgdW4sIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSAtIDQpICE9IGplMzJfdG9fY3B1KHVuLT5oZHJfY3JjKSkgewotCQkvKiBIbW1tLiBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGF0IHNjYW4gdGltZS4gKi8KLQkJSkZGUzJfTk9USUNFKCJub2RlIGhlYWRlciBDUkMgZmFpbGVkIGF0ICUjMDh4LiBCdXQgaXQgbXVzdCBoYXZlIGJlZW4gT0sgZWFybGllci5cbiIsIHJlZl9vZmZzZXQocmVmKSk7Ci0JCWpmZnMyX2RiZ19kdW1wX25vZGUoYywgcmVmX29mZnNldChyZWYpKTsKKwlzd2l0Y2goamUxNl90b19jcHUodW4tPm5vZGV0eXBlKSAmIEpGRlMyX0NPTVBBVF9NQVNLKSB7CisKKwljYXNlIEpGRlMyX0ZFQVRVUkVfSU5DT01QQVQ6CisJCUpGRlMyX0VSUk9SKCJ1bmtub3duIElOQ09NUEFUIG5vZGV0eXBlICUjMDRYIGF0ICUjMDh4XG4iLAorCQkJICAgIGplMTZfdG9fY3B1KHVuLT5ub2RldHlwZSksIHJlZl9vZmZzZXQocmVmKSk7CisJCS8qIEVFUCAqLworCQlCVUcoKTsKKwkJYnJlYWs7CisKKwljYXNlIEpGRlMyX0ZFQVRVUkVfUk9DT01QQVQ6CisJCUpGRlMyX0VSUk9SKCJ1bmtub3duIFJPQ09NUEFUIG5vZGV0eXBlICUjMDRYIGF0ICUjMDh4XG4iLAorCQkJICAgIGplMTZfdG9fY3B1KHVuLT5ub2RldHlwZSksIHJlZl9vZmZzZXQocmVmKSk7CisJCUJVR19PTighKGMtPmZsYWdzICYgSkZGUzJfU0JfRkxBR19STykpOworCQlicmVhazsKKworCWNhc2UgSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9DT1BZOgorCQlKRkZTMl9OT1RJQ0UoInVua25vd24gUldDT01QQVRfQ09QWSBub2RldHlwZSAlIzA0WCBhdCAlIzA4eFxuIiwKKwkJCSAgICAgamUxNl90b19jcHUodW4tPm5vZGV0eXBlKSwgcmVmX29mZnNldChyZWYpKTsKKwkJYnJlYWs7CisKKwljYXNlIEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfREVMRVRFOgorCQlKRkZTMl9OT1RJQ0UoInVua25vd24gUldDT01QQVRfREVMRVRFIG5vZGV0eXBlICUjMDRYIGF0ICUjMDh4XG4iLAorCQkJICAgICBqZTE2X3RvX2NwdSh1bi0+bm9kZXR5cGUpLCByZWZfb2Zmc2V0KHJlZikpOwogCQlyZXR1cm4gMTsKLQl9IGVsc2UgewotCQlzd2l0Y2goamUxNl90b19jcHUodW4tPm5vZGV0eXBlKSAmIEpGRlMyX0NPTVBBVF9NQVNLKSB7Ci0KLQkJY2FzZSBKRkZTMl9GRUFUVVJFX0lOQ09NUEFUOgotCQkJSkZGUzJfRVJST1IoInVua25vd24gSU5DT01QQVQgbm9kZXR5cGUgJSMwNFggYXQgJSMwOHhcbiIsCi0JCQkJamUxNl90b19jcHUodW4tPm5vZGV0eXBlKSwgcmVmX29mZnNldChyZWYpKTsKLQkJCS8qIEVFUCAqLwotCQkJQlVHKCk7Ci0JCQlicmVhazsKLQotCQljYXNlIEpGRlMyX0ZFQVRVUkVfUk9DT01QQVQ6Ci0JCQlKRkZTMl9FUlJPUigidW5rbm93biBST0NPTVBBVCBub2RldHlwZSAlIzA0WCBhdCAlIzA4eFxuIiwKLQkJCQkJamUxNl90b19jcHUodW4tPm5vZGV0eXBlKSwgcmVmX29mZnNldChyZWYpKTsKLQkJCUJVR19PTighKGMtPmZsYWdzICYgSkZGUzJfU0JfRkxBR19STykpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0NPUFk6Ci0JCQlKRkZTMl9OT1RJQ0UoInVua25vd24gUldDT01QQVRfQ09QWSBub2RldHlwZSAlIzA0WCBhdCAlIzA4eFxuIiwKLQkJCQkJamUxNl90b19jcHUodW4tPm5vZGV0eXBlKSwgcmVmX29mZnNldChyZWYpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9ERUxFVEU6Ci0JCQlKRkZTMl9OT1RJQ0UoInVua25vd24gUldDT01QQVRfREVMRVRFIG5vZGV0eXBlICUjMDRYIGF0ICUjMDh4XG4iLAotCQkJCQlqZTE2X3RvX2NwdSh1bi0+bm9kZXR5cGUpLCByZWZfb2Zmc2V0KHJlZikpOwotCQkJcmV0dXJuIDE7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQzNCw3ICs0NTAsNyBAQAogCX0KIAogCWlmIChyZXRsZW4gPCBsZW4pIHsKLQkJSkZGUzJfRVJST1IoInNob3J0IHJlYWQgYXQgJSMwOHg6ICVkIGluc3RlYWQgb2YgJWQuXG4iLAorCQlKRkZTMl9FUlJPUigic2hvcnQgcmVhZCBhdCAlIzA4eDogJXp1IGluc3RlYWQgb2YgJWQuXG4iLAogCQkJCW9mZnMsIHJldGxlbiwgbGVuKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNTQyLDEzICs1NTgsMjUgQEAKIAkJfQogCiAJCWlmIChyZXRsZW4gPCBsZW4pIHsKLQkJCUpGRlMyX0VSUk9SKCJzaG9ydCByZWFkIGF0ICUjMDh4OiAlZCBpbnN0ZWFkIG9mICVkLlxuIiwgcmVmX29mZnNldChyZWYpLCByZXRsZW4sIGxlbik7CisJCQlKRkZTMl9FUlJPUigic2hvcnQgcmVhZCBhdCAlIzA4eDogJXp1IGluc3RlYWQgb2YgJWQuXG4iLCByZWZfb2Zmc2V0KHJlZiksIHJldGxlbiwgbGVuKTsKIAkJCWVyciA9IC1FSU87CiAJCQlnb3RvIGZyZWVfb3V0OwogCQl9CiAKIAkJbm9kZSA9ICh1bmlvbiBqZmZzMl9ub2RlX3VuaW9uICopYnVmc3RhcnQ7CiAKKwkJLyogTm8gbmVlZCB0byBtYXNrIGluIHRoZSB2YWxpZCBiaXQ7IGl0IHNob3VsZG4ndCBiZSBpbnZhbGlkICovCisJCWlmIChqZTMyX3RvX2NwdShub2RlLT51Lmhkcl9jcmMpICE9IGNyYzMyKDAsIG5vZGUsIHNpemVvZihub2RlLT51KS00KSkgeworCQkJSkZGUzJfTk9USUNFKCJOb2RlIGhlYWRlciBDUkMgZmFpbGVkIGF0ICUjMDh4LiB7JTA0eCwlMDR4LCUwOHgsJTA4eH1cbiIsCisJCQkJICAgICByZWZfb2Zmc2V0KHJlZiksIGplMTZfdG9fY3B1KG5vZGUtPnUubWFnaWMpLAorCQkJCSAgICAgamUxNl90b19jcHUobm9kZS0+dS5ub2RldHlwZSksCisJCQkJICAgICBqZTMyX3RvX2NwdShub2RlLT51LnRvdGxlbiksCisJCQkJICAgICBqZTMyX3RvX2NwdShub2RlLT51Lmhkcl9jcmMpKTsKKwkJCWpmZnMyX2RiZ19kdW1wX25vZGUoYywgcmVmX29mZnNldChyZWYpKTsKKwkJCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCByZWYpOworCQkJZ290byBjb250OworCQl9CisKIAkJc3dpdGNoIChqZTE2X3RvX2NwdShub2RlLT51Lm5vZGV0eXBlKSkgewogCiAJCWNhc2UgSkZGUzJfTk9ERVRZUEVfRElSRU5UOgpAQCAtNjA2LDYgKzYzNCw3IEBACiAJCQkJZ290byBmcmVlX291dDsKIAogCQl9CisJY29udDoKIAkJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwogCX0KIApAQCAtNjc5LDEyICs3MDgsMTIgQEAKIAkJCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCBmbi0+cmF3KTsKIAogCQlCVUdfT04ocmItPnJiX2xlZnQpOwotCQlpZiAocmItPnJiX3BhcmVudCAmJiByYi0+cmJfcGFyZW50LT5yYl9sZWZ0ID09IHJiKSB7CisJCWlmIChyYl9wYXJlbnQocmIpICYmIHJiX3BhcmVudChyYiktPnJiX2xlZnQgPT0gcmIpIHsKIAkJCS8qIFdlIHdlcmUgdGhlbiBsZWZ0LWhhbmQgY2hpbGQgb2Ygb3VyIHBhcmVudC4gV2UgbmVlZAogCQkJICogdG8gbW92ZSBvdXIgb3duIHJpZ2h0LWhhbmQgY2hpbGQgaW50byBvdXIgcGxhY2UuICovCiAJCQlyZXBsX3JiID0gcmItPnJiX3JpZ2h0OwogCQkJaWYgKHJlcGxfcmIpCi0JCQkJcmVwbF9yYi0+cmJfcGFyZW50ID0gcmItPnJiX3BhcmVudDsKKwkJCQlyYl9zZXRfcGFyZW50KHJlcGxfcmIsIHJiX3BhcmVudChyYikpOwogCQl9IGVsc2UKIAkJCXJlcGxfcmIgPSBOVUxMOwogCkBAIC02OTIsMTQgKzcyMSwxNCBAQAogCiAJCS8qIFJlbW92ZSB0aGUgc3BlbnQgdG4gZnJvbSB0aGUgdHJlZTsgZG9uJ3QgYm90aGVyIHJlYmFsYW5jaW5nCiAJCSAqIGJ1dCBwdXQgb3VyIHJpZ2h0LWhhbmQgY2hpbGQgaW4gb3VyIG93biBwbGFjZS4gKi8KLQkJaWYgKHRuLT5yYi5yYl9wYXJlbnQpIHsKLQkJCWlmICh0bi0+cmIucmJfcGFyZW50LT5yYl9sZWZ0ID09ICZ0bi0+cmIpCi0JCQkJdG4tPnJiLnJiX3BhcmVudC0+cmJfbGVmdCA9IHJlcGxfcmI7Ci0JCQllbHNlIGlmICh0bi0+cmIucmJfcGFyZW50LT5yYl9yaWdodCA9PSAmdG4tPnJiKQotCQkJCXRuLT5yYi5yYl9wYXJlbnQtPnJiX3JpZ2h0ID0gcmVwbF9yYjsKKwkJaWYgKHJiX3BhcmVudCgmdG4tPnJiKSkgeworCQkJaWYgKHJiX3BhcmVudCgmdG4tPnJiKS0+cmJfbGVmdCA9PSAmdG4tPnJiKQorCQkJCXJiX3BhcmVudCgmdG4tPnJiKS0+cmJfbGVmdCA9IHJlcGxfcmI7CisJCQllbHNlIGlmIChyYl9wYXJlbnQoJnRuLT5yYiktPnJiX3JpZ2h0ID09ICZ0bi0+cmIpCisJCQkJcmJfcGFyZW50KCZ0bi0+cmIpLT5yYl9yaWdodCA9IHJlcGxfcmI7CiAJCQllbHNlIEJVRygpOwogCQl9IGVsc2UgaWYgKHRuLT5yYi5yYl9yaWdodCkKLQkJCXRuLT5yYi5yYl9yaWdodC0+cmJfcGFyZW50ID0gTlVMTDsKKwkJCXJiX3NldF9wYXJlbnQodG4tPnJiLnJiX3JpZ2h0LCBOVUxMKTsKIAogCQlqZmZzMl9mcmVlX3RtcF9kbm9kZV9pbmZvKHRuKTsKIAkJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZnMvamZmczIvc2Nhbi5jIGIvZnMvamZmczIvc2Nhbi5jCmluZGV4IGNmNTViMjIuLjYxNjE4MDggMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3NjYW4uYworKysgYi9mcy9qZmZzMi9zY2FuLmMKQEAgLTY1LDYgKzY1LDI4IEBACiAJCXJldHVybiBERUZBVUxUX0VNUFRZX1NDQU5fU0laRTsKIH0KIAorc3RhdGljIGludCBmaWxlX2RpcnR5KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViKQoreworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IGpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoYywgamViLCAxKSkpCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgamViLT5mcmVlX3NpemUpKSkKKwkJcmV0dXJuIHJldDsKKwkvKiBUdXJuZWQgd2FzdGVkIHNpemUgaW50byBkaXJ0eSwgc2luY2Ugd2UgYXBwYXJlbnRseSAKKwkgICB0aGluayBpdCdzIHJlY292ZXJhYmxlIG5vdy4gKi8KKwlqZWItPmRpcnR5X3NpemUgKz0gamViLT53YXN0ZWRfc2l6ZTsKKwljLT5kaXJ0eV9zaXplICs9IGplYi0+d2FzdGVkX3NpemU7CisJYy0+d2FzdGVkX3NpemUgLT0gamViLT53YXN0ZWRfc2l6ZTsKKwlqZWItPndhc3RlZF9zaXplID0gMDsKKwlpZiAoVkVSWURJUlRZKGMsIGplYi0+ZGlydHlfc2l6ZSkpIHsKKwkJbGlzdF9hZGQoJmplYi0+bGlzdCwgJmMtPnZlcnlfZGlydHlfbGlzdCk7CisJfSBlbHNlIHsKKwkJbGlzdF9hZGQoJmplYi0+bGlzdCwgJmMtPmRpcnR5X2xpc3QpOworCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IGpmZnMyX3NjYW5fbWVkaXVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQogewogCWludCBpLCByZXQ7CkBAIC0xNzAsMzQgKzE5MiwyMCBAQAogCQkJCQkoIWMtPm5leHRibG9jayB8fCBjLT5uZXh0YmxvY2stPmZyZWVfc2l6ZSA8IGplYi0+ZnJlZV9zaXplKSkgewogCQkJCS8qIEJldHRlciBjYW5kaWRhdGUgZm9yIHRoZSBuZXh0IHdyaXRlcyB0byBnbyB0byAqLwogCQkJCWlmIChjLT5uZXh0YmxvY2spIHsKLQkJCQkJYy0+bmV4dGJsb2NrLT5kaXJ0eV9zaXplICs9IGMtPm5leHRibG9jay0+ZnJlZV9zaXplICsgYy0+bmV4dGJsb2NrLT53YXN0ZWRfc2l6ZTsKLQkJCQkJYy0+ZGlydHlfc2l6ZSArPSBjLT5uZXh0YmxvY2stPmZyZWVfc2l6ZSArIGMtPm5leHRibG9jay0+d2FzdGVkX3NpemU7Ci0JCQkJCWMtPmZyZWVfc2l6ZSAtPSBjLT5uZXh0YmxvY2stPmZyZWVfc2l6ZTsKLQkJCQkJYy0+d2FzdGVkX3NpemUgLT0gYy0+bmV4dGJsb2NrLT53YXN0ZWRfc2l6ZTsKLQkJCQkJYy0+bmV4dGJsb2NrLT5mcmVlX3NpemUgPSBjLT5uZXh0YmxvY2stPndhc3RlZF9zaXplID0gMDsKLQkJCQkJaWYgKFZFUllESVJUWShjLCBjLT5uZXh0YmxvY2stPmRpcnR5X3NpemUpKSB7Ci0JCQkJCQlsaXN0X2FkZCgmYy0+bmV4dGJsb2NrLT5saXN0LCAmYy0+dmVyeV9kaXJ0eV9saXN0KTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWxpc3RfYWRkKCZjLT5uZXh0YmxvY2stPmxpc3QsICZjLT5kaXJ0eV9saXN0KTsKLQkJCQkJfQorCQkJCQlyZXQgPSBmaWxlX2RpcnR5KGMsIGMtPm5leHRibG9jayk7CisJCQkJCWlmIChyZXQpCisJCQkJCQlyZXR1cm4gcmV0OwogCQkJCQkvKiBkZWxldGluZyBzdW1tYXJ5IGluZm9ybWF0aW9uIG9mIHRoZSBvbGQgbmV4dGJsb2NrICovCiAJCQkJCWpmZnMyX3N1bV9yZXNldF9jb2xsZWN0ZWQoYy0+c3VtbWFyeSk7CiAJCQkJfQotCQkJCS8qIHVwZGF0ZSBjb2xsZWN0ZWQgc3VtbWFyeSBpbmZyb21hdGlvbiBmb3IgdGhlIGN1cnJlbnQgbmV4dGJsb2NrICovCisJCQkJLyogdXBkYXRlIGNvbGxlY3RlZCBzdW1tYXJ5IGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBuZXh0YmxvY2sgKi8KIAkJCQlqZmZzMl9zdW1fbW92ZV9jb2xsZWN0ZWQoYywgcyk7CiAJCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX3NjYW5fbWVkaXVtKCk6IG5ldyBuZXh0YmxvY2sgPSAweCUwOHhcbiIsIGplYi0+b2Zmc2V0KSk7CiAJCQkJYy0+bmV4dGJsb2NrID0gamViOwogCQkJfSBlbHNlIHsKLQkJCQlqZWItPmRpcnR5X3NpemUgKz0gamViLT5mcmVlX3NpemUgKyBqZWItPndhc3RlZF9zaXplOwotCQkJCWMtPmRpcnR5X3NpemUgKz0gamViLT5mcmVlX3NpemUgKyBqZWItPndhc3RlZF9zaXplOwotCQkJCWMtPmZyZWVfc2l6ZSAtPSBqZWItPmZyZWVfc2l6ZTsKLQkJCQljLT53YXN0ZWRfc2l6ZSAtPSBqZWItPndhc3RlZF9zaXplOwotCQkJCWplYi0+ZnJlZV9zaXplID0gamViLT53YXN0ZWRfc2l6ZSA9IDA7Ci0JCQkJaWYgKFZFUllESVJUWShjLCBqZWItPmRpcnR5X3NpemUpKSB7Ci0JCQkJCWxpc3RfYWRkKCZqZWItPmxpc3QsICZjLT52ZXJ5X2RpcnR5X2xpc3QpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxpc3RfYWRkKCZqZWItPmxpc3QsICZjLT5kaXJ0eV9saXN0KTsKLQkJCQl9CisJCQkJcmV0ID0gZmlsZV9kaXJ0eShjLCBqZWIpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CiAJCQl9CiAJCQlicmVhazsKIApAQCAtMjIyLDkgKzIzMCw2IEBACiAJCX0KIAl9CiAKLQlpZiAoamZmczJfc3VtX2FjdGl2ZSgpICYmIHMpCi0JCWtmcmVlKHMpOwotCiAJLyogTmV4dGJsb2NrIGRpcnR5IGlzIGFsd2F5cyBzZWVuIGFzIHdhc3RlZCwgYmVjYXVzZSB3ZSBjYW5ub3QgcmVjeWNsZSBpdCBub3cgKi8KIAlpZiAoYy0+bmV4dGJsb2NrICYmIChjLT5uZXh0YmxvY2stPmRpcnR5X3NpemUpKSB7CiAJCWMtPm5leHRibG9jay0+d2FzdGVkX3NpemUgKz0gYy0+bmV4dGJsb2NrLT5kaXJ0eV9zaXplOwpAQCAtMjQyLDExICsyNDcsOCBAQAogCiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9zY2FuX21lZGl1bSgpOiBTa2lwcGluZyAlZCBieXRlcyBpbiBuZXh0YmxvY2sgdG8gZW5zdXJlIHBhZ2UgYWxpZ25tZW50XG4iLAogCQkJICBza2lwKSk7Ci0JCWMtPm5leHRibG9jay0+d2FzdGVkX3NpemUgKz0gc2tpcDsKLQkJYy0+d2FzdGVkX3NpemUgKz0gc2tpcDsKLQotCQljLT5uZXh0YmxvY2stPmZyZWVfc2l6ZSAtPSBza2lwOwotCQljLT5mcmVlX3NpemUgLT0gc2tpcDsKKwkJamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBjLT5uZXh0YmxvY2ssIDEpOworCQlqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGMtPm5leHRibG9jaywgc2tpcCk7CiAJfQogI2VuZGlmCiAJaWYgKGMtPm5yX2VyYXNpbmdfYmxvY2tzKSB7CkBAIC0yNjYsNiArMjY4LDkgQEAKIAllbHNlCiAJCWMtPm10ZC0+dW5wb2ludChjLT5tdGQsIGZsYXNoYnVmLCAwLCBjLT5tdGQtPnNpemUpOwogI2VuZGlmCisJaWYgKHMpCisJCWtmcmVlKHMpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjkwLDcgKzI5NSw3IEBACiBpbnQgamZmczJfc2Nhbl9jbGFzc2lmeV9qZWIoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpCiB7CiAJaWYgKChqZWItPnVzZWRfc2l6ZSArIGplYi0+dW5jaGVja2VkX3NpemUpID09IFBBRChjLT5jbGVhbm1hcmtlcl9zaXplKSAmJiAhamViLT5kaXJ0eV9zaXplCi0JCSYmICghamViLT5maXJzdF9ub2RlIHx8ICFqZWItPmZpcnN0X25vZGUtPm5leHRfcGh5cykgKQorCSAgICAmJiAoIWplYi0+Zmlyc3Rfbm9kZSB8fCAhcmVmX25leHQoamViLT5maXJzdF9ub2RlKSkgKQogCQlyZXR1cm4gQkxLX1NUQVRFX0NMRUFOTUFSS0VSOwogCiAJLyogbW92ZSBibG9ja3Mgd2l0aCBtYXggNCBieXRlIGRpcnR5IHNwYWNlIHRvIGNsZWFubGlzdCAqLwpAQCAtMzA2LDExICszMTEsMTE5IEBACiAJCXJldHVybiBCTEtfU1RBVEVfQUxMRElSVFk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKK3N0YXRpYyBpbnQgamZmczJfc2Nhbl94YXR0cl9ub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAorCQkJCSBzdHJ1Y3QgamZmczJfcmF3X3hhdHRyICpyeCwgdWludDMyX3Qgb2ZzLAorCQkJCSBzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcykKK3sKKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkOworCXVpbnQzMl90IHRvdGxlbiwgY3JjOworCWludCBlcnI7CisKKwljcmMgPSBjcmMzMigwLCByeCwgc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIpIC0gNCk7CisJaWYgKGNyYyAhPSBqZTMyX3RvX2NwdShyeC0+bm9kZV9jcmMpKSB7CisJCWlmIChqZTMyX3RvX2NwdShyeC0+bm9kZV9jcmMpICE9IDB4ZmZmZmZmZmYpCisJCQlKRkZTMl9XQVJOSU5HKCJub2RlIENSQyBmYWlsZWQgYXQgJSMwOHgsIHJlYWQ9JSMwOHgsIGNhbGM9JSMwOHhcbiIsCisJCQkJICAgICAgb2ZzLCBqZTMyX3RvX2NwdShyeC0+bm9kZV9jcmMpLCBjcmMpOworCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBqZTMyX3RvX2NwdShyeC0+dG90bGVuKSkpKQorCQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIDA7CisJfQorCisJdG90bGVuID0gUEFEKHNpemVvZigqcngpICsgcngtPm5hbWVfbGVuICsgMSArIGplMTZfdG9fY3B1KHJ4LT52YWx1ZV9sZW4pKTsKKwlpZiAodG90bGVuICE9IGplMzJfdG9fY3B1KHJ4LT50b3RsZW4pKSB7CisJCUpGRlMyX1dBUk5JTkcoIm5vZGUgbGVuZ3RoIG1pc21hdGNoIGF0ICUjMDh4LCByZWFkPSV1LCBjYWxjPSV1XG4iLAorCQkJICAgICAgb2ZzLCBqZTMyX3RvX2NwdShyeC0+dG90bGVuKSwgdG90bGVuKTsKKwkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgamUzMl90b19jcHUocngtPnRvdGxlbikpKSkKKwkJCXJldHVybiBlcnI7CisJCXJldHVybiAwOworCX0KKworCXhkID0gamZmczJfc2V0dXBfeGF0dHJfZGF0dW0oYywgamUzMl90b19jcHUocngtPnhpZCksIGplMzJfdG9fY3B1KHJ4LT52ZXJzaW9uKSk7CisJaWYgKElTX0VSUih4ZCkpIHsKKwkJaWYgKFBUUl9FUlIoeGQpID09IC1FRVhJU1QpIHsKKwkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChqZTMyX3RvX2NwdShyeC0+dG90bGVuKSkpKSkKKwkJCQlyZXR1cm4gZXJyOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIFBUUl9FUlIoeGQpOworCX0KKwl4ZC0+eHByZWZpeCA9IHJ4LT54cHJlZml4OworCXhkLT5uYW1lX2xlbiA9IHJ4LT5uYW1lX2xlbjsKKwl4ZC0+dmFsdWVfbGVuID0gamUxNl90b19jcHUocngtPnZhbHVlX2xlbik7CisJeGQtPmRhdGFfY3JjID0gamUzMl90b19jcHUocngtPmRhdGFfY3JjKTsKKworCXhkLT5ub2RlID0gamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIG9mcyB8IFJFRl9QUklTVElORSwgdG90bGVuLCBOVUxMKTsKKwkvKiBGSVhNRSAqLyB4ZC0+bm9kZS0+bmV4dF9pbl9pbm8gPSAodm9pZCAqKXhkOworCisJaWYgKGpmZnMyX3N1bV9hY3RpdmUoKSkKKwkJamZmczJfc3VtX2FkZF94YXR0cl9tZW0ocywgcngsIG9mcyAtIGplYi0+b2Zmc2V0KTsKKwlkYmdfeGF0dHIoInNjYW5pbmcgeGRhdHVtIGF0ICUjMDh4ICh4aWQ9JXUsIHZlcnNpb249JXUpXG4iLAorCQkgIG9mcywgeGQtPnhpZCwgeGQtPnZlcnNpb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGpmZnMyX3NjYW5feHJlZl9ub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAorCQkJCXN0cnVjdCBqZmZzMl9yYXdfeHJlZiAqcnIsIHVpbnQzMl90IG9mcywKKwkJCQlzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcykKK3sKKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWY7CisJdWludDMyX3QgY3JjOworCWludCBlcnI7CisKKwljcmMgPSBjcmMzMigwLCByciwgc2l6ZW9mKCpycikgLSA0KTsKKwlpZiAoY3JjICE9IGplMzJfdG9fY3B1KHJyLT5ub2RlX2NyYykpIHsKKwkJaWYgKGplMzJfdG9fY3B1KHJyLT5ub2RlX2NyYykgIT0gMHhmZmZmZmZmZikKKwkJCUpGRlMyX1dBUk5JTkcoIm5vZGUgQ1JDIGZhaWxlZCBhdCAlIzA4eCwgcmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKKwkJCQkgICAgICBvZnMsIGplMzJfdG9fY3B1KHJyLT5ub2RlX2NyYyksIGNyYyk7CisJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChqZTMyX3RvX2NwdShyci0+dG90bGVuKSkpKSkKKwkJCXJldHVybiBlcnI7CisJCXJldHVybiAwOworCX0KKworCWlmIChQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeHJlZikpICE9IGplMzJfdG9fY3B1KHJyLT50b3RsZW4pKSB7CisJCUpGRlMyX1dBUk5JTkcoIm5vZGUgbGVuZ3RoIG1pc21hdGNoIGF0ICUjMDh4LCByZWFkPSV1LCBjYWxjPSV6ZFxuIiwKKwkJCSAgICAgIG9mcywgamUzMl90b19jcHUocnItPnRvdGxlbiksCisJCQkgICAgICBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeHJlZikpKTsKKwkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgamUzMl90b19jcHUocnItPnRvdGxlbikpKSkKKwkJCXJldHVybiBlcnI7CisJCXJldHVybiAwOworCX0KKworCXJlZiA9IGpmZnMyX2FsbG9jX3hhdHRyX3JlZigpOworCWlmICghcmVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEJFRk9SRSBqZmZzMl9idWlsZF94YXR0cl9zdWJzeXN0ZW0oKSBjYWxsZWQsIAorCSAqIHJlZi0+eGlkIGlzIHVzZWQgdG8gc3RvcmUgMzJiaXQgeGlkLCB4ZCBpcyBub3QgdXNlZAorCSAqIHJlZi0+aW5vIGlzIHVzZWQgdG8gc3RvcmUgMzJiaXQgaW5vZGUtbnVtYmVyLCBpYyBpcyBub3QgdXNlZAorCSAqIFRob2VzIHZhcmlhYmxlcyBhcmUgZGVjbGFyZWQgYXMgdW5pb24sIHRodXMgdXNpbmcgdGhvc2UKKwkgKiBhcmUgZXhjbHVzaXZlLiBJbiBhIHNpbWlsYXIgd2F5LCByZWYtPm5leHQgaXMgdGVtcG9yYXJpbHkKKwkgKiB1c2VkIHRvIGNoYWluIGFsbCB4YXR0cl9yZWYgb2JqZWN0LiBJdCdzIHJlLWNoYWluZWQgdG8KKwkgKiBqZmZzMl9pbm9kZV9jYWNoZSBpbiBqZmZzMl9idWlsZF94YXR0cl9zdWJzeXN0ZW0oKSBjb3JyZWN0bHkuCisJICovCisJcmVmLT5pbm8gPSBqZTMyX3RvX2NwdShyci0+aW5vKTsKKwlyZWYtPnhpZCA9IGplMzJfdG9fY3B1KHJyLT54aWQpOworCXJlZi0+bmV4dCA9IGMtPnhyZWZfdGVtcDsKKwljLT54cmVmX3RlbXAgPSByZWY7CisKKwlyZWYtPm5vZGUgPSBqZmZzMl9saW5rX25vZGVfcmVmKGMsIGplYiwgb2ZzIHwgUkVGX1BSSVNUSU5FLCBQQUQoamUzMl90b19jcHUocnItPnRvdGxlbikpLCBOVUxMKTsKKwkvKiBGSVhNRSAqLyByZWYtPm5vZGUtPm5leHRfaW5faW5vID0gKHZvaWQgKilyZWY7CisKKwlpZiAoamZmczJfc3VtX2FjdGl2ZSgpKQorCQlqZmZzMl9zdW1fYWRkX3hyZWZfbWVtKHMsIHJyLCBvZnMgLSBqZWItPm9mZnNldCk7CisJZGJnX3hhdHRyKCJzY2FuIHhyZWYgYXQgJSMwOHggKHhpZD0ldSwgaW5vPSV1KVxuIiwKKwkJICBvZnMsIHJlZi0+eGlkLCByZWYtPmlubyk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogQ2FsbGVkIHdpdGggJ2J1Zl9zaXplID09IDAnIGlmIGJ1ZiBpcyBpbiBmYWN0IGEgcG9pbnRlciBfZGlyZWN0bHlfIGludG8KKyAgIHRoZSBmbGFzaCwgWElQLXN0eWxlICovCiBzdGF0aWMgaW50IGpmZnMyX3NjYW5fZXJhc2VibG9jayAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsCi0JCQkJdW5zaWduZWQgY2hhciAqYnVmLCB1aW50MzJfdCBidWZfc2l6ZSwgc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMpIHsKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdWludDMyX3QgYnVmX3NpemUsIHN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzKSB7CiAJc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlIGNyY25vZGU7Ci0Jc3RydWN0IGpmZnMyX3N1bV9tYXJrZXIgKnNtOwogCXVpbnQzMl90IG9mcywgcHJldm9mczsKIAl1aW50MzJfdCBoZHJfY3JjLCBidWZfb2ZzLCBidWZfbGVuOwogCWludCBlcnI7CkBAIC0zNDQsNDQgKzQ1Nyw3NSBAQAogI2VuZGlmCiAKIAlpZiAoamZmczJfc3VtX2FjdGl2ZSgpKSB7Ci0JCXNtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGpmZnMyX3N1bV9tYXJrZXIpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzbSkgewotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQllcnIgPSBqZmZzMl9maWxsX3NjYW5fYnVmKGMsICh1bnNpZ25lZCBjaGFyICopIHNtLCBqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0KLQkJCQkJc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1fbWFya2VyKSwgc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1fbWFya2VyKSk7Ci0JCWlmIChlcnIpIHsKLQkJCWtmcmVlKHNtKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQlpZiAoamUzMl90b19jcHUoc20tPm1hZ2ljKSA9PSBKRkZTMl9TVU1fTUFHSUMgKSB7Ci0JCQllcnIgPSBqZmZzMl9zdW1fc2Nhbl9zdW1ub2RlKGMsIGplYiwgamUzMl90b19jcHUoc20tPm9mZnNldCksICZwc2V1ZG9fcmFuZG9tKTsKLQkJCWlmIChlcnIpIHsKLQkJCQlrZnJlZShzbSk7Ci0JCQkJcmV0dXJuIGVycjsKKwkJc3RydWN0IGpmZnMyX3N1bV9tYXJrZXIgKnNtOworCQl2b2lkICpzdW1wdHIgPSBOVUxMOworCQl1aW50MzJfdCBzdW1sZW47CisJICAgICAgCisJCWlmICghYnVmX3NpemUpIHsKKwkJCS8qIFhJUCBjYXNlLiBKdXN0IGxvb2ssIHBvaW50IGF0IHRoZSBzdW1tYXJ5IGlmIGl0J3MgdGhlcmUgKi8KKwkJCXNtID0gKHZvaWQgKilidWYgKyBjLT5zZWN0b3Jfc2l6ZSAtIHNpemVvZigqc20pOworCQkJaWYgKGplMzJfdG9fY3B1KHNtLT5tYWdpYykgPT0gSkZGUzJfU1VNX01BR0lDKSB7CisJCQkJc3VtcHRyID0gYnVmICsgamUzMl90b19jcHUoc20tPm9mZnNldCk7CisJCQkJc3VtbGVuID0gYy0+c2VjdG9yX3NpemUgLSBqZTMyX3RvX2NwdShzbS0+b2Zmc2V0KTsKIAkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIElmIE5BTkQgZmxhc2gsIHJlYWQgYSB3aG9sZSBwYWdlIG9mIGl0LiBFbHNlIGp1c3QgdGhlIGVuZCAqLworCQkJaWYgKGMtPndidWZfcGFnZXNpemUpCisJCQkJYnVmX2xlbiA9IGMtPndidWZfcGFnZXNpemU7CisJCQllbHNlCisJCQkJYnVmX2xlbiA9IHNpemVvZigqc20pOworCisJCQkvKiBSZWFkIGFzIG11Y2ggYXMgd2Ugd2FudCBpbnRvIHRoZSBfZW5kXyBvZiB0aGUgcHJlYWxsb2NhdGVkIGJ1ZmZlciAqLworCQkJZXJyID0gamZmczJfZmlsbF9zY2FuX2J1ZihjLCBidWYgKyBidWZfc2l6ZSAtIGJ1Zl9sZW4sIAorCQkJCQkJICBqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0gYnVmX2xlbiwKKwkJCQkJCSAgYnVmX2xlbik7CQkJCQorCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQlzbSA9ICh2b2lkICopYnVmICsgYnVmX3NpemUgLSBzaXplb2YoKnNtKTsKKwkJCWlmIChqZTMyX3RvX2NwdShzbS0+bWFnaWMpID09IEpGRlMyX1NVTV9NQUdJQykgeworCQkJCXN1bWxlbiA9IGMtPnNlY3Rvcl9zaXplIC0gamUzMl90b19jcHUoc20tPm9mZnNldCk7CisJCQkJc3VtcHRyID0gYnVmICsgYnVmX3NpemUgLSBzdW1sZW47CisKKwkJCQkvKiBOb3csIG1ha2Ugc3VyZSB0aGUgc3VtbWFyeSBpdHNlbGYgaXMgYXZhaWxhYmxlICovCisJCQkJaWYgKHN1bWxlbiA+IGJ1Zl9zaXplKSB7CisJCQkJCS8qIE5lZWQgdG8ga21hbGxvYyBmb3IgdGhpcy4gKi8KKwkJCQkJc3VtcHRyID0ga21hbGxvYyhzdW1sZW4sIEdGUF9LRVJORUwpOworCQkJCQlpZiAoIXN1bXB0cikKKwkJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCQltZW1jcHkoc3VtcHRyICsgc3VtbGVuIC0gYnVmX2xlbiwgYnVmICsgYnVmX3NpemUgLSBidWZfbGVuLCBidWZfbGVuKTsKKwkJCQl9CisJCQkJaWYgKGJ1Zl9sZW4gPCBzdW1sZW4pIHsKKwkJCQkJLyogTmVlZCB0byByZWFkIG1vcmUgc28gdGhhdCB0aGUgZW50aXJlIHN1bW1hcnkgbm9kZSBpcyBwcmVzZW50ICovCisJCQkJCWVyciA9IGpmZnMyX2ZpbGxfc2Nhbl9idWYoYywgc3VtcHRyLCAKKwkJCQkJCQkJICBqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0gc3VtbGVuLAorCQkJCQkJCQkgIHN1bWxlbiAtIGJ1Zl9sZW4pOwkJCQkKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBlcnI7CisJCQkJfQorCQkJfQorCiAJCX0KIAotCQlrZnJlZShzbSk7CisJCWlmIChzdW1wdHIpIHsKKwkJCWVyciA9IGpmZnMyX3N1bV9zY2FuX3N1bW5vZGUoYywgamViLCBzdW1wdHIsIHN1bWxlbiwgJnBzZXVkb19yYW5kb20pOwogCi0JCW9mcyA9IGplYi0+b2Zmc2V0OwotCQlwcmV2b2ZzID0gamViLT5vZmZzZXQgLSAxOworCQkJaWYgKGJ1Zl9zaXplICYmIHN1bWxlbiA+IGJ1Zl9zaXplKQorCQkJCWtmcmVlKHN1bXB0cik7CisJCQkvKiBJZiBpdCByZXR1cm5zIHdpdGggYSByZWFsIGVycm9yLCBiYWlsLiAKKwkJCSAgIElmIGl0IHJldHVybnMgcG9zaXRpdmUsIHRoYXQncyBhIGJsb2NrIGNsYXNzaWZpY2F0aW9uCisJCQkgICAoaS5lLiBCTEtfU1RBVEVfeHh4KSBzbyByZXR1cm4gdGhhdCB0b28uCisJCQkgICBJZiBpdCByZXR1cm5zIHplcm8sIGZhbGwgdGhyb3VnaCB0byBmdWxsIHNjYW4uICovCisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKIAlidWZfb2ZzID0gamViLT5vZmZzZXQ7CiAKIAlpZiAoIWJ1Zl9zaXplKSB7CisJCS8qIFRoaXMgaXMgdGhlIFhJUCBjYXNlIC0tIHdlJ3JlIHJlYWRpbmcgX2RpcmVjdGx5XyBmcm9tIHRoZSBmbGFzaCBjaGlwICovCiAJCWJ1Zl9sZW4gPSBjLT5zZWN0b3Jfc2l6ZTsKLQotCQlpZiAoamZmczJfc3VtX2FjdGl2ZSgpKSB7Ci0JCQkvKiBtdXN0IHJlcmVhZCBiZWNhdXNlIG9mIHN1bW1hcnkgdGVzdCAqLwotCQkJZXJyID0gamZmczJfZmlsbF9zY2FuX2J1ZihjLCBidWYsIGJ1Zl9vZnMsIGJ1Zl9sZW4pOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0KIAl9IGVsc2UgewogCQlidWZfbGVuID0gRU1QVFlfU0NBTl9TSVpFKGMtPnNlY3Rvcl9zaXplKTsKIAkJZXJyID0gamZmczJfZmlsbF9zY2FuX2J1ZihjLCBidWYsIGJ1Zl9vZnMsIGJ1Zl9sZW4pOwpAQCAtNDE4LDcgKzU2MiwxMCBAQAogCWlmIChvZnMpIHsKIAkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkZyZWUgc3BhY2UgYXQgJTA4eCBlbmRzIGF0ICUwOHhcbiIsIGplYi0+b2Zmc2V0LAogCQkJICBqZWItPm9mZnNldCArIG9mcykpOwotCQlESVJUWV9TUEFDRShvZnMpOworCQlpZiAoKGVyciA9IGpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoYywgamViLCAxKSkpCisJCQlyZXR1cm4gZXJyOworCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBvZnMpKSkKKwkJCXJldHVybiBlcnI7CiAJfQogCiAJLyogTm93IG9mcyBpcyBhIGNvbXBsZXRlIHBoeXNpY2FsIGZsYXNoIG9mZnNldCBhcyBpdCBhbHdheXMgd2FzLi4uICovCkBAIC00MzMsNiArNTgwLDExIEBACiAKIAkJamZmczJfZGJnX2FjY3RfcGFyYW5vaWFfY2hlY2tfbm9sb2NrKGMsIGplYik7CiAKKwkJLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBub2RlIHJlZnMgYXZhaWxhYmxlIGZvciB1c2UgKi8KKwkJZXJyID0gamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBqZWIsIDIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwogCQljb25kX3Jlc2NoZWQoKTsKIAogCQlpZiAob2ZzICYgMykgewpAQCAtNDQyLDcgKzU5NCw4IEBACiAJCX0KIAkJaWYgKG9mcyA9PSBwcmV2b2ZzKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJvZnMgMHglMDh4IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gU2tpcHBpbmdcbiIsIG9mcyk7Ci0JCQlESVJUWV9TUEFDRSg0KTsKKwkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIDQpKSkKKwkJCQlyZXR1cm4gZXJyOwogCQkJb2ZzICs9IDQ7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNDUxLDcgKzYwNCw4IEBACiAJCWlmIChqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIDwgb2ZzICsgc2l6ZW9mKCpub2RlKSkgewogCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkZld2VyIHRoYW4gJXpkIGJ5dGVzIGxlZnQgdG8gZW5kIG9mIGJsb2NrLiAoJXgrJXg8JXgrJXp4KSBOb3QgcmVhZGluZ1xuIiwgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpLAogCQkJCSAgamViLT5vZmZzZXQsIGMtPnNlY3Rvcl9zaXplLCBvZnMsIHNpemVvZigqbm9kZSkpKTsKLQkJCURJUlRZX1NQQUNFKChqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplKS1vZnMpOworCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgKGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUpLW9mcykpKQorCQkJCXJldHVybiBlcnI7CiAJCQlicmVhazsKIAkJfQogCkBAIC00ODEsNyArNjM1LDggQEAKIAkJCQlpZiAoKih1aW50MzJfdCAqKSgmYnVmW2luYnVmX29mc10pICE9IDB4ZmZmZmZmZmYpIHsKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRW1wdHkgZmxhc2ggYXQgMHglMDh4IGVuZHMgYXQgMHglMDh4XG4iLAogCQkJCQkgICAgICAgZW1wdHlfc3RhcnQsIG9mcyk7Ci0JCQkJCURJUlRZX1NQQUNFKG9mcy1lbXB0eV9zdGFydCk7CisJCQkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIG9mcy1lbXB0eV9zdGFydCkpKQorCQkJCQkJcmV0dXJuIGVycjsKIAkJCQkJZ290byBzY2FuX21vcmU7CiAJCQkJfQogCkBAIC00OTQsNyArNjQ5LDcgQEAKIAkJCS8qIElmIHdlJ3JlIG9ubHkgY2hlY2tpbmcgdGhlIGJlZ2lubmluZyBvZiBhIGJsb2NrIHdpdGggYSBjbGVhbm1hcmtlciwKIAkJCSAgIGJhaWwgbm93ICovCiAJCQlpZiAoYnVmX29mcyA9PSBqZWItPm9mZnNldCAmJiBqZWItPnVzZWRfc2l6ZSA9PSBQQUQoYy0+Y2xlYW5tYXJrZXJfc2l6ZSkgJiYKLQkJCSAgICBjLT5jbGVhbm1hcmtlcl9zaXplICYmICFqZWItPmRpcnR5X3NpemUgJiYgIWplYi0+Zmlyc3Rfbm9kZS0+bmV4dF9waHlzKSB7CisJCQkgICAgYy0+Y2xlYW5tYXJrZXJfc2l6ZSAmJiAhamViLT5kaXJ0eV9zaXplICYmICFyZWZfbmV4dChqZWItPmZpcnN0X25vZGUpKSB7CiAJCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIiVkIGJ5dGVzIGF0IHN0YXJ0IG9mIGJsb2NrIHNlZW1zIGNsZWFuLi4uIGFzc3VtaW5nIGFsbCBjbGVhblxuIiwgRU1QVFlfU0NBTl9TSVpFKGMtPnNlY3Rvcl9zaXplKSkpOwogCQkJCXJldHVybiBCTEtfU1RBVEVfQ0xFQU5NQVJLRVI7CiAJCQl9CkBAIC01MTgsMjAgKzY3MywyMyBAQAogCiAJCWlmIChvZnMgPT0gamViLT5vZmZzZXQgJiYgamUxNl90b19jcHUobm9kZS0+bWFnaWMpID09IEtTQU1USUJfQ0lHQU1fMlNGRkopIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1hZ2ljIGJpdG1hc2sgaXMgYmFja3dhcmRzIGF0IG9mZnNldCAweCUwOHguIFdyb25nIGVuZGlhbiBmaWxlc3lzdGVtP1xuIiwgb2ZzKTsKLQkJCURJUlRZX1NQQUNFKDQpOworCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgNCkpKQorCQkJCXJldHVybiBlcnI7CiAJCQlvZnMgKz0gNDsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChqZTE2X3RvX2NwdShub2RlLT5tYWdpYykgPT0gSkZGUzJfRElSVFlfQklUTUFTSykgewogCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkRpcnR5IGJpdG1hc2sgYXQgMHglMDh4XG4iLCBvZnMpKTsKLQkJCURJUlRZX1NQQUNFKDQpOworCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgNCkpKQorCQkJCXJldHVybiBlcnI7CiAJCQlvZnMgKz0gNDsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChqZTE2X3RvX2NwdShub2RlLT5tYWdpYykgPT0gSkZGUzJfT0xEX01BR0lDX0JJVE1BU0spIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk9sZCBKRkZTMiBiaXRtYXNrIGZvdW5kIGF0IDB4JTA4eFxuIiwgb2ZzKTsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIllvdSBjYW5ub3QgdXNlIG9sZGVyIEpGRlMyIGZpbGVzeXN0ZW1zIHdpdGggbmV3ZXIga2VybmVsc1xuIik7Ci0JCQlESVJUWV9TUEFDRSg0KTsKKwkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIDQpKSkKKwkJCQlyZXR1cm4gZXJyOwogCQkJb2ZzICs9IDQ7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNTQwLDcgKzY5OCw4IEBACiAJCQlub2lzeV9wcmludGsoJm5vaXNlLCAiamZmczJfc2Nhbl9lcmFzZWJsb2NrKCk6IE1hZ2ljIGJpdG1hc2sgMHglMDR4IG5vdCBmb3VuZCBhdCAweCUwOHg6IDB4JTA0eCBpbnN0ZWFkXG4iLAogCQkJCSAgICAgSkZGUzJfTUFHSUNfQklUTUFTSywgb2ZzLAogCQkJCSAgICAgamUxNl90b19jcHUobm9kZS0+bWFnaWMpKTsKLQkJCURJUlRZX1NQQUNFKDQpOworCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgNCkpKQorCQkJCXJldHVybiBlcnI7CiAJCQlvZnMgKz0gNDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC01NTcsNyArNzE2LDggQEAKIAkJCQkgICAgIGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbiksCiAJCQkJICAgICBqZTMyX3RvX2NwdShub2RlLT5oZHJfY3JjKSwKIAkJCQkgICAgIGhkcl9jcmMpOwotCQkJRElSVFlfU1BBQ0UoNCk7CisJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCA0KSkpCisJCQkJcmV0dXJuIGVycjsKIAkJCW9mcyArPSA0OwogCQkJY29udGludWU7CiAJCX0KQEAgLTU2OCw3ICs3MjgsOCBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm9kZSBhdCAweCUwOHggd2l0aCBsZW5ndGggMHglMDh4IHdvdWxkIHJ1biBvdmVyIHRoZSBlbmQgb2YgdGhlIGVyYXNlIGJsb2NrXG4iLAogCQkJICAgICAgIG9mcywgamUzMl90b19jcHUobm9kZS0+dG90bGVuKSk7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJQZXJoYXBzIHRoZSBmaWxlIHN5c3RlbSB3YXMgY3JlYXRlZCB3aXRoIHRoZSB3cm9uZyBlcmFzZSBzaXplP1xuIik7Ci0JCQlESVJUWV9TUEFDRSg0KTsKKwkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIDQpKSkKKwkJCQlyZXR1cm4gZXJyOwogCQkJb2ZzICs9IDQ7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNTc2LDcgKzczNyw4IEBACiAJCWlmICghKGplMTZfdG9fY3B1KG5vZGUtPm5vZGV0eXBlKSAmIEpGRlMyX05PREVfQUNDVVJBVEUpKSB7CiAJCQkvKiBXaGVlZS4gVGhpcyBpcyBhbiBvYnNvbGV0ZWQgbm9kZSAqLwogCQkJRDIocHJpbnRrKEtFUk5fREVCVUcgIk5vZGUgYXQgMHglMDh4IGlzIG9ic29sZXRlLiBTa2lwcGluZ1xuIiwgb2ZzKSk7Ci0JCQlESVJUWV9TUEFDRShQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSkpOworCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgUEFEKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpKSkpCisJCQkJcmV0dXJuIGVycjsKIAkJCW9mcyArPSBQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNjE0LDMwICs3NzYsNTkgQEAKIAkJCW9mcyArPSBQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSk7CiAJCQlicmVhazsKIAorI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgorCQljYXNlIEpGRlMyX05PREVUWVBFX1hBVFRSOgorCQkJaWYgKGJ1Zl9vZnMgKyBidWZfbGVuIDwgb2ZzICsgamUzMl90b19jcHUobm9kZS0+dG90bGVuKSkgeworCQkJCWJ1Zl9sZW4gPSBtaW5fdCh1aW50MzJfdCwgYnVmX3NpemUsIGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLSBvZnMpOworCQkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJGZXdlciB0aGFuICVkIGJ5dGVzICh4YXR0ciBub2RlKSIKKwkJCQkJICAiIGxlZnQgdG8gZW5kIG9mIGJ1Zi4gUmVhZGluZyAweCV4IGF0IDB4JTA4eFxuIiwKKwkJCQkJICBqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pLCBidWZfbGVuLCBvZnMpKTsKKwkJCQllcnIgPSBqZmZzMl9maWxsX3NjYW5fYnVmKGMsIGJ1Ziwgb2ZzLCBidWZfbGVuKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWJ1Zl9vZnMgPSBvZnM7CisJCQkJbm9kZSA9ICh2b2lkICopYnVmOworCQkJfQorCQkJZXJyID0gamZmczJfc2Nhbl94YXR0cl9ub2RlKGMsIGplYiwgKHZvaWQgKilub2RlLCBvZnMsIHMpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJb2ZzICs9IFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKTsKKwkJCWJyZWFrOworCQljYXNlIEpGRlMyX05PREVUWVBFX1hSRUY6CisJCQlpZiAoYnVmX29mcyArIGJ1Zl9sZW4gPCBvZnMgKyBqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKSB7CisJCQkJYnVmX2xlbiA9IG1pbl90KHVpbnQzMl90LCBidWZfc2l6ZSwgamViLT5vZmZzZXQgKyBjLT5zZWN0b3Jfc2l6ZSAtIG9mcyk7CisJCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkZld2VyIHRoYW4gJWQgYnl0ZXMgKHhyZWYgbm9kZSkiCisJCQkJCSAgIiBsZWZ0IHRvIGVuZCBvZiBidWYuIFJlYWRpbmcgMHgleCBhdCAweCUwOHhcbiIsCisJCQkJCSAgamUzMl90b19jcHUobm9kZS0+dG90bGVuKSwgYnVmX2xlbiwgb2ZzKSk7CisJCQkJZXJyID0gamZmczJfZmlsbF9zY2FuX2J1ZihjLCBidWYsIG9mcywgYnVmX2xlbik7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlidWZfb2ZzID0gb2ZzOworCQkJCW5vZGUgPSAodm9pZCAqKWJ1ZjsKKwkJCX0KKwkJCWVyciA9IGpmZnMyX3NjYW5feHJlZl9ub2RlKGMsIGplYiwgKHZvaWQgKilub2RlLCBvZnMsIHMpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJb2ZzICs9IFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKTsKKwkJCWJyZWFrOworI2VuZGlmCS8qIENPTkZJR19KRkZTMl9GU19YQVRUUiAqLworCiAJCWNhc2UgSkZGUzJfTk9ERVRZUEVfQ0xFQU5NQVJLRVI6CiAJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiQ0xFQU5NQVJLRVIgbm9kZSBmb3VuZCBhdCAweCUwOHhcbiIsIG9mcykpOwogCQkJaWYgKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikgIT0gYy0+Y2xlYW5tYXJrZXJfc2l6ZSkgewogCQkJCXByaW50ayhLRVJOX05PVElDRSAiQ0xFQU5NQVJLRVIgbm9kZSBmb3VuZCBhdCAweCUwOHggaGFzIHRvdGxlbiAweCV4ICE9IG5vcm1hbCAweCV4XG4iLAogCQkJCSAgICAgICBvZnMsIGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbiksIGMtPmNsZWFubWFya2VyX3NpemUpOwotCQkJCURJUlRZX1NQQUNFKFBBRChzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpKTsKKwkJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKSkpKQorCQkJCQlyZXR1cm4gZXJyOwogCQkJCW9mcyArPSBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKTsKIAkJCX0gZWxzZSBpZiAoamViLT5maXJzdF9ub2RlKSB7CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJDTEVBTk1BUktFUiBub2RlIGZvdW5kIGF0IDB4JTA4eCwgbm90IGZpcnN0IG5vZGUgaW4gYmxvY2sgKDB4JTA4eClcbiIsIG9mcywgamViLT5vZmZzZXQpOwotCQkJCURJUlRZX1NQQUNFKFBBRChzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpKTsKKwkJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKSkpKQorCQkJCQlyZXR1cm4gZXJyOwogCQkJCW9mcyArPSBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKTsKIAkJCX0gZWxzZSB7Ci0JCQkJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqbWFya2VyX3JlZiA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOwotCQkJCWlmICghbWFya2VyX3JlZikgewotCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkZhaWxlZCB0byBhbGxvY2F0ZSBub2RlIHJlZiBmb3IgY2xlYW4gbWFya2VyXG4iKTsKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJfQotCQkJCW1hcmtlcl9yZWYtPm5leHRfaW5faW5vID0gTlVMTDsKLQkJCQltYXJrZXJfcmVmLT5uZXh0X3BoeXMgPSBOVUxMOwotCQkJCW1hcmtlcl9yZWYtPmZsYXNoX29mZnNldCA9IG9mcyB8IFJFRl9OT1JNQUw7Ci0JCQkJbWFya2VyX3JlZi0+X190b3RsZW4gPSBjLT5jbGVhbm1hcmtlcl9zaXplOwotCQkJCWplYi0+Zmlyc3Rfbm9kZSA9IGplYi0+bGFzdF9ub2RlID0gbWFya2VyX3JlZjsKKwkJCQlqZmZzMl9saW5rX25vZGVfcmVmKGMsIGplYiwgb2ZzIHwgUkVGX05PUk1BTCwgYy0+Y2xlYW5tYXJrZXJfc2l6ZSwgTlVMTCk7CiAKLQkJCQlVU0VEX1NQQUNFKFBBRChjLT5jbGVhbm1hcmtlcl9zaXplKSk7CiAJCQkJb2ZzICs9IFBBRChjLT5jbGVhbm1hcmtlcl9zaXplKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNjQ1LDcgKzgzNiw4IEBACiAJCWNhc2UgSkZGUzJfTk9ERVRZUEVfUEFERElORzoKIAkJCWlmIChqZmZzMl9zdW1fYWN0aXZlKCkpCiAJCQkJamZmczJfc3VtX2FkZF9wYWRkaW5nX21lbShzLCBqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKTsKLQkJCURJUlRZX1NQQUNFKFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKSk7CisJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSkpKSkKKwkJCQlyZXR1cm4gZXJyOwogCQkJb2ZzICs9IFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKTsKIAkJCWJyZWFrOwogCkBAIC02NTYsNyArODQ4LDggQEAKIAkJCSAgICAgICAgYy0+ZmxhZ3MgfD0gSkZGUzJfU0JfRkxBR19STzsKIAkJCQlpZiAoIShqZmZzMl9pc19yZWFkb25seShjKSkpCiAJCQkJCXJldHVybiAtRVJPRlM7Ci0JCQkJRElSVFlfU1BBQ0UoUEFEKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpKTsKKwkJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSkpKSkKKwkJCQkJcmV0dXJuIGVycjsKIAkJCQlvZnMgKz0gUEFEKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpOwogCQkJCWJyZWFrOwogCkBAIC02NjYsMTUgKzg1OSwyMSBAQAogCiAJCQljYXNlIEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfREVMRVRFOgogCQkJCUQxKHByaW50ayhLRVJOX05PVElDRSAiVW5rbm93biBidXQgY29tcGF0aWJsZSBmZWF0dXJlIG5vZGUgKDB4JTA0eCkgZm91bmQgYXQgb2Zmc2V0IDB4JTA4eFxuIiwgamUxNl90b19jcHUobm9kZS0+bm9kZXR5cGUpLCBvZnMpKTsKLQkJCQlESVJUWV9TUEFDRShQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSkpOworCQkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKSkpKQorCQkJCQlyZXR1cm4gZXJyOwogCQkJCW9mcyArPSBQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSk7CiAJCQkJYnJlYWs7CiAKLQkJCWNhc2UgSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9DT1BZOgorCQkJY2FzZSBKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0NPUFk6IHsKIAkJCQlEMShwcmludGsoS0VSTl9OT1RJQ0UgIlVua25vd24gYnV0IGNvbXBhdGlibGUgZmVhdHVyZSBub2RlICgweCUwNHgpIGZvdW5kIGF0IG9mZnNldCAweCUwOHhcbiIsIGplMTZfdG9fY3B1KG5vZGUtPm5vZGV0eXBlKSwgb2ZzKSk7Ci0JCQkJVVNFRF9TUEFDRShQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSkpOworCisJCQkJamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIG9mcyB8IFJFRl9QUklTVElORSwgUEFEKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpLCBOVUxMKTsKKworCQkJCS8qIFdlIGNhbid0IHN1bW1hcmlzZSBub2RlcyB3ZSBkb24ndCBncm9rICovCisJCQkJamZmczJfc3VtX2Rpc2FibGVfY29sbGVjdGluZyhzKTsKIAkJCQlvZnMgKz0gUEFEKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpOwogCQkJCWJyZWFrOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTY4Nyw5ICs4ODYsOSBAQAogCQl9CiAJfQogCi0JRDEocHJpbnRrKEtFUk5fREVCVUcgIkJsb2NrIGF0IDB4JTA4eDogZnJlZSAweCUwOHgsIGRpcnR5IDB4JTA4eCwgdW5jaGVja2VkIDB4JTA4eCwgdXNlZCAweCUwOHhcbiIsIGplYi0+b2Zmc2V0LAotCQkgIGplYi0+ZnJlZV9zaXplLCBqZWItPmRpcnR5X3NpemUsIGplYi0+dW5jaGVja2VkX3NpemUsIGplYi0+dXNlZF9zaXplKSk7Ci0KKwlEMShwcmludGsoS0VSTl9ERUJVRyAiQmxvY2sgYXQgMHglMDh4OiBmcmVlIDB4JTA4eCwgZGlydHkgMHglMDh4LCB1bmNoZWNrZWQgMHglMDh4LCB1c2VkIDB4JTA4eCwgd2FzdGVkIDB4JTA4eFxuIiwKKwkJICBqZWItPm9mZnNldCxqZWItPmZyZWVfc2l6ZSwgamViLT5kaXJ0eV9zaXplLCBqZWItPnVuY2hlY2tlZF9zaXplLCBqZWItPnVzZWRfc2l6ZSwgamViLT53YXN0ZWRfc2l6ZSkpOworCQogCS8qIG1hcmtfbm9kZV9vYnNvbGV0ZSBjYW4gYWRkIHRvIHdhc3RlZCAhISAqLwogCWlmIChqZWItPndhc3RlZF9zaXplKSB7CiAJCWplYi0+ZGlydHlfc2l6ZSArPSBqZWItPndhc3RlZF9zaXplOwpAQCAtNzMwLDkgKzkyOSw5IEBACiBzdGF0aWMgaW50IGpmZnMyX3NjYW5faW5vZGVfbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKIAkJCQkgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmksIHVpbnQzMl90IG9mcywgc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMpCiB7Ci0Jc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3OwogCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWM7CiAJdWludDMyX3QgaW5vID0gamUzMl90b19jcHUocmktPmlubyk7CisJaW50IGVycjsKIAogCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9zY2FuX2lub2RlX25vZGUoKTogTm9kZSBhdCAweCUwOHhcbiIsIG9mcykpOwogCkBAIC03NDUsMTIgKzk0NCw2IEBACiAJICAgV2hpY2ggbWVhbnMgdGhhdCB0aGUgX2Z1bGxfIGFtb3VudCBvZiB0aW1lIHRvIGdldCB0byBwcm9wZXIgd3JpdGUgbW9kZSB3aXRoIEdDCiAJICAgb3BlcmF0aW9uYWwgbWF5IGFjdHVhbGx5IGJlIF9sb25nZXJfIHRoYW4gYmVmb3JlLiBTdWNrcyB0byBiZSBtZS4gKi8KIAotCXJhdyA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOwotCWlmICghcmF3KSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiamZmczJfc2Nhbl9pbm9kZV9ub2RlKCk6IGFsbG9jYXRpb24gb2Ygbm9kZSByZWZlcmVuY2UgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJaWMgPSBqZmZzMl9nZXRfaW5vX2NhY2hlKGMsIGlubyk7CiAJaWYgKCFpYykgewogCQkvKiBJbm9jYWNoZSBnZXQgZmFpbGVkLiBFaXRoZXIgd2UgcmVhZCBhIGJvZ3VzIGlubyMgb3IgaXQncyBqdXN0IGdlbnVpbmVseSB0aGUKQEAgLTc2MiwzMCArOTU1LDE3IEBACiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgImpmZnMyX3NjYW5faW5vZGVfbm9kZSgpOiBDUkMgZmFpbGVkIG9uIG5vZGUgYXQgMHglMDh4OiBSZWFkIDB4JTA4eCwgY2FsY3VsYXRlZCAweCUwOHhcbiIsCiAJCQkgICAgICAgb2ZzLCBqZTMyX3RvX2NwdShyaS0+bm9kZV9jcmMpLCBjcmMpOwogCQkJLyogV2UgYmVsaWV2ZSB0b3RsZW4gYmVjYXVzZSB0aGUgQ1JDIG9uIHRoZSBub2RlIF9oZWFkZXJfIHdhcyBPSywganVzdCB0aGUgbm9kZSBpdHNlbGYgZmFpbGVkLiAqLwotCQkJRElSVFlfU1BBQ0UoUEFEKGplMzJfdG9fY3B1KHJpLT50b3RsZW4pKSk7Ci0JCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOworCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgUEFEKGplMzJfdG9fY3B1KHJpLT50b3RsZW4pKSkpKQorCQkJCXJldHVybiBlcnI7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpYyA9IGpmZnMyX3NjYW5fbWFrZV9pbm9fY2FjaGUoYywgaW5vKTsKLQkJaWYgKCFpYykgewotCQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYocmF3KTsKKwkJaWYgKCFpYykKIAkJCXJldHVybiAtRU5PTUVNOwotCQl9CiAJfQogCiAJLyogV2hlZWUuIEl0IHdvcmtlZCAqLwotCi0JcmF3LT5mbGFzaF9vZmZzZXQgPSBvZnMgfCBSRUZfVU5DSEVDS0VEOwotCXJhdy0+X190b3RsZW4gPSBQQUQoamUzMl90b19jcHUocmktPnRvdGxlbikpOwotCXJhdy0+bmV4dF9waHlzID0gTlVMTDsKLQlyYXctPm5leHRfaW5faW5vID0gaWMtPm5vZGVzOwotCi0JaWMtPm5vZGVzID0gcmF3OwotCWlmICghamViLT5maXJzdF9ub2RlKQotCQlqZWItPmZpcnN0X25vZGUgPSByYXc7Ci0JaWYgKGplYi0+bGFzdF9ub2RlKQotCQlqZWItPmxhc3Rfbm9kZS0+bmV4dF9waHlzID0gcmF3OwotCWplYi0+bGFzdF9ub2RlID0gcmF3OworCWpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCBvZnMgfCBSRUZfVU5DSEVDS0VELCBQQUQoamUzMl90b19jcHUocmktPnRvdGxlbikpLCBpYyk7CiAKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiTm9kZSBpcyBpbm8gIyV1LCB2ZXJzaW9uICVkLiBSYW5nZSAweCV4LTB4JXhcbiIsCiAJCSAgamUzMl90b19jcHUocmktPmlubyksIGplMzJfdG9fY3B1KHJpLT52ZXJzaW9uKSwKQEAgLTc5NCw4ICs5NzQsNiBAQAogCiAJcHNldWRvX3JhbmRvbSArPSBqZTMyX3RvX2NwdShyaS0+dmVyc2lvbik7CiAKLQlVTkNIRUNLRURfU1BBQ0UoUEFEKGplMzJfdG9fY3B1KHJpLT50b3RsZW4pKSk7Ci0KIAlpZiAoamZmczJfc3VtX2FjdGl2ZSgpKSB7CiAJCWpmZnMyX3N1bV9hZGRfaW5vZGVfbWVtKHMsIHJpLCBvZnMgLSBqZWItPm9mZnNldCk7CiAJfQpAQCAtODA2LDEwICs5ODQsMTAgQEAKIHN0YXRpYyBpbnQgamZmczJfc2Nhbl9kaXJlbnRfbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKIAkJCQkgIHN0cnVjdCBqZmZzMl9yYXdfZGlyZW50ICpyZCwgdWludDMyX3Qgb2ZzLCBzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcykKIHsKLQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXc7CiAJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpmZDsKIAlzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljOwogCXVpbnQzMl90IGNyYzsKKwlpbnQgZXJyOwogCiAJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX3NjYW5fZGlyZW50X25vZGUoKTogTm9kZSBhdCAweCUwOHhcbiIsIG9mcykpOwogCkBAIC04MjEsNyArOTk5LDggQEAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJqZmZzMl9zY2FuX2RpcmVudF9ub2RlKCk6IE5vZGUgQ1JDIGZhaWxlZCBvbiBub2RlIGF0IDB4JTA4eDogUmVhZCAweCUwOHgsIGNhbGN1bGF0ZWQgMHglMDh4XG4iLAogCQkgICAgICAgb2ZzLCBqZTMyX3RvX2NwdShyZC0+bm9kZV9jcmMpLCBjcmMpOwogCQkvKiBXZSBiZWxpZXZlIHRvdGxlbiBiZWNhdXNlIHRoZSBDUkMgb24gdGhlIG5vZGUgX2hlYWRlcl8gd2FzIE9LLCBqdXN0IHRoZSBub2RlIGl0c2VsZiBmYWlsZWQuICovCi0JCURJUlRZX1NQQUNFKFBBRChqZTMyX3RvX2NwdShyZC0+dG90bGVuKSkpOworCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBQQUQoamUzMl90b19jcHUocmQtPnRvdGxlbikpKSkpCisJCQlyZXR1cm4gZXJyOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTg0Miw0MCArMTAyMSwyMyBAQAogCQlqZmZzMl9mcmVlX2Z1bGxfZGlyZW50KGZkKTsKIAkJLyogRklYTUU6IFdoeSBkbyB3ZSBiZWxpZXZlIHRvdGxlbj8gKi8KIAkJLyogV2UgYmVsaWV2ZSB0b3RsZW4gYmVjYXVzZSB0aGUgQ1JDIG9uIHRoZSBub2RlIF9oZWFkZXJfIHdhcyBPSywganVzdCB0aGUgbmFtZSBmYWlsZWQuICovCi0JCURJUlRZX1NQQUNFKFBBRChqZTMyX3RvX2NwdShyZC0+dG90bGVuKSkpOworCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBQQUQoamUzMl90b19jcHUocmQtPnRvdGxlbikpKSkpCisJCQlyZXR1cm4gZXJyOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmF3ID0gamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCk7Ci0JaWYgKCFyYXcpIHsKLQkJamZmczJfZnJlZV9mdWxsX2RpcmVudChmZCk7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiamZmczJfc2Nhbl9kaXJlbnRfbm9kZSgpOiBhbGxvY2F0aW9uIG9mIG5vZGUgcmVmZXJlbmNlIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KIAlpYyA9IGpmZnMyX3NjYW5fbWFrZV9pbm9fY2FjaGUoYywgamUzMl90b19jcHUocmQtPnBpbm8pKTsKIAlpZiAoIWljKSB7CiAJCWpmZnMyX2ZyZWVfZnVsbF9kaXJlbnQoZmQpOwotCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyYXctPl9fdG90bGVuID0gUEFEKGplMzJfdG9fY3B1KHJkLT50b3RsZW4pKTsKLQlyYXctPmZsYXNoX29mZnNldCA9IG9mcyB8IFJFRl9QUklTVElORTsKLQlyYXctPm5leHRfcGh5cyA9IE5VTEw7Ci0JcmF3LT5uZXh0X2luX2lubyA9IGljLT5ub2RlczsKLQlpYy0+bm9kZXMgPSByYXc7Ci0JaWYgKCFqZWItPmZpcnN0X25vZGUpCi0JCWplYi0+Zmlyc3Rfbm9kZSA9IHJhdzsKLQlpZiAoamViLT5sYXN0X25vZGUpCi0JCWplYi0+bGFzdF9ub2RlLT5uZXh0X3BoeXMgPSByYXc7Ci0JamViLT5sYXN0X25vZGUgPSByYXc7CisJZmQtPnJhdyA9IGpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCBvZnMgfCBSRUZfUFJJU1RJTkUsIFBBRChqZTMyX3RvX2NwdShyZC0+dG90bGVuKSksIGljKTsKIAotCWZkLT5yYXcgPSByYXc7CiAJZmQtPm5leHQgPSBOVUxMOwogCWZkLT52ZXJzaW9uID0gamUzMl90b19jcHUocmQtPnZlcnNpb24pOwogCWZkLT5pbm8gPSBqZTMyX3RvX2NwdShyZC0+aW5vKTsKIAlmZC0+bmhhc2ggPSBmdWxsX25hbWVfaGFzaChmZC0+bmFtZSwgcmQtPm5zaXplKTsKIAlmZC0+dHlwZSA9IHJkLT50eXBlOwotCVVTRURfU1BBQ0UoUEFEKGplMzJfdG9fY3B1KHJkLT50b3RsZW4pKSk7CiAJamZmczJfYWRkX2ZkX3RvX2xpc3QoYywgZmQsICZpYy0+c2Nhbl9kZW50cyk7CiAKIAlpZiAoamZmczJfc3VtX2FjdGl2ZSgpKSB7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zZWN1cml0eS5jIGIvZnMvamZmczIvc2VjdXJpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmE5ODk0Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvamZmczIvc2VjdXJpdHkuYwpAQCAtMCwwICsxLDgyIEBACisvKgorICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIE5FQyBDb3Jwb3JhdGlvbgorICoKKyAqIENyZWF0ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KKyAqCisgKiBGb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZpbGUgJ0xJQ0VOQ0UnIGluIHRoaXMgZGlyZWN0b3J5LgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvamZmczIuaD4KKyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgIm5vZGVsaXN0LmgiCisKKy8qIC0tLS0gSW5pdGlhbCBTZWN1cml0eSBMYWJlbCBBdHRhY2htZW50IC0tLS0tLS0tLS0tLS0tICovCitpbnQgamZmczJfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcikKK3sKKwlpbnQgcmM7CisJc2l6ZV90IGxlbjsKKwl2b2lkICp2YWx1ZTsKKwljaGFyICpuYW1lOworCisJcmMgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsICZuYW1lLCAmdmFsdWUsICZsZW4pOworCWlmIChyYykgeworCQlpZiAocmMgPT0gLUVPUE5PVFNVUFApCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHJjOworCX0KKwlyYyA9IGRvX2pmZnMyX3NldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJFRklYX1NFQ1VSSVRZLCBuYW1lLCB2YWx1ZSwgbGVuLCAwKTsKKworICAgICAgICBrZnJlZShuYW1lKTsKKyAgICAgICAga2ZyZWUodmFsdWUpOworICAgICAgICByZXR1cm4gcmM7Cit9CisKKy8qIC0tLS0gWEFUVFIgSGFuZGxlciBmb3IgInNlY3VyaXR5LioiIC0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGpmZnMyX3NlY3VyaXR5X2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAiIikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGRvX2pmZnMyX2dldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJFRklYX1NFQ1VSSVRZLCBuYW1lLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGpmZnMyX3NlY3VyaXR5X3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCWlmICghc3RyY21wKG5hbWUsICIiKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZG9famZmczJfc2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfU0VDVVJJVFksIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOworfQorCitzdGF0aWMgc2l6ZV90IGpmZnMyX3NlY3VyaXR5X2xpc3R4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCit7CisJc2l6ZV90IHJldGxlbiA9IFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4gKyBuYW1lX2xlbiArIDE7CisKKwlpZiAobGlzdCAmJiByZXRsZW4gPD0gbGlzdF9zaXplKSB7CisJCXN0cmNweShsaXN0LCBYQVRUUl9TRUNVUklUWV9QUkVGSVgpOworCQlzdHJjcHkobGlzdCArIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4sIG5hbWUpOworCX0KKworCXJldHVybiByZXRsZW47Cit9CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIGpmZnMyX3NlY3VyaXR5X3hhdHRyX2hhbmRsZXIgPSB7CisJLnByZWZpeCA9IFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCwKKwkubGlzdCA9IGpmZnMyX3NlY3VyaXR5X2xpc3R4YXR0ciwKKwkuc2V0ID0gamZmczJfc2VjdXJpdHlfc2V0eGF0dHIsCisJLmdldCA9IGpmZnMyX3NlY3VyaXR5X2dldHhhdHRyCit9OwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvc3VtbWFyeS5jIGIvZnMvamZmczIvc3VtbWFyeS5jCmluZGV4IGZiOWNlYzYuLjBiMDJmYzcgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3N1bW1hcnkuYworKysgYi9mcy9qZmZzMi9zdW1tYXJ5LmMKQEAgLTUsNiArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgIFpvbHRhbiBTb2dvciA8d2V0aEBpbmYudS1zemVnZWQuaHU+LAogICogICAgICAgICAgICAgICAgICAgICBQYXRyaWsgS2x1YmEgPHBhamtvQGhhbG9tLnUtc3plZ2VkLmh1PiwKICAqICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0eSBvZiBTemVnZWQsIEh1bmdhcnkKKyAqICAgICAgICAgICAgICAgMjAwNSAgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KICAqCiAgKiBGb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZpbGUgJ0xJQ0VOQ0UnIGluIHRoaXMgZGlyZWN0b3J5LgogICoKQEAgLTgxLDYgKzgyLDE5IEBACiAJCQlkYmdfc3VtbWFyeSgiZGlyZW50ICgldSkgYWRkZWQgdG8gc3VtbWFyeVxuIiwKIAkJCQkJCWplMzJfdG9fY3B1KGl0ZW0tPmQuaW5vKSk7CiAJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKwkJY2FzZSBKRkZTMl9OT0RFVFlQRV9YQVRUUjoKKwkJCXMtPnN1bV9zaXplICs9IEpGRlMyX1NVTU1BUllfWEFUVFJfU0laRTsKKwkJCXMtPnN1bV9udW0rKzsKKwkJCWRiZ19zdW1tYXJ5KCJ4YXR0ciAoeGlkPSV1LCB2ZXJzaW9uPSV1KSBhZGRlZCB0byBzdW1tYXJ5XG4iLAorCQkJCSAgICBqZTMyX3RvX2NwdShpdGVtLT54LnhpZCksIGplMzJfdG9fY3B1KGl0ZW0tPngudmVyc2lvbikpOworCQkJYnJlYWs7CisJCWNhc2UgSkZGUzJfTk9ERVRZUEVfWFJFRjoKKwkJCXMtPnN1bV9zaXplICs9IEpGRlMyX1NVTU1BUllfWFJFRl9TSVpFOworCQkJcy0+c3VtX251bSsrOworCQkJZGJnX3N1bW1hcnkoInhyZWYgYWRkZWQgdG8gc3VtbWFyeVxuIik7CisJCQlicmVhazsKKyNlbmRpZgogCQlkZWZhdWx0OgogCQkJSkZGUzJfV0FSTklORygiVU5LTk9XTiBub2RlIHR5cGUgJXVcbiIsCiAJCQkJCSAgICBqZTE2X3RvX2NwdShpdGVtLT51Lm5vZGV0eXBlKSk7CkBAIC0xNDEsNiArMTU1LDQwIEBACiAJcmV0dXJuIGpmZnMyX3N1bV9hZGRfbWVtKHMsICh1bmlvbiBqZmZzMl9zdW1fbWVtICopdGVtcCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKK2ludCBqZmZzMl9zdW1fYWRkX3hhdHRyX21lbShzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcywgc3RydWN0IGpmZnMyX3Jhd194YXR0ciAqcngsIHVpbnQzMl90IG9mcykKK3sKKwlzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX21lbSAqdGVtcDsKKworCXRlbXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX21lbSksIEdGUF9LRVJORUwpOworCWlmICghdGVtcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0ZW1wLT5ub2RldHlwZSA9IHJ4LT5ub2RldHlwZTsKKwl0ZW1wLT54aWQgPSByeC0+eGlkOworCXRlbXAtPnZlcnNpb24gPSByeC0+dmVyc2lvbjsKKwl0ZW1wLT5vZmZzZXQgPSBjcHVfdG9famUzMihvZnMpOworCXRlbXAtPnRvdGxlbiA9IHJ4LT50b3RsZW47CisJdGVtcC0+bmV4dCA9IE5VTEw7CisKKwlyZXR1cm4gamZmczJfc3VtX2FkZF9tZW0ocywgKHVuaW9uIGpmZnMyX3N1bV9tZW0gKil0ZW1wKTsKK30KKworaW50IGpmZnMyX3N1bV9hZGRfeHJlZl9tZW0oc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMsIHN0cnVjdCBqZmZzMl9yYXdfeHJlZiAqcnIsIHVpbnQzMl90IG9mcykKK3sKKwlzdHJ1Y3QgamZmczJfc3VtX3hyZWZfbWVtICp0ZW1wOworCisJdGVtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1feHJlZl9tZW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRlbXApCisJCXJldHVybiAtRU5PTUVNOworCisJdGVtcC0+bm9kZXR5cGUgPSByci0+bm9kZXR5cGU7CisJdGVtcC0+b2Zmc2V0ID0gY3B1X3RvX2plMzIob2ZzKTsKKwl0ZW1wLT5uZXh0ID0gTlVMTDsKKworCXJldHVybiBqZmZzMl9zdW1fYWRkX21lbShzLCAodW5pb24gamZmczJfc3VtX21lbSAqKXRlbXApOworfQorI2VuZGlmCiAvKiBDbGVhbnVwIGV2ZXJ5IGNvbGxlY3RlZCBzdW1tYXJ5IGluZm9ybWF0aW9uICovCiAKIHN0YXRpYyB2b2lkIGpmZnMyX3N1bV9jbGVhbl9jb2xsZWN0ZWQoc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMpCkBAIC0yNTksNyArMzA3LDQwIEBACiAKIAkJCXJldHVybiBqZmZzMl9zdW1fYWRkX21lbShjLT5zdW1tYXJ5LCAodW5pb24gamZmczJfc3VtX21lbSAqKXRlbXApOwogCQl9CisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCisJCWNhc2UgSkZGUzJfTk9ERVRZUEVfWEFUVFI6IHsKKwkJCXN0cnVjdCBqZmZzMl9zdW1feGF0dHJfbWVtICp0ZW1wOworCQkJaWYgKGplMzJfdG9fY3B1KG5vZGUtPngudmVyc2lvbikgPT0gMHhmZmZmZmZmZikKKwkJCQlyZXR1cm4gMDsKKwkJCXRlbXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX21lbSksIEdGUF9LRVJORUwpOworCQkJaWYgKCF0ZW1wKQorCQkJCWdvdG8gbm9fbWVtOwogCisJCQl0ZW1wLT5ub2RldHlwZSA9IG5vZGUtPngubm9kZXR5cGU7CisJCQl0ZW1wLT54aWQgPSBub2RlLT54LnhpZDsKKwkJCXRlbXAtPnZlcnNpb24gPSBub2RlLT54LnZlcnNpb247CisJCQl0ZW1wLT50b3RsZW4gPSBub2RlLT54LnRvdGxlbjsKKwkJCXRlbXAtPm9mZnNldCA9IGNwdV90b19qZTMyKG9mcyk7CisJCQl0ZW1wLT5uZXh0ID0gTlVMTDsKKworCQkJcmV0dXJuIGpmZnMyX3N1bV9hZGRfbWVtKGMtPnN1bW1hcnksICh1bmlvbiBqZmZzMl9zdW1fbWVtICopdGVtcCk7CisJCX0KKwkJY2FzZSBKRkZTMl9OT0RFVFlQRV9YUkVGOiB7CisJCQlzdHJ1Y3QgamZmczJfc3VtX3hyZWZfbWVtICp0ZW1wOworCisJCQlpZiAoamUzMl90b19jcHUobm9kZS0+ci5pbm8pID09IDB4ZmZmZmZmZmYKKwkJCSAgICAmJiBqZTMyX3RvX2NwdShub2RlLT5yLnhpZCkgPT0gMHhmZmZmZmZmZikKKwkJCQlyZXR1cm4gMDsKKwkJCXRlbXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtX3hyZWZfbWVtKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXRlbXApCisJCQkJZ290byBub19tZW07CisJCQl0ZW1wLT5ub2RldHlwZSA9IG5vZGUtPnIubm9kZXR5cGU7CisJCQl0ZW1wLT5vZmZzZXQgPSBjcHVfdG9famUzMihvZnMpOworCQkJdGVtcC0+bmV4dCA9IE5VTEw7CisKKwkJCXJldHVybiBqZmZzMl9zdW1fYWRkX21lbShjLT5zdW1tYXJ5LCAodW5pb24gamZmczJfc3VtX21lbSAqKXRlbXApOworCQl9CisjZW5kaWYKIAkJY2FzZSBKRkZTMl9OT0RFVFlQRV9QQURESU5HOgogCQkJZGJnX3N1bW1hcnkoIm5vZGUgUEFERElOR1xuIik7CiAJCQljLT5zdW1tYXJ5LT5zdW1fcGFkZGVkICs9IGplMzJfdG9fY3B1KG5vZGUtPnUudG90bGVuKTsKQEAgLTI4OCwyMyArMzY5LDQxIEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpzdW1fbGlua19ub2RlX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkJCSAgICBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAorCQkJCQkJICAgIHVpbnQzMl90IG9mcywgdWludDMyX3QgbGVuLAorCQkJCQkJICAgIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMpCit7CisJLyogSWYgdGhlcmUgd2FzIGEgZ2FwLCBtYXJrIGl0IGRpcnR5ICovCisJaWYgKChvZnMgJiB+MykgPiBjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplKSB7CisJCS8qIEV3LiBTdW1tYXJ5IGRvZXNuJ3QgYWN0dWFsbHkgdGVsbCB1cyBleHBsaWNpdGx5IGFib3V0IGRpcnR5IHNwYWNlICovCisJCWpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCAob2ZzICYgfjMpIC0gKGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemUpKTsKKwl9CisKKwlyZXR1cm4gamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIGplYi0+b2Zmc2V0ICsgb2ZzLCBsZW4sIGljKTsKK30KIAogLyogUHJvY2VzcyB0aGUgc3RvcmVkIHN1bW1hcnkgaW5mb3JtYXRpb24gLSBoZWxwZXIgZnVuY3Rpb24gZm9yIGpmZnMyX3N1bV9zY2FuX3N1bW5vZGUoKSAqLwogCiBzdGF0aWMgaW50IGpmZnMyX3N1bV9wcm9jZXNzX3N1bV9kYXRhKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAogCQkJCXN0cnVjdCBqZmZzMl9yYXdfc3VtbWFyeSAqc3VtbWFyeSwgdWludDMyX3QgKnBzZXVkb19yYW5kb20pCiB7Ci0Jc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3OwogCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWM7CiAJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpmZDsKIAl2b2lkICpzcDsKIAlpbnQgaSwgaW5vOworCWludCBlcnI7CiAKIAlzcCA9IHN1bW1hcnktPnN1bTsKIAogCWZvciAoaT0wOyBpPGplMzJfdG9fY3B1KHN1bW1hcnktPnN1bV9udW0pOyBpKyspIHsKIAkJZGJnX3N1bW1hcnkoInByb2Nlc3Npbmcgc3VtbWFyeSBpbmRleCAlZFxuIiwgaSk7CiAKKwkJLyogTWFrZSBzdXJlIHRoZXJlJ3MgYSBzcGFyZSByZWYgZm9yIGRpcnR5IHNwYWNlICovCisJCWVyciA9IGpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoYywgamViLCAyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKIAkJc3dpdGNoIChqZTE2X3RvX2NwdSgoKHN0cnVjdCBqZmZzMl9zdW1fdW5rbm93bl9mbGFzaCAqKXNwKS0+bm9kZXR5cGUpKSB7CiAJCQljYXNlIEpGRlMyX05PREVUWVBFX0lOT0RFOiB7CiAJCQkJc3RydWN0IGpmZnMyX3N1bV9pbm9kZV9mbGFzaCAqc3BpOwpAQCAtMzEyLDM5ICs0MTEsMjEgQEAKIAogCQkJCWlubyA9IGplMzJfdG9fY3B1KHNwaS0+aW5vZGUpOwogCi0JCQkJZGJnX3N1bW1hcnkoIklub2RlIGF0IDB4JTA4eFxuIiwKLQkJCQkJCQlqZWItPm9mZnNldCArIGplMzJfdG9fY3B1KHNwaS0+b2Zmc2V0KSk7Ci0KLQkJCQlyYXcgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKTsKLQkJCQlpZiAoIXJhdykgewotCQkJCQlKRkZTMl9OT1RJQ0UoImFsbG9jYXRpb24gb2Ygbm9kZSByZWZlcmVuY2UgZmFpbGVkXG4iKTsKLQkJCQkJa2ZyZWUoc3VtbWFyeSk7Ci0JCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCX0KKwkJCQlkYmdfc3VtbWFyeSgiSW5vZGUgYXQgMHglMDh4LTB4JTA4eFxuIiwKKwkJCQkJICAgIGplYi0+b2Zmc2V0ICsgamUzMl90b19jcHUoc3BpLT5vZmZzZXQpLAorCQkJCQkgICAgamViLT5vZmZzZXQgKyBqZTMyX3RvX2NwdShzcGktPm9mZnNldCkgKyBqZTMyX3RvX2NwdShzcGktPnRvdGxlbikpOwogCiAJCQkJaWMgPSBqZmZzMl9zY2FuX21ha2VfaW5vX2NhY2hlKGMsIGlubyk7CiAJCQkJaWYgKCFpYykgewogCQkJCQlKRkZTMl9OT1RJQ0UoInNjYW5fbWFrZV9pbm9fY2FjaGUgZmFpbGVkXG4iKTsKLQkJCQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYocmF3KTsKLQkJCQkJa2ZyZWUoc3VtbWFyeSk7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KIAotCQkJCXJhdy0+Zmxhc2hfb2Zmc2V0ID0gKGplYi0+b2Zmc2V0ICsgamUzMl90b19jcHUoc3BpLT5vZmZzZXQpKSB8IFJFRl9VTkNIRUNLRUQ7Ci0JCQkJcmF3LT5fX3RvdGxlbiA9IFBBRChqZTMyX3RvX2NwdShzcGktPnRvdGxlbikpOwotCQkJCXJhdy0+bmV4dF9waHlzID0gTlVMTDsKLQkJCQlyYXctPm5leHRfaW5faW5vID0gaWMtPm5vZGVzOworCQkJCXN1bV9saW5rX25vZGVfcmVmKGMsIGplYiwgamUzMl90b19jcHUoc3BpLT5vZmZzZXQpIHwgUkVGX1VOQ0hFQ0tFRCwKKwkJCQkJCSAgUEFEKGplMzJfdG9fY3B1KHNwaS0+dG90bGVuKSksIGljKTsKIAotCQkJCWljLT5ub2RlcyA9IHJhdzsKLQkJCQlpZiAoIWplYi0+Zmlyc3Rfbm9kZSkKLQkJCQkJamViLT5maXJzdF9ub2RlID0gcmF3OwotCQkJCWlmIChqZWItPmxhc3Rfbm9kZSkKLQkJCQkJamViLT5sYXN0X25vZGUtPm5leHRfcGh5cyA9IHJhdzsKLQkJCQlqZWItPmxhc3Rfbm9kZSA9IHJhdzsKIAkJCQkqcHNldWRvX3JhbmRvbSArPSBqZTMyX3RvX2NwdShzcGktPnZlcnNpb24pOwogCi0JCQkJVU5DSEVDS0VEX1NQQUNFKFBBRChqZTMyX3RvX2NwdShzcGktPnRvdGxlbikpKTsKLQogCQkJCXNwICs9IEpGRlMyX1NVTU1BUllfSU5PREVfU0laRTsKIAogCQkJCWJyZWFrOwpAQCAtMzU0LDUyICs0MzUsMzMgQEAKIAkJCQlzdHJ1Y3QgamZmczJfc3VtX2RpcmVudF9mbGFzaCAqc3BkOwogCQkJCXNwZCA9IHNwOwogCi0JCQkJZGJnX3N1bW1hcnkoIkRpcmVudCBhdCAweCUwOHhcbiIsCi0JCQkJCQkJamViLT5vZmZzZXQgKyBqZTMyX3RvX2NwdShzcGQtPm9mZnNldCkpOworCQkJCWRiZ19zdW1tYXJ5KCJEaXJlbnQgYXQgMHglMDh4LTB4JTA4eFxuIiwKKwkJCQkJICAgIGplYi0+b2Zmc2V0ICsgamUzMl90b19jcHUoc3BkLT5vZmZzZXQpLAorCQkJCQkgICAgamViLT5vZmZzZXQgKyBqZTMyX3RvX2NwdShzcGQtPm9mZnNldCkgKyBqZTMyX3RvX2NwdShzcGQtPnRvdGxlbikpOworCiAKIAkJCQlmZCA9IGpmZnMyX2FsbG9jX2Z1bGxfZGlyZW50KHNwZC0+bnNpemUrMSk7Ci0JCQkJaWYgKCFmZCkgewotCQkJCQlrZnJlZShzdW1tYXJ5KTsKKwkJCQlpZiAoIWZkKQogCQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCQl9CiAKIAkJCQltZW1jcHkoJmZkLT5uYW1lLCBzcGQtPm5hbWUsIHNwZC0+bnNpemUpOwogCQkJCWZkLT5uYW1lW3NwZC0+bnNpemVdID0gMDsKIAotCQkJCXJhdyA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOwotCQkJCWlmICghcmF3KSB7Ci0JCQkJCWpmZnMyX2ZyZWVfZnVsbF9kaXJlbnQoZmQpOwotCQkJCQlKRkZTMl9OT1RJQ0UoImFsbG9jYXRpb24gb2Ygbm9kZSByZWZlcmVuY2UgZmFpbGVkXG4iKTsKLQkJCQkJa2ZyZWUoc3VtbWFyeSk7Ci0JCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCX0KLQogCQkJCWljID0gamZmczJfc2Nhbl9tYWtlX2lub19jYWNoZShjLCBqZTMyX3RvX2NwdShzcGQtPnBpbm8pKTsKIAkJCQlpZiAoIWljKSB7CiAJCQkJCWpmZnMyX2ZyZWVfZnVsbF9kaXJlbnQoZmQpOwotCQkJCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOwotCQkJCQlrZnJlZShzdW1tYXJ5KTsKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQogCi0JCQkJcmF3LT5fX3RvdGxlbiA9IFBBRChqZTMyX3RvX2NwdShzcGQtPnRvdGxlbikpOwotCQkJCXJhdy0+Zmxhc2hfb2Zmc2V0ID0gKGplYi0+b2Zmc2V0ICsgamUzMl90b19jcHUoc3BkLT5vZmZzZXQpKSB8IFJFRl9QUklTVElORTsKLQkJCQlyYXctPm5leHRfcGh5cyA9IE5VTEw7Ci0JCQkJcmF3LT5uZXh0X2luX2lubyA9IGljLT5ub2RlczsKLQkJCQlpYy0+bm9kZXMgPSByYXc7Ci0JCQkJaWYgKCFqZWItPmZpcnN0X25vZGUpCi0JCQkJCWplYi0+Zmlyc3Rfbm9kZSA9IHJhdzsKLQkJCQlpZiAoamViLT5sYXN0X25vZGUpCi0JCQkJCWplYi0+bGFzdF9ub2RlLT5uZXh0X3BoeXMgPSByYXc7Ci0JCQkJamViLT5sYXN0X25vZGUgPSByYXc7CisJCQkJZmQtPnJhdyA9IHN1bV9saW5rX25vZGVfcmVmKGMsIGplYiwgIGplMzJfdG9fY3B1KHNwZC0+b2Zmc2V0KSB8IFJFRl9VTkNIRUNLRUQsCisJCQkJCQkJICAgIFBBRChqZTMyX3RvX2NwdShzcGQtPnRvdGxlbikpLCBpYyk7CiAKLQkJCQlmZC0+cmF3ID0gcmF3OwogCQkJCWZkLT5uZXh0ID0gTlVMTDsKIAkJCQlmZC0+dmVyc2lvbiA9IGplMzJfdG9fY3B1KHNwZC0+dmVyc2lvbik7CiAJCQkJZmQtPmlubyA9IGplMzJfdG9fY3B1KHNwZC0+aW5vKTsKIAkJCQlmZC0+bmhhc2ggPSBmdWxsX25hbWVfaGFzaChmZC0+bmFtZSwgc3BkLT5uc2l6ZSk7CiAJCQkJZmQtPnR5cGUgPSBzcGQtPnR5cGU7Ci0JCQkJVVNFRF9TUEFDRShQQUQoamUzMl90b19jcHUoc3BkLT50b3RsZW4pKSk7CisKIAkJCQlqZmZzMl9hZGRfZmRfdG9fbGlzdChjLCBmZCwgJmljLT5zY2FuX2RlbnRzKTsKIAogCQkJCSpwc2V1ZG9fcmFuZG9tICs9IGplMzJfdG9fY3B1KHNwZC0+dmVyc2lvbik7CkBAIC00MDgsNDggKzQ3MCwxMDUgQEAKIAogCQkJCWJyZWFrOwogCQkJfQorI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgorCQkJY2FzZSBKRkZTMl9OT0RFVFlQRV9YQVRUUjogeworCQkJCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisJCQkJc3RydWN0IGpmZnMyX3N1bV94YXR0cl9mbGFzaCAqc3B4OwogCisJCQkJc3B4ID0gKHN0cnVjdCBqZmZzMl9zdW1feGF0dHJfZmxhc2ggKilzcDsKKwkJCQlkYmdfc3VtbWFyeSgieGF0dHIgYXQgJSMwOHgtJSMwOHggKHhpZD0ldSwgdmVyc2lvbj0ldSlcbiIsIAorCQkJCQkgICAgamViLT5vZmZzZXQgKyBqZTMyX3RvX2NwdShzcHgtPm9mZnNldCksCisJCQkJCSAgICBqZWItPm9mZnNldCArIGplMzJfdG9fY3B1KHNweC0+b2Zmc2V0KSArIGplMzJfdG9fY3B1KHNweC0+dG90bGVuKSwKKwkJCQkJICAgIGplMzJfdG9fY3B1KHNweC0+eGlkKSwgamUzMl90b19jcHUoc3B4LT52ZXJzaW9uKSk7CisKKwkJCQl4ZCA9IGpmZnMyX3NldHVwX3hhdHRyX2RhdHVtKGMsIGplMzJfdG9fY3B1KHNweC0+eGlkKSwKKwkJCQkJCQkJamUzMl90b19jcHUoc3B4LT52ZXJzaW9uKSk7CisJCQkJaWYgKElTX0VSUih4ZCkpIHsKKwkJCQkJaWYgKFBUUl9FUlIoeGQpID09IC1FRVhJU1QpIHsKKwkJCQkJCS8qIGEgbmV3ZXIgdmVyc2lvbiBvZiB4ZCBleGlzdHMgKi8KKwkJCQkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIGplMzJfdG9fY3B1KHNweC0+dG90bGVuKSkpKQorCQkJCQkJCXJldHVybiBlcnI7CisJCQkJCQlzcCArPSBKRkZTMl9TVU1NQVJZX1hBVFRSX1NJWkU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlKRkZTMl9OT1RJQ0UoImFsbG9jYXRpb24gb2YgeGF0dHJfZGF0dW0gZmFpbGVkXG4iKTsKKwkJCQkJcmV0dXJuIFBUUl9FUlIoeGQpOworCQkJCX0KKworCQkJCXhkLT5ub2RlID0gc3VtX2xpbmtfbm9kZV9yZWYoYywgamViLCBqZTMyX3RvX2NwdShzcHgtPm9mZnNldCkgfCBSRUZfVU5DSEVDS0VELAorCQkJCQkJCSAgICAgUEFEKGplMzJfdG9fY3B1KHNweC0+dG90bGVuKSksIE5VTEwpOworCQkJCS8qIEZJWE1FICovIHhkLT5ub2RlLT5uZXh0X2luX2lubyA9ICh2b2lkICopeGQ7CisKKwkJCQkqcHNldWRvX3JhbmRvbSArPSBqZTMyX3RvX2NwdShzcHgtPnhpZCk7CisJCQkJc3AgKz0gSkZGUzJfU1VNTUFSWV9YQVRUUl9TSVpFOworCisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIEpGRlMyX05PREVUWVBFX1hSRUY6IHsKKwkJCQlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWY7CisJCQkJc3RydWN0IGpmZnMyX3N1bV94cmVmX2ZsYXNoICpzcHI7CisKKwkJCQlzcHIgPSAoc3RydWN0IGpmZnMyX3N1bV94cmVmX2ZsYXNoICopc3A7CisJCQkJZGJnX3N1bW1hcnkoInhyZWYgYXQgJSMwOHgtJSMwOHhcbiIsCisJCQkJCSAgICBqZWItPm9mZnNldCArIGplMzJfdG9fY3B1KHNwci0+b2Zmc2V0KSwKKwkJCQkJICAgIGplYi0+b2Zmc2V0ICsgamUzMl90b19jcHUoc3ByLT5vZmZzZXQpICsgCisJCQkJCSAgICAodWludDMyX3QpUEFEKHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hyZWYpKSk7CisKKwkJCQlyZWYgPSBqZmZzMl9hbGxvY194YXR0cl9yZWYoKTsKKwkJCQlpZiAoIXJlZikgeworCQkJCQlKRkZTMl9OT1RJQ0UoImFsbG9jYXRpb24gb2YgeGF0dHJfZGF0dW0gZmFpbGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJfQorCQkJCXJlZi0+aW5vID0gMHhmZmZmZmZmZTsKKwkJCQlyZWYtPnhpZCA9IDB4ZmZmZmZmZmQ7CisJCQkJcmVmLT5uZXh0ID0gYy0+eHJlZl90ZW1wOworCQkJCWMtPnhyZWZfdGVtcCA9IHJlZjsKKworCQkJCXJlZi0+bm9kZSA9IHN1bV9saW5rX25vZGVfcmVmKGMsIGplYiwgamUzMl90b19jcHUoc3ByLT5vZmZzZXQpIHwgUkVGX1VOQ0hFQ0tFRCwKKwkJCQkJCQkgICAgICBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeHJlZikpLCBOVUxMKTsKKwkJCQkvKiBGSVhNRSAqLyByZWYtPm5vZGUtPm5leHRfaW5faW5vID0gKHZvaWQgKilyZWY7CisKKwkJCQkqcHNldWRvX3JhbmRvbSArPSByZWYtPm5vZGUtPmZsYXNoX29mZnNldDsKKwkJCQlzcCArPSBKRkZTMl9TVU1NQVJZX1hSRUZfU0laRTsKKworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCiAJCQlkZWZhdWx0IDogewotCQkJCUpGRlMyX1dBUk5JTkcoIlVuc3VwcG9ydGVkIG5vZGUgdHlwZSBmb3VuZCBpbiBzdW1tYXJ5ISBFeGl0aW5nLi4uIik7Ci0JCQkJa2ZyZWUoc3VtbWFyeSk7Ci0JCQkJcmV0dXJuIC1FSU87CisJCQkJdWludDE2X3Qgbm9kZXR5cGUgPSBqZTE2X3RvX2NwdSgoKHN0cnVjdCBqZmZzMl9zdW1fdW5rbm93bl9mbGFzaCAqKXNwKS0+bm9kZXR5cGUpOworCQkJCUpGRlMyX1dBUk5JTkcoIlVuc3VwcG9ydGVkIG5vZGUgdHlwZSAleCBmb3VuZCBpbiBzdW1tYXJ5ISBFeGl0aW5nLi4uXG4iLCBub2RldHlwZSk7CisJCQkJaWYgKChub2RldHlwZSAmIEpGRlMyX0NPTVBBVF9NQVNLKSA9PSBKRkZTMl9GRUFUVVJFX0lOQ09NUEFUKQorCQkJCQlyZXR1cm4gLUVJTzsKKworCQkJCS8qIEZvciBjb21wYXRpYmxlIG5vZGUgdHlwZXMsIGp1c3QgZmFsbCBiYWNrIHRvIHRoZSBmdWxsIHNjYW4gKi8KKwkJCQljLT53YXN0ZWRfc2l6ZSAtPSBqZWItPndhc3RlZF9zaXplOworCQkJCWMtPmZyZWVfc2l6ZSArPSBjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplOworCQkJCWMtPnVzZWRfc2l6ZSAtPSBqZWItPnVzZWRfc2l6ZTsKKwkJCQljLT5kaXJ0eV9zaXplIC09IGplYi0+ZGlydHlfc2l6ZTsKKwkJCQlqZWItPndhc3RlZF9zaXplID0gamViLT51c2VkX3NpemUgPSBqZWItPmRpcnR5X3NpemUgPSAwOworCQkJCWplYi0+ZnJlZV9zaXplID0gYy0+c2VjdG9yX3NpemU7CisKKwkJCQlqZmZzMl9mcmVlX2plYl9ub2RlX3JlZnMoYywgamViKTsKKwkJCQlyZXR1cm4gLUVOT1RSRUNPVkVSQUJMRTsKIAkJCX0KIAkJfQogCX0KLQotCWtmcmVlKHN1bW1hcnkpOwogCXJldHVybiAwOwogfQogCiAvKiBQcm9jZXNzIHRoZSBzdW1tYXJ5IG5vZGUgLSBjYWxsZWQgZnJvbSBqZmZzMl9zY2FuX2VyYXNlYmxvY2soKSAqLwotCiBpbnQgamZmczJfc3VtX3NjYW5fc3Vtbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKLQkJCQl1aW50MzJfdCBvZnMsIHVpbnQzMl90ICpwc2V1ZG9fcmFuZG9tKQorCQkJICAgc3RydWN0IGpmZnMyX3Jhd19zdW1tYXJ5ICpzdW1tYXJ5LCB1aW50MzJfdCBzdW1zaXplLAorCQkJICAgdWludDMyX3QgKnBzZXVkb19yYW5kb20pCiB7CiAJc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSBjcmNub2RlOwotCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKmNhY2hlX3JlZjsKLQlzdHJ1Y3QgamZmczJfcmF3X3N1bW1hcnkgKnN1bW1hcnk7Ci0JaW50IHJldCwgc3Vtc2l6ZTsKKwlpbnQgcmV0LCBvZnM7CiAJdWludDMyX3QgY3JjOwogCi0Jc3Vtc2l6ZSA9IGMtPnNlY3Rvcl9zaXplIC0gb2ZzOwotCW9mcyArPSBqZWItPm9mZnNldDsKKwlvZnMgPSBjLT5zZWN0b3Jfc2l6ZSAtIHN1bXNpemU7CiAKIAlkYmdfc3VtbWFyeSgic3VtbWFyeSBmb3VuZCBmb3IgMHglMDh4IGF0IDB4JTA4eCAoMHgleCBieXRlcylcbiIsCi0JCQkJamViLT5vZmZzZXQsIG9mcywgc3Vtc2l6ZSk7Ci0KLQlzdW1tYXJ5ID0ga21hbGxvYyhzdW1zaXplLCBHRlBfS0VSTkVMKTsKLQotCWlmICghc3VtbWFyeSkgewotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXQgPSBqZmZzMl9maWxsX3NjYW5fYnVmKGMsICh1bnNpZ25lZCBjaGFyICopc3VtbWFyeSwgb2ZzLCBzdW1zaXplKTsKLQotCWlmIChyZXQpIHsKLQkJa2ZyZWUoc3VtbWFyeSk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCQkgICAgamViLT5vZmZzZXQsIGplYi0+b2Zmc2V0ICsgb2ZzLCBzdW1zaXplKTsKIAogCS8qIE9LLCBub3cgY2hlY2sgZm9yIG5vZGUgdmFsaWRpdHkgYW5kIENSQyAqLwogCWNyY25vZGUubWFnaWMgPSBjcHVfdG9famUxNihKRkZTMl9NQUdJQ19CSVRNQVNLKTsKQEAgLTQ4Niw2NyArNjA1LDUwIEBACiAKIAkJZGJnX3N1bW1hcnkoIlN1bW1hcnkgOiBDTEVBTk1BUktFUiBub2RlIFxuIik7CiAKKwkJcmV0ID0gamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBqZWIsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwogCQlpZiAoamUzMl90b19jcHUoc3VtbWFyeS0+Y2xuX21rcikgIT0gYy0+Y2xlYW5tYXJrZXJfc2l6ZSkgewogCQkJZGJnX3N1bW1hcnkoIkNMRUFOTUFSS0VSIG5vZGUgaGFzIHRvdGxlbiAweCV4ICE9IG5vcm1hbCAweCV4XG4iLAogCQkJCWplMzJfdG9fY3B1KHN1bW1hcnktPmNsbl9ta3IpLCBjLT5jbGVhbm1hcmtlcl9zaXplKTsKLQkJCVVOQ0hFQ0tFRF9TUEFDRShQQUQoamUzMl90b19jcHUoc3VtbWFyeS0+Y2xuX21rcikpKTsKKwkJCWlmICgocmV0ID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChqZTMyX3RvX2NwdShzdW1tYXJ5LT5jbG5fbWtyKSkpKSkKKwkJCQlyZXR1cm4gcmV0OwogCQl9IGVsc2UgaWYgKGplYi0+Zmlyc3Rfbm9kZSkgewogCQkJZGJnX3N1bW1hcnkoIkNMRUFOTUFSS0VSIG5vZGUgbm90IGZpcnN0IG5vZGUgaW4gYmxvY2sgIgogCQkJCQkiKDB4JTA4eClcbiIsIGplYi0+b2Zmc2V0KTsKLQkJCVVOQ0hFQ0tFRF9TUEFDRShQQUQoamUzMl90b19jcHUoc3VtbWFyeS0+Y2xuX21rcikpKTsKKwkJCWlmICgocmV0ID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChqZTMyX3RvX2NwdShzdW1tYXJ5LT5jbG5fbWtyKSkpKSkKKwkJCQlyZXR1cm4gcmV0OwogCQl9IGVsc2UgewotCQkJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqbWFya2VyX3JlZiA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOwotCi0JCQlpZiAoIW1hcmtlcl9yZWYpIHsKLQkJCQlKRkZTMl9OT1RJQ0UoIkZhaWxlZCB0byBhbGxvY2F0ZSBub2RlIHJlZiBmb3IgY2xlYW4gbWFya2VyXG4iKTsKLQkJCQlrZnJlZShzdW1tYXJ5KTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0KLQotCQkJbWFya2VyX3JlZi0+bmV4dF9pbl9pbm8gPSBOVUxMOwotCQkJbWFya2VyX3JlZi0+bmV4dF9waHlzID0gTlVMTDsKLQkJCW1hcmtlcl9yZWYtPmZsYXNoX29mZnNldCA9IGplYi0+b2Zmc2V0IHwgUkVGX05PUk1BTDsKLQkJCW1hcmtlcl9yZWYtPl9fdG90bGVuID0gamUzMl90b19jcHUoc3VtbWFyeS0+Y2xuX21rcik7Ci0JCQlqZWItPmZpcnN0X25vZGUgPSBqZWItPmxhc3Rfbm9kZSA9IG1hcmtlcl9yZWY7Ci0KLQkJCVVTRURfU1BBQ0UoIFBBRChqZTMyX3RvX2NwdShzdW1tYXJ5LT5jbG5fbWtyKSkgKTsKKwkJCWpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCBqZWItPm9mZnNldCB8IFJFRl9OT1JNQUwsCisJCQkJCSAgICBqZTMyX3RvX2NwdShzdW1tYXJ5LT5jbG5fbWtyKSwgTlVMTCk7CiAJCX0KIAl9CiAKLQlpZiAoamUzMl90b19jcHUoc3VtbWFyeS0+cGFkZGVkKSkgewotCQlESVJUWV9TUEFDRShqZTMyX3RvX2NwdShzdW1tYXJ5LT5wYWRkZWQpKTsKLQl9Ci0KIAlyZXQgPSBqZmZzMl9zdW1fcHJvY2Vzc19zdW1fZGF0YShjLCBqZWIsIHN1bW1hcnksIHBzZXVkb19yYW5kb20pOworCS8qIC1FTk9UUkVDT1ZFUkFCTEUgaXNuJ3QgYSBmYXRhbCBlcnJvciAtLSBpdCBtZWFucyB3ZSBzaG91bGQgZG8gYSBmdWxsCisJICAgc2NhbiBvZiB0aGlzIGVyYXNlYmxvY2suIFNvIHJldHVybiB6ZXJvICovCisJaWYgKHJldCA9PSAtRU5PVFJFQ09WRVJBQkxFKQorCQlyZXR1cm4gMDsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwkJLyogcmVhbCBlcnJvciAqLworCisJLyogZm9yIFBBUkFOT0lBX0NIRUNLICovCisJcmV0ID0gamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBqZWIsIDIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkvKiBmb3IgUEFSQU5PSUFfQ0hFQ0sgKi8KLQljYWNoZV9yZWYgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKTsKKwlzdW1fbGlua19ub2RlX3JlZihjLCBqZWIsIG9mcyB8IFJFRl9OT1JNQUwsIHN1bXNpemUsIE5VTEwpOwogCi0JaWYgKCFjYWNoZV9yZWYpIHsKLQkJSkZGUzJfTk9USUNFKCJGYWlsZWQgdG8gYWxsb2NhdGUgbm9kZSByZWYgZm9yIGNhY2hlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHVubGlrZWx5KGplYi0+ZnJlZV9zaXplKSkgeworCQlKRkZTMl9XQVJOSU5HKCJGcmVlIHNpemUgMHgleCBieXRlcyBpbiBlcmFzZWJsb2NrIEAweCUwOHggd2l0aCBzdW1tYXJ5P1xuIiwKKwkJCSAgICAgIGplYi0+ZnJlZV9zaXplLCBqZWItPm9mZnNldCk7CisJCWplYi0+d2FzdGVkX3NpemUgKz0gamViLT5mcmVlX3NpemU7CisJCWMtPndhc3RlZF9zaXplICs9IGplYi0+ZnJlZV9zaXplOworCQljLT5mcmVlX3NpemUgLT0gamViLT5mcmVlX3NpemU7CisJCWplYi0+ZnJlZV9zaXplID0gMDsKIAl9CiAKLQljYWNoZV9yZWYtPm5leHRfaW5faW5vID0gTlVMTDsKLQljYWNoZV9yZWYtPm5leHRfcGh5cyA9IE5VTEw7Ci0JY2FjaGVfcmVmLT5mbGFzaF9vZmZzZXQgPSBvZnMgfCBSRUZfTk9STUFMOwotCWNhY2hlX3JlZi0+X190b3RsZW4gPSBzdW1zaXplOwotCi0JaWYgKCFqZWItPmZpcnN0X25vZGUpCi0JCWplYi0+Zmlyc3Rfbm9kZSA9IGNhY2hlX3JlZjsKLQlpZiAoamViLT5sYXN0X25vZGUpCi0JCWplYi0+bGFzdF9ub2RlLT5uZXh0X3BoeXMgPSBjYWNoZV9yZWY7Ci0JamViLT5sYXN0X25vZGUgPSBjYWNoZV9yZWY7Ci0KLQlVU0VEX1NQQUNFKHN1bXNpemUpOwotCi0JamViLT53YXN0ZWRfc2l6ZSArPSBqZWItPmZyZWVfc2l6ZTsKLQljLT53YXN0ZWRfc2l6ZSArPSBqZWItPmZyZWVfc2l6ZTsKLQljLT5mcmVlX3NpemUgLT0gamViLT5mcmVlX3NpemU7Ci0JamViLT5mcmVlX3NpemUgPSAwOwotCiAJcmV0dXJuIGpmZnMyX3NjYW5fY2xhc3NpZnlfamViKGMsIGplYik7CiAKIGNyY19lcnI6CkBAIC01NjQsNiArNjY2LDcgQEAKIAl1bmlvbiBqZmZzMl9zdW1fbWVtICp0ZW1wOwogCXN0cnVjdCBqZmZzMl9zdW1fbWFya2VyICpzbTsKIAlzdHJ1Y3Qga3ZlYyB2ZWNzWzJdOworCXVpbnQzMl90IHN1bV9vZnM7CiAJdm9pZCAqd3BhZ2U7CiAJaW50IHJldDsKIAlzaXplX3QgcmV0bGVuOwpAQCAtNTgxLDE2ICs2ODQsMTcgQEAKIAl3cGFnZSA9IGMtPnN1bW1hcnktPnN1bV9idWY7CiAKIAl3aGlsZSAoYy0+c3VtbWFyeS0+c3VtX251bSkgeworCQl0ZW1wID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZDsKIAotCQlzd2l0Y2ggKGplMTZfdG9fY3B1KGMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQtPnUubm9kZXR5cGUpKSB7CisJCXN3aXRjaCAoamUxNl90b19jcHUodGVtcC0+dS5ub2RldHlwZSkpIHsKIAkJCWNhc2UgSkZGUzJfTk9ERVRZUEVfSU5PREU6IHsKIAkJCQlzdHJ1Y3QgamZmczJfc3VtX2lub2RlX2ZsYXNoICpzaW5vX3B0ciA9IHdwYWdlOwogCi0JCQkJc2lub19wdHItPm5vZGV0eXBlID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+aS5ub2RldHlwZTsKLQkJCQlzaW5vX3B0ci0+aW5vZGUgPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5pLmlub2RlOwotCQkJCXNpbm9fcHRyLT52ZXJzaW9uID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+aS52ZXJzaW9uOwotCQkJCXNpbm9fcHRyLT5vZmZzZXQgPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5pLm9mZnNldDsKLQkJCQlzaW5vX3B0ci0+dG90bGVuID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+aS50b3RsZW47CisJCQkJc2lub19wdHItPm5vZGV0eXBlID0gdGVtcC0+aS5ub2RldHlwZTsKKwkJCQlzaW5vX3B0ci0+aW5vZGUgPSB0ZW1wLT5pLmlub2RlOworCQkJCXNpbm9fcHRyLT52ZXJzaW9uID0gdGVtcC0+aS52ZXJzaW9uOworCQkJCXNpbm9fcHRyLT5vZmZzZXQgPSB0ZW1wLT5pLm9mZnNldDsKKwkJCQlzaW5vX3B0ci0+dG90bGVuID0gdGVtcC0+aS50b3RsZW47CiAKIAkJCQl3cGFnZSArPSBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkU7CiAKQEAgLTYwMCwzMCArNzA0LDYwIEBACiAJCQljYXNlIEpGRlMyX05PREVUWVBFX0RJUkVOVDogewogCQkJCXN0cnVjdCBqZmZzMl9zdW1fZGlyZW50X2ZsYXNoICpzZHJudF9wdHIgPSB3cGFnZTsKIAotCQkJCXNkcm50X3B0ci0+bm9kZXR5cGUgPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5kLm5vZGV0eXBlOwotCQkJCXNkcm50X3B0ci0+dG90bGVuID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+ZC50b3RsZW47Ci0JCQkJc2RybnRfcHRyLT5vZmZzZXQgPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5kLm9mZnNldDsKLQkJCQlzZHJudF9wdHItPnBpbm8gPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5kLnBpbm87Ci0JCQkJc2RybnRfcHRyLT52ZXJzaW9uID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+ZC52ZXJzaW9uOwotCQkJCXNkcm50X3B0ci0+aW5vID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+ZC5pbm87Ci0JCQkJc2RybnRfcHRyLT5uc2l6ZSA9IGMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQtPmQubnNpemU7Ci0JCQkJc2RybnRfcHRyLT50eXBlID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+ZC50eXBlOworCQkJCXNkcm50X3B0ci0+bm9kZXR5cGUgPSB0ZW1wLT5kLm5vZGV0eXBlOworCQkJCXNkcm50X3B0ci0+dG90bGVuID0gdGVtcC0+ZC50b3RsZW47CisJCQkJc2RybnRfcHRyLT5vZmZzZXQgPSB0ZW1wLT5kLm9mZnNldDsKKwkJCQlzZHJudF9wdHItPnBpbm8gPSB0ZW1wLT5kLnBpbm87CisJCQkJc2RybnRfcHRyLT52ZXJzaW9uID0gdGVtcC0+ZC52ZXJzaW9uOworCQkJCXNkcm50X3B0ci0+aW5vID0gdGVtcC0+ZC5pbm87CisJCQkJc2RybnRfcHRyLT5uc2l6ZSA9IHRlbXAtPmQubnNpemU7CisJCQkJc2RybnRfcHRyLT50eXBlID0gdGVtcC0+ZC50eXBlOwogCi0JCQkJbWVtY3B5KHNkcm50X3B0ci0+bmFtZSwgYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+ZC5uYW1lLAotCQkJCQkJCWMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQtPmQubnNpemUpOworCQkJCW1lbWNweShzZHJudF9wdHItPm5hbWUsIHRlbXAtPmQubmFtZSwKKwkJCQkJCQl0ZW1wLT5kLm5zaXplKTsKIAotCQkJCXdwYWdlICs9IEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUoYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+ZC5uc2l6ZSk7CisJCQkJd3BhZ2UgKz0gSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRSh0ZW1wLT5kLm5zaXplKTsKIAogCQkJCWJyZWFrOwogCQkJfQorI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgorCQkJY2FzZSBKRkZTMl9OT0RFVFlQRV9YQVRUUjogeworCQkJCXN0cnVjdCBqZmZzMl9zdW1feGF0dHJfZmxhc2ggKnN4YXR0cl9wdHIgPSB3cGFnZTsKIAorCQkJCXRlbXAgPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkOworCQkJCXN4YXR0cl9wdHItPm5vZGV0eXBlID0gdGVtcC0+eC5ub2RldHlwZTsKKwkJCQlzeGF0dHJfcHRyLT54aWQgPSB0ZW1wLT54LnhpZDsKKwkJCQlzeGF0dHJfcHRyLT52ZXJzaW9uID0gdGVtcC0+eC52ZXJzaW9uOworCQkJCXN4YXR0cl9wdHItPm9mZnNldCA9IHRlbXAtPngub2Zmc2V0OworCQkJCXN4YXR0cl9wdHItPnRvdGxlbiA9IHRlbXAtPngudG90bGVuOworCisJCQkJd3BhZ2UgKz0gSkZGUzJfU1VNTUFSWV9YQVRUUl9TSVpFOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBKRkZTMl9OT0RFVFlQRV9YUkVGOiB7CisJCQkJc3RydWN0IGpmZnMyX3N1bV94cmVmX2ZsYXNoICpzeHJlZl9wdHIgPSB3cGFnZTsKKworCQkJCXRlbXAgPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkOworCQkJCXN4cmVmX3B0ci0+bm9kZXR5cGUgPSB0ZW1wLT5yLm5vZGV0eXBlOworCQkJCXN4cmVmX3B0ci0+b2Zmc2V0ID0gdGVtcC0+ci5vZmZzZXQ7CisKKwkJCQl3cGFnZSArPSBKRkZTMl9TVU1NQVJZX1hSRUZfU0laRTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgogCQkJZGVmYXVsdCA6IHsKLQkJCQlCVUcoKTsJLyogdW5rbm93biBub2RlIGluIHN1bW1hcnkgaW5mb3JtYXRpb24gKi8KKwkJCQlpZiAoKGplMTZfdG9fY3B1KHRlbXAtPnUubm9kZXR5cGUpICYgSkZGUzJfQ09NUEFUX01BU0spCisJCQkJICAgID09IEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfQ09QWSkgeworCQkJCQlkYmdfc3VtbWFyeSgiV3JpdGluZyB1bmtub3duIFJXQ09NUEFUX0NPUFkgbm9kZSB0eXBlICV4XG4iLAorCQkJCQkJICAgIGplMTZfdG9fY3B1KHRlbXAtPnUubm9kZXR5cGUpKTsKKwkJCQkJamZmczJfc3VtX2Rpc2FibGVfY29sbGVjdGluZyhjLT5zdW1tYXJ5KTsKKwkJCQl9IGVsc2UgeworCQkJCQlCVUcoKTsJLyogdW5rbm93biBub2RlIGluIHN1bW1hcnkgaW5mb3JtYXRpb24gKi8KKwkJCQl9CiAJCQl9CiAJCX0KIAotCQl0ZW1wID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZDsKLQkJYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZCA9IGMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQtPnUubmV4dDsKKwkJYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZCA9IHRlbXAtPnUubmV4dDsKIAkJa2ZyZWUodGVtcCk7CiAKIAkJYy0+c3VtbWFyeS0+c3VtX251bS0tOwpAQCAtNjQ1LDI1ICs3NzksMzQgQEAKIAl2ZWNzWzFdLmlvdl9iYXNlID0gYy0+c3VtbWFyeS0+c3VtX2J1ZjsKIAl2ZWNzWzFdLmlvdl9sZW4gPSBkYXRhc2l6ZTsKIAorCXN1bV9vZnMgPSBqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemU7CisKIAlkYmdfc3VtbWFyeSgiSkZGUzI6IHdyaXRpbmcgb3V0IGRhdGEgdG8gZmxhc2ggdG8gcG9zIDogMHglMDh4XG4iLAotCQkJamViLT5vZmZzZXQgKyBjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplKTsKKwkJICAgIHN1bV9vZnMpOwogCi0Jc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0JcmV0ID0gamZmczJfZmxhc2hfd3JpdGV2KGMsIHZlY3MsIDIsIGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLQotCQkJCWplYi0+ZnJlZV9zaXplLCAmcmV0bGVuLCAwKTsKLQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0KKwlyZXQgPSBqZmZzMl9mbGFzaF93cml0ZXYoYywgdmVjcywgMiwgc3VtX29mcywgJnJldGxlbiwgMCk7CiAKIAlpZiAocmV0IHx8IChyZXRsZW4gIT0gaW5mb3NpemUpKSB7Ci0JCUpGRlMyX1dBUk5JTkcoIldyaXRlIG9mICV6ZCBieXRlcyBhdCAweCUwOHggZmFpbGVkLiByZXR1cm5lZCAlZCwgcmV0bGVuICV6ZFxuIiwKLQkJCWluZm9zaXplLCBqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemUsIHJldCwgcmV0bGVuKTsKKworCQlKRkZTMl9XQVJOSU5HKCJXcml0ZSBvZiAldSBieXRlcyBhdCAweCUwOHggZmFpbGVkLiByZXR1cm5lZCAlZCwgcmV0bGVuICV6ZFxuIiwKKwkJCSAgICAgIGluZm9zaXplLCBzdW1fb2ZzLCByZXQsIHJldGxlbik7CisKKwkJaWYgKHJldGxlbikgeworCQkJLyogV2FzdGUgcmVtYWluaW5nIHNwYWNlICovCisJCQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJCQlqZmZzMl9saW5rX25vZGVfcmVmKGMsIGplYiwgc3VtX29mcyB8IFJFRl9PQlNPTEVURSwgaW5mb3NpemUsIE5VTEwpOworCQkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJCX0KIAogCQljLT5zdW1tYXJ5LT5zdW1fc2l6ZSA9IEpGRlMyX1NVTU1BUllfTk9TVU1fU0laRTsKLQkJV0FTVEVEX1NQQUNFKGluZm9zaXplKTsKIAotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CiAJfQogCisJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCWpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCBzdW1fb2ZzIHwgUkVGX05PUk1BTCwgaW5mb3NpemUsIE5VTEwpOworCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY3MSwxMyArODE0LDE2IEBACiAKIGludCBqZmZzMl9zdW1fd3JpdGVfc3Vtbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYykKIHsKLQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpzdW1tYXJ5X3JlZjsKLQlpbnQgZGF0YXNpemUsIGluZm9zaXplLCBwYWRzaXplLCByZXQ7CisJaW50IGRhdGFzaXplLCBpbmZvc2l6ZSwgcGFkc2l6ZTsKIAlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViOworCWludCByZXQ7CiAKIAlkYmdfc3VtbWFyeSgiY2FsbGVkXG4iKTsKIAorCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCiAJamViID0gYy0+bmV4dGJsb2NrOworCWpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoYywgamViLCAxKTsKIAogCWlmICghYy0+c3VtbWFyeS0+c3VtX251bSB8fCAhYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZCkgewogCQlKRkZTMl9XQVJOSU5HKCJFbXB0eSBzdW1tYXJ5IGluZm8hISFcbiIpOwpAQCAtNjk2LDM1ICs4NDIsMTEgQEAKIAkJamZmczJfc3VtX2Rpc2FibGVfY29sbGVjdGluZyhjLT5zdW1tYXJ5KTsKIAogCQlKRkZTMl9XQVJOSU5HKCJOb3QgZW5vdWdoIHNwYWNlIGZvciBzdW1tYXJ5LCBwYWRzaXplID0gJWRcbiIsIHBhZHNpemUpOworCQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAJCXJldHVybiAwOwogCX0KIAogCXJldCA9IGpmZnMyX3N1bV93cml0ZV9kYXRhKGMsIGplYiwgaW5mb3NpemUsIGRhdGFzaXplLCBwYWRzaXplKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gMDsgLyogY2FuJ3Qgd3JpdGUgb3V0IHN1bW1hcnksIGJsb2NrIGlzIG1hcmtlZCBhcyBOT1NVTV9TSVpFICovCi0KLQkvKiBmb3IgQUNDVF9QQVJBTk9JQV9DSEVDSyAqLwotCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCXN1bW1hcnlfcmVmID0gamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCk7CiAJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCi0JaWYgKCFzdW1tYXJ5X3JlZikgewotCQlKRkZTMl9OT1RJQ0UoIkZhaWxlZCB0byBhbGxvY2F0ZSBub2RlIHJlZiBmb3Igc3VtbWFyeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXN1bW1hcnlfcmVmLT5uZXh0X2luX2lubyA9IE5VTEw7Ci0Jc3VtbWFyeV9yZWYtPm5leHRfcGh5cyA9IE5VTEw7Ci0Jc3VtbWFyeV9yZWYtPmZsYXNoX29mZnNldCA9IChqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemUpIHwgUkVGX05PUk1BTDsKLQlzdW1tYXJ5X3JlZi0+X190b3RsZW4gPSBpbmZvc2l6ZTsKLQotCWlmICghamViLT5maXJzdF9ub2RlKQotCQlqZWItPmZpcnN0X25vZGUgPSBzdW1tYXJ5X3JlZjsKLQlpZiAoamViLT5sYXN0X25vZGUpCi0JCWplYi0+bGFzdF9ub2RlLT5uZXh0X3BoeXMgPSBzdW1tYXJ5X3JlZjsKLQlqZWItPmxhc3Rfbm9kZSA9IHN1bW1hcnlfcmVmOwotCi0JVVNFRF9TUEFDRShpbmZvc2l6ZSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvamZmczIvc3VtbWFyeS5oIGIvZnMvamZmczIvc3VtbWFyeS5oCmluZGV4IGI3YTY3OGIuLjZiZjFmNmEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3N1bW1hcnkuaAorKysgYi9mcy9qZmZzMi9zdW1tYXJ5LmgKQEAgLTE4LDIzICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvamZmczIuaD4KIAotI2RlZmluZSBESVJUWV9TUEFDRSh4KSBkbyB7IHR5cGVvZih4KSBfeCA9ICh4KTsgXAotCQljLT5mcmVlX3NpemUgLT0gX3g7IGMtPmRpcnR5X3NpemUgKz0gX3g7IFwKLQkJamViLT5mcmVlX3NpemUgLT0gX3ggOyBqZWItPmRpcnR5X3NpemUgKz0gX3g7IFwKLQkJfXdoaWxlKDApCi0jZGVmaW5lIFVTRURfU1BBQ0UoeCkgZG8geyB0eXBlb2YoeCkgX3ggPSAoeCk7IFwKLQkJYy0+ZnJlZV9zaXplIC09IF94OyBjLT51c2VkX3NpemUgKz0gX3g7IFwKLQkJamViLT5mcmVlX3NpemUgLT0gX3ggOyBqZWItPnVzZWRfc2l6ZSArPSBfeDsgXAotCQl9d2hpbGUoMCkKLSNkZWZpbmUgV0FTVEVEX1NQQUNFKHgpIGRvIHsgdHlwZW9mKHgpIF94ID0gKHgpOyBcCi0JCWMtPmZyZWVfc2l6ZSAtPSBfeDsgYy0+d2FzdGVkX3NpemUgKz0gX3g7IFwKLQkJamViLT5mcmVlX3NpemUgLT0gX3ggOyBqZWItPndhc3RlZF9zaXplICs9IF94OyBcCi0JCX13aGlsZSgwKQotI2RlZmluZSBVTkNIRUNLRURfU1BBQ0UoeCkgZG8geyB0eXBlb2YoeCkgX3ggPSAoeCk7IFwKLQkJYy0+ZnJlZV9zaXplIC09IF94OyBjLT51bmNoZWNrZWRfc2l6ZSArPSBfeDsgXAotCQlqZWItPmZyZWVfc2l6ZSAtPSBfeCA7IGplYi0+dW5jaGVja2VkX3NpemUgKz0gX3g7IFwKLQkJfXdoaWxlKDApCi0KICNkZWZpbmUgQkxLX1NUQVRFX0FMTEZGCQkwCiAjZGVmaW5lIEJMS19TVEFURV9DTEVBTgkJMQogI2RlZmluZSBCTEtfU1RBVEVfUEFSVERJUlRZCTIKQEAgLTQ1LDYgKzI4LDggQEAKICNkZWZpbmUgSkZGUzJfU1VNTUFSWV9OT1NVTV9TSVpFIDB4ZmZmZmZmZmYKICNkZWZpbmUgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFIChzaXplb2Yoc3RydWN0IGpmZnMyX3N1bV9pbm9kZV9mbGFzaCkpCiAjZGVmaW5lIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUoeCkgKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtX2RpcmVudF9mbGFzaCkgKyAoeCkpCisjZGVmaW5lIEpGRlMyX1NVTU1BUllfWEFUVFJfU0laRSAoc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1feGF0dHJfZmxhc2gpKQorI2RlZmluZSBKRkZTMl9TVU1NQVJZX1hSRUZfU0laRSAoc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1feHJlZl9mbGFzaCkpCiAKIC8qIFN1bW1hcnkgc3RydWN0dXJlcyB1c2VkIG9uIGZsYXNoICovCiAKQEAgLTc1LDExICs2MCwyOCBAQAogCXVpbnQ4X3QgbmFtZVswXTsJLyogZGlyZW50IG5hbWUgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVjdCBqZmZzMl9zdW1feGF0dHJfZmxhc2gKK3sKKwlqaW50MTZfdCBub2RldHlwZTsJLyogPT0gSkZGUzJfTk9ERVRZUEVfWEFUUiAqLworCWppbnQzMl90IHhpZDsJCS8qIHhhdHRyIGlkZW50aWZpZXIgKi8KKwlqaW50MzJfdCB2ZXJzaW9uOwkvKiB2ZXJzaW9uIG51bWJlciAqLworCWppbnQzMl90IG9mZnNldDsJLyogb2Zmc2V0IG9uIGplYiAqLworCWppbnQzMl90IHRvdGxlbjsJLyogbm9kZSBsZW5ndGggKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBqZmZzMl9zdW1feHJlZl9mbGFzaAoreworCWppbnQxNl90IG5vZGV0eXBlOwkvKiA9PSBKRkZTMl9OT0RFVFlQRV9YUkVGICovCisJamludDMyX3Qgb2Zmc2V0OwkvKiBvZmZzZXQgb24gamViICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiB1bmlvbiBqZmZzMl9zdW1fZmxhc2gKIHsKIAlzdHJ1Y3QgamZmczJfc3VtX3Vua25vd25fZmxhc2ggdTsKIAlzdHJ1Y3QgamZmczJfc3VtX2lub2RlX2ZsYXNoIGk7CiAJc3RydWN0IGpmZnMyX3N1bV9kaXJlbnRfZmxhc2ggZDsKKwlzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX2ZsYXNoIHg7CisJc3RydWN0IGpmZnMyX3N1bV94cmVmX2ZsYXNoIHI7CiB9OwogCiAvKiBTdW1tYXJ5IHN0cnVjdHVyZXMgdXNlZCBpbiB0aGUgbWVtb3J5ICovCkBAIC0xMTQsMTEgKzExNiwzMCBAQAogCXVpbnQ4X3QgbmFtZVswXTsJLyogZGlyZW50IG5hbWUgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVjdCBqZmZzMl9zdW1feGF0dHJfbWVtCit7CisJdW5pb24gamZmczJfc3VtX21lbSAqbmV4dDsKKwlqaW50MTZfdCBub2RldHlwZTsKKwlqaW50MzJfdCB4aWQ7CisJamludDMyX3QgdmVyc2lvbjsKKwlqaW50MzJfdCBvZmZzZXQ7CisJamludDMyX3QgdG90bGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGpmZnMyX3N1bV94cmVmX21lbQoreworCXVuaW9uIGpmZnMyX3N1bV9tZW0gKm5leHQ7CisJamludDE2X3Qgbm9kZXR5cGU7CisJamludDMyX3Qgb2Zmc2V0OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogdW5pb24gamZmczJfc3VtX21lbQogewogCXN0cnVjdCBqZmZzMl9zdW1fdW5rbm93bl9tZW0gdTsKIAlzdHJ1Y3QgamZmczJfc3VtX2lub2RlX21lbSBpOwogCXN0cnVjdCBqZmZzMl9zdW1fZGlyZW50X21lbSBkOworCXN0cnVjdCBqZmZzMl9zdW1feGF0dHJfbWVtIHg7CisJc3RydWN0IGpmZnMyX3N1bV94cmVmX21lbSByOwogfTsKIAogLyogU3VtbWFyeSByZWxhdGVkIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBzdXBlcmJsb2NrICovCkBAIC0xNTksOCArMTgwLDExIEBACiBpbnQgamZmczJfc3VtX2FkZF9wYWRkaW5nX21lbShzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcywgdWludDMyX3Qgc2l6ZSk7CiBpbnQgamZmczJfc3VtX2FkZF9pbm9kZV9tZW0oc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMsIHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKnJpLCB1aW50MzJfdCBvZnMpOwogaW50IGpmZnMyX3N1bV9hZGRfZGlyZW50X21lbShzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcywgc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkLCB1aW50MzJfdCBvZnMpOworaW50IGpmZnMyX3N1bV9hZGRfeGF0dHJfbWVtKHN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzLCBzdHJ1Y3QgamZmczJfcmF3X3hhdHRyICpyeCwgdWludDMyX3Qgb2ZzKTsKK2ludCBqZmZzMl9zdW1fYWRkX3hyZWZfbWVtKHN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzLCBzdHJ1Y3QgamZmczJfcmF3X3hyZWYgKnJyLCB1aW50MzJfdCBvZnMpOwogaW50IGpmZnMyX3N1bV9zY2FuX3N1bW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsCi0JCQl1aW50MzJfdCBvZnMsIHVpbnQzMl90ICpwc2V1ZG9fcmFuZG9tKTsKKwkJCSAgIHN0cnVjdCBqZmZzMl9yYXdfc3VtbWFyeSAqc3VtbWFyeSwgdWludDMyX3Qgc3VtbGVuLAorCQkJICAgdWludDMyX3QgKnBzZXVkb19yYW5kb20pOwogCiAjZWxzZQkJCQkvKiBTVU1NQVJZIERJU0FCTEVEICovCiAKQEAgLTE3Niw3ICsyMDAsOSBAQAogI2RlZmluZSBqZmZzMl9zdW1fYWRkX3BhZGRpbmdfbWVtKGEsYikKICNkZWZpbmUgamZmczJfc3VtX2FkZF9pbm9kZV9tZW0oYSxiLGMpCiAjZGVmaW5lIGpmZnMyX3N1bV9hZGRfZGlyZW50X21lbShhLGIsYykKLSNkZWZpbmUgamZmczJfc3VtX3NjYW5fc3Vtbm9kZShhLGIsYyxkKSAoMCkKKyNkZWZpbmUgamZmczJfc3VtX2FkZF94YXR0cl9tZW0oYSxiLGMpCisjZGVmaW5lIGpmZnMyX3N1bV9hZGRfeHJlZl9tZW0oYSxiLGMpCisjZGVmaW5lIGpmZnMyX3N1bV9zY2FuX3N1bW5vZGUoYSxiLGMsZCxlKSAoMCkKIAogI2VuZGlmIC8qIENPTkZJR19KRkZTMl9TVU1NQVJZICovCiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3N1cGVyLmMgYi9mcy9qZmZzMi9zdXBlci5jCmluZGV4IGZmZDhlODQuLjlkMDUyMTQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3N1cGVyLmMKKysrIGIvZnMvamZmczIvc3VwZXIuYwpAQCAtMTUxLDcgKzE1MSwxMCBAQAogCiAJc2ItPnNfb3AgPSAmamZmczJfc3VwZXJfb3BlcmF0aW9uczsKIAlzYi0+c19mbGFncyA9IGZsYWdzIHwgTVNfTk9BVElNRTsKLQorCXNiLT5zX3hhdHRyID0gamZmczJfeGF0dHJfaGFuZGxlcnM7CisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTAorCXNiLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOworI2VuZGlmCiAJcmV0ID0gamZmczJfZG9fZmlsbF9zdXBlcihzYiwgZGF0YSwgZmxhZ3MgJiBNU19TSUxFTlQgPyAxIDogMCk7CiAKIAlpZiAocmV0KSB7CkBAIC0yOTMsNiArMjk2LDcgQEAKIAkJa2ZyZWUoYy0+YmxvY2tzKTsKIAlqZmZzMl9mbGFzaF9jbGVhbnVwKGMpOwogCWtmcmVlKGMtPmlub2NhY2hlX2xpc3QpOworCWpmZnMyX2NsZWFyX3hhdHRyX3N1YnN5c3RlbShjKTsKIAlpZiAoYy0+bXRkLT5zeW5jKQogCQljLT5tdGQtPnN5bmMoYy0+bXRkKTsKIApAQCAtMzIwLDYgKzMyNCwxOCBAQAogewogCWludCByZXQ7CiAKKwkvKiBQYXJhbm9pYSBjaGVja3MgZm9yIG9uLW1lZGl1bSBzdHJ1Y3R1cmVzLiBJZiB3ZSBhc2sgR0NDCisJICAgdG8gcGFjayB0aGVtIHdpdGggX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdGhlbiBpdCBfYWxzb18KKwkgICBhc3N1bWVzIHRoYXQgdGhleSdyZSBub3QgYWxpZ25lZCAtLSBzbyBpdCBlbWl0cyBjcmFwcHkKKwkgICBjb2RlIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy4gSWRlYWxseSB3ZSB3YW50IGFuIGF0dHJpYnV0ZQorCSAgIHdoaWNoIG1lYW5zIGp1c3QgJ25vIHBhZGRpbmcnLCB3aXRob3V0IHRoZSBhbGlnbm1lbnQKKwkgICB0aGluZy4gQnV0IEdDQyBkb2Vzbid0IGhhdmUgdGhhdCAtLSB3ZSBoYXZlIHRvIGp1c3QKKwkgICBob3BlIHRoZSBzdHJ1Y3RzIGFyZSB0aGUgcmlnaHQgc2l6ZXMsIGluc3RlYWQuICovCisJQlVHX09OKHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSAhPSAxMik7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCkgIT0gNDApOworCUJVR19PTihzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd19pbm9kZSkgIT0gNjgpOworCUJVR19PTihzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd19zdW1tYXJ5KSAhPSAzMik7CisKIAlwcmludGsoS0VSTl9JTkZPICJKRkZTMiB2ZXJzaW9uIDIuMi4iCiAjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSCiAJICAgICAgICIgKE5BTkQpIgpAQCAtMzI3LDcgKzM0Myw3IEBACiAjaWZkZWYgQ09ORklHX0pGRlMyX1NVTU1BUlkKIAkgICAgICAgIiAoU1VNTUFSWSkgIgogI2VuZGlmCi0JICAgICAgICIgKEMpIDIwMDEtMjAwMyBSZWQgSGF0LCBJbmMuXG4iKTsKKwkgICAgICAgIiAoQykgMjAwMS0yMDA2IFJlZCBIYXQsIEluYy5cbiIpOwogCiAJamZmczJfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImpmZnMyX2kiLAogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyksCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zeW1saW5rLmMgYi9mcy9qZmZzMi9zeW1saW5rLmMKaW5kZXggZDU1NzU0Zi4uZmMyMTFiNiAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3ltbGluay5jCisrKyBiL2ZzL2pmZnMyL3N5bWxpbmsuYwpAQCAtMjQsNyArMjQsMTIgQEAKIHsKIAkucmVhZGxpbmsgPQlnZW5lcmljX3JlYWRsaW5rLAogCS5mb2xsb3dfbGluayA9CWpmZnMyX2ZvbGxvd19saW5rLAotCS5zZXRhdHRyID0JamZmczJfc2V0YXR0cgorCS5wZXJtaXNzaW9uID0JamZmczJfcGVybWlzc2lvbiwKKwkuc2V0YXR0ciA9CWpmZnMyX3NldGF0dHIsCisJLnNldHhhdHRyID0JamZmczJfc2V0eGF0dHIsCisJLmdldHhhdHRyID0JamZmczJfZ2V0eGF0dHIsCisJLmxpc3R4YXR0ciA9CWpmZnMyX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIgPQlqZmZzMl9yZW1vdmV4YXR0cgogfTsKIAogc3RhdGljIHZvaWQgKmpmZnMyX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCmRpZmYgLS1naXQgYS9mcy9qZmZzMi93YnVmLmMgYi9mcy9qZmZzMi93YnVmLmMKaW5kZXggNGNlYmYwZS4uYTdmMTUzZiAxMDA2NDQKLS0tIGEvZnMvamZmczIvd2J1Zi5jCisrKyBiL2ZzL2pmZnMyL3didWYuYwpAQCAtMTU2LDY5ICsxNTYsMTMwIEBACiAJCWpmZnMyX2VyYXNlX3BlbmRpbmdfdHJpZ2dlcihjKTsKIAl9CiAKLQkvKiBBZGp1c3QgaXRzIHNpemUgY291bnRzIGFjY29yZGluZ2x5ICovCi0JYy0+d2FzdGVkX3NpemUgKz0gamViLT5mcmVlX3NpemU7Ci0JYy0+ZnJlZV9zaXplIC09IGplYi0+ZnJlZV9zaXplOwotCWplYi0+d2FzdGVkX3NpemUgKz0gamViLT5mcmVlX3NpemU7Ci0JamViLT5mcmVlX3NpemUgPSAwOworCWlmICghamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBqZWIsIDEpKSB7CisJCXVpbnQzMl90IG9sZGZyZWUgPSBqZWItPmZyZWVfc2l6ZTsKKworCQlqZmZzMl9saW5rX25vZGVfcmVmKGMsIGplYiwgCisJCQkJICAgIChqZWItPm9mZnNldCtjLT5zZWN0b3Jfc2l6ZS1vbGRmcmVlKSB8IFJFRl9PQlNPTEVURSwKKwkJCQkgICAgb2xkZnJlZSwgTlVMTCk7CisJCS8qIGNvbnZlcnQgdG8gd2FzdGVkICovCisJCWMtPndhc3RlZF9zaXplICs9IG9sZGZyZWU7CisJCWplYi0+d2FzdGVkX3NpemUgKz0gb2xkZnJlZTsKKwkJYy0+ZGlydHlfc2l6ZSAtPSBvbGRmcmVlOworCQlqZWItPmRpcnR5X3NpemUgLT0gb2xkZnJlZTsKKwl9CiAKIAlqZmZzMl9kYmdfZHVtcF9ibG9ja19saXN0c19ub2xvY2soYyk7CiAJamZmczJfZGJnX2FjY3Rfc2FuaXR5X2NoZWNrX25vbG9jayhjLGplYik7CiAJamZmczJfZGJnX2FjY3RfcGFyYW5vaWFfY2hlY2tfbm9sb2NrKGMsIGplYik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICoqamZmczJfaW5jb3JlX3JlcGxhY2VfcmF3KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJCQkJCSAgICBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwKKwkJCQkJCQkgICAgc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3LAorCQkJCQkJCSAgICB1bmlvbiBqZmZzMl9ub2RlX3VuaW9uICpub2RlKQoreworCXN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKmZyYWc7CisJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpmZDsKKworCWRiZ19ub2RlcmVmKCJpbmNvcmVfcmVwbGFjZV9yYXc6IG5vZGUgYXQgJXAgaXMgeyUwNHgsJTA0eH1cbiIsCisJCSAgICBub2RlLCBqZTE2X3RvX2NwdShub2RlLT51Lm1hZ2ljKSwgamUxNl90b19jcHUobm9kZS0+dS5ub2RldHlwZSkpOworCisJQlVHX09OKGplMTZfdG9fY3B1KG5vZGUtPnUubWFnaWMpICE9IDB4MTk4NSAmJgorCSAgICAgICBqZTE2X3RvX2NwdShub2RlLT51Lm1hZ2ljKSAhPSAwKTsKKworCXN3aXRjaCAoamUxNl90b19jcHUobm9kZS0+dS5ub2RldHlwZSkpIHsKKwljYXNlIEpGRlMyX05PREVUWVBFX0lOT0RFOgorCQlpZiAoZi0+bWV0YWRhdGEgJiYgZi0+bWV0YWRhdGEtPnJhdyA9PSByYXcpIHsKKwkJCWRiZ19ub2RlcmVmKCJXaWxsIHJlcGxhY2UgLT5yYXcgaW4gZi0+bWV0YWRhdGEgYXQgJXBcbiIsIGYtPm1ldGFkYXRhKTsKKwkJCXJldHVybiAmZi0+bWV0YWRhdGEtPnJhdzsKKwkJfQorCQlmcmFnID0gamZmczJfbG9va3VwX25vZGVfZnJhZygmZi0+ZnJhZ3RyZWUsIGplMzJfdG9fY3B1KG5vZGUtPmkub2Zmc2V0KSk7CisJCUJVR19PTighZnJhZyk7CisJCS8qIEZpbmQgYSBmcmFnIHdoaWNoIHJlZmVycyB0byB0aGUgZnVsbF9kbm9kZSB3ZSB3YW50IHRvIG1vZGlmeSAqLworCQl3aGlsZSAoIWZyYWctPm5vZGUgfHwgZnJhZy0+bm9kZS0+cmF3ICE9IHJhdykgeworCQkJZnJhZyA9IGZyYWdfbmV4dChmcmFnKTsKKwkJCUJVR19PTighZnJhZyk7CisJCX0KKwkJZGJnX25vZGVyZWYoIldpbGwgcmVwbGFjZSAtPnJhdyBpbiBmdWxsX2Rub2RlIGF0ICVwXG4iLCBmcmFnLT5ub2RlKTsKKwkJcmV0dXJuICZmcmFnLT5ub2RlLT5yYXc7CisKKwljYXNlIEpGRlMyX05PREVUWVBFX0RJUkVOVDoKKwkJZm9yIChmZCA9IGYtPmRlbnRzOyBmZDsgZmQgPSBmZC0+bmV4dCkgeworCQkJaWYgKGZkLT5yYXcgPT0gcmF3KSB7CisJCQkJZGJnX25vZGVyZWYoIldpbGwgcmVwbGFjZSAtPnJhdyBpbiBmdWxsX2RpcmVudCBhdCAlcFxuIiwgZmQpOworCQkJCXJldHVybiAmZmQtPnJhdzsKKwkJCX0KKwkJfQorCQlCVUcoKTsKKworCWRlZmF1bHQ6CisJCWRiZ19ub2RlcmVmKCJEb24ndCBjYXJlIGFib3V0IHJlcGxhY2luZyByYXcgZm9yIG5vZGV0eXBlICV4XG4iLAorCQkJICAgIGplMTZfdG9fY3B1KG5vZGUtPnUubm9kZXR5cGUpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBOVUxMOworfQorCiAvKiBSZWNvdmVyIGZyb20gZmFpbHVyZSB0byB3cml0ZSB3YnVmLiBSZWNvdmVyIHRoZSBub2RlcyB1cCB0byB0aGUKICAqIHdidWYsIG5vdCB0aGUgb25lIHdoaWNoIHdlIHdlcmUgc3RhcnRpbmcgdG8gdHJ5IHRvIHdyaXRlLiAqLwogCiBzdGF0aWMgdm9pZCBqZmZzMl93YnVmX3JlY292ZXIoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCiB7CiAJc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwgKm5ld19qZWI7Ci0Jc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqKmZpcnN0X3JhdywgKipyYXc7CisJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3LCAqbmV4dCwgKmZpcnN0X3JhdyA9IE5VTEw7CiAJc2l6ZV90IHJldGxlbjsKIAlpbnQgcmV0OworCWludCBucl9yZWZpbGUgPSAwOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAl1aW50MzJfdCBzdGFydCwgZW5kLCBvZnMsIGxlbjsKIAotCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQogCWplYiA9ICZjLT5ibG9ja3NbYy0+d2J1Zl9vZnMgLyBjLT5zZWN0b3Jfc2l6ZV07CiAKKwlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAJamZmczJfYmxvY2tfcmVmaWxlKGMsIGplYiwgUkVGSUxFX05PVEVNUFRZKTsKKwlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKworCUJVR19PTighcmVmX29ic29sZXRlKGplYi0+bGFzdF9ub2RlKSk7CiAKIAkvKiBGaW5kIHRoZSBmaXJzdCBub2RlIHRvIGJlIHJlY292ZXJlZCwgYnkgc2tpcHBpbmcgb3ZlciBldmVyeQogCSAgIG5vZGUgd2hpY2ggZW5kcyBiZWZvcmUgdGhlIHdidWYgc3RhcnRzLCBvciB3aGljaCBpcyBvYnNvbGV0ZS4gKi8KLQlmaXJzdF9yYXcgPSAmamViLT5maXJzdF9ub2RlOwotCXdoaWxlICgqZmlyc3RfcmF3ICYmCi0JICAgICAgIChyZWZfb2Jzb2xldGUoKmZpcnN0X3JhdykgfHwKLQkJKHJlZl9vZmZzZXQoKmZpcnN0X3JhdykrcmVmX3RvdGxlbihjLCBqZWIsICpmaXJzdF9yYXcpKSA8IGMtPndidWZfb2ZzKSkgewotCQlEMShwcmludGsoS0VSTl9ERUJVRyAiU2tpcHBpbmcgbm9kZSBhdCAweCUwOHgoJWQpLTB4JTA4eCB3aGljaCBpcyBlaXRoZXIgYmVmb3JlIDB4JTA4eCBvciBvYnNvbGV0ZVxuIiwKLQkJCSAgcmVmX29mZnNldCgqZmlyc3RfcmF3KSwgcmVmX2ZsYWdzKCpmaXJzdF9yYXcpLAotCQkJICAocmVmX29mZnNldCgqZmlyc3RfcmF3KSArIHJlZl90b3RsZW4oYywgamViLCAqZmlyc3RfcmF3KSksCi0JCQkgIGMtPndidWZfb2ZzKSk7Ci0JCWZpcnN0X3JhdyA9ICYoKmZpcnN0X3JhdyktPm5leHRfcGh5czsKKwlmb3IgKG5leHQgPSByYXcgPSBqZWItPmZpcnN0X25vZGU7IG5leHQ7IHJhdyA9IG5leHQpIHsKKwkJbmV4dCA9IHJlZl9uZXh0KHJhdyk7CisKKwkJaWYgKHJlZl9vYnNvbGV0ZShyYXcpIHx8IAorCQkgICAgKG5leHQgJiYgcmVmX29mZnNldChuZXh0KSA8PSBjLT53YnVmX29mcykpIHsKKwkJCWRiZ19ub2RlcmVmKCJTa2lwcGluZyBub2RlIGF0IDB4JTA4eCglZCktMHglMDh4IHdoaWNoIGlzIGVpdGhlciBiZWZvcmUgMHglMDh4IG9yIG9ic29sZXRlXG4iLAorCQkJCSAgICByZWZfb2Zmc2V0KHJhdyksIHJlZl9mbGFncyhyYXcpLAorCQkJCSAgICAocmVmX29mZnNldChyYXcpICsgcmVmX3RvdGxlbihjLCBqZWIsIHJhdykpLAorCQkJCSAgICBjLT53YnVmX29mcyk7CisJCQljb250aW51ZTsKKwkJfQorCQlkYmdfbm9kZXJlZigiRmlyc3Qgbm9kZSB0byBiZSByZWNvdmVyZWQgaXMgYXQgMHglMDh4KCVkKS0weCUwOHhcbiIsCisJCQkgICAgcmVmX29mZnNldChyYXcpLCByZWZfZmxhZ3MocmF3KSwKKwkJCSAgICAocmVmX29mZnNldChyYXcpICsgcmVmX3RvdGxlbihjLCBqZWIsIHJhdykpKTsKKworCQlmaXJzdF9yYXcgPSByYXc7CisJCWJyZWFrOwogCX0KIAotCWlmICghKmZpcnN0X3JhdykgeworCWlmICghZmlyc3RfcmF3KSB7CiAJCS8qIEFsbCBub2RlcyB3ZXJlIG9ic29sZXRlLiBOb3RoaW5nIHRvIHJlY292ZXIuICovCiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJObyBub24tb2Jzb2xldGUgbm9kZXMgdG8gYmUgcmVjb3ZlcmVkLiBKdXN0IGZpbGluZyBibG9jayBiYWRcbiIpKTsKLQkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJCWMtPndidWZfbGVuID0gMDsKIAkJcmV0dXJuOwogCX0KIAotCXN0YXJ0ID0gcmVmX29mZnNldCgqZmlyc3RfcmF3KTsKLQllbmQgPSByZWZfb2Zmc2V0KCpmaXJzdF9yYXcpICsgcmVmX3RvdGxlbihjLCBqZWIsICpmaXJzdF9yYXcpOworCXN0YXJ0ID0gcmVmX29mZnNldChmaXJzdF9yYXcpOworCWVuZCA9IHJlZl9vZmZzZXQoamViLT5sYXN0X25vZGUpOworCW5yX3JlZmlsZSA9IDE7CiAKLQkvKiBGaW5kIHRoZSBsYXN0IG5vZGUgdG8gYmUgcmVjb3ZlcmVkICovCi0JcmF3ID0gZmlyc3RfcmF3OwotCXdoaWxlICgoKnJhdykpIHsKLQkJaWYgKCFyZWZfb2Jzb2xldGUoKnJhdykpCi0JCQllbmQgPSByZWZfb2Zmc2V0KCpyYXcpICsgcmVmX3RvdGxlbihjLCBqZWIsICpyYXcpOworCS8qIENvdW50IHRoZSBudW1iZXIgb2YgcmVmcyB3aGljaCBuZWVkIHRvIGJlIGNvcGllZCAqLworCXdoaWxlICgocmF3ID0gcmVmX25leHQocmF3KSkgIT0gamViLT5sYXN0X25vZGUpCisJCW5yX3JlZmlsZSsrOwogCi0JCXJhdyA9ICYoKnJhdyktPm5leHRfcGh5czsKLQl9Ci0Jc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0KLQlEMShwcmludGsoS0VSTl9ERUJVRyAid2J1ZiByZWNvdmVyICUwOHgtJTA4eFxuIiwgc3RhcnQsIGVuZCkpOworCWRiZ19ub2RlcmVmKCJ3YnVmIHJlY292ZXIgJTA4eC0lMDh4ICglZCBieXRlcyBpbiAlZCBub2RlcylcbiIsCisJCSAgICBzdGFydCwgZW5kLCBlbmQgLSBzdGFydCwgbnJfcmVmaWxlKTsKIAogCWJ1ZiA9IE5VTEw7CiAJaWYgKHN0YXJ0IDwgYy0+d2J1Zl9vZnMpIHsKQEAgLTIzMywyOCArMjk0LDM3IEBACiAJCX0KIAogCQkvKiBEbyB0aGUgcmVhZC4uLiAqLwotCQlpZiAoamZmczJfY2xlYW5tYXJrZXJfb29iKGMpKQotCQkJcmV0ID0gYy0+bXRkLT5yZWFkX2VjYyhjLT5tdGQsIHN0YXJ0LCBjLT53YnVmX29mcyAtIHN0YXJ0LCAmcmV0bGVuLCBidWYsIE5VTEwsIGMtPm9vYmluZm8pOwotCQllbHNlCi0JCQlyZXQgPSBjLT5tdGQtPnJlYWQoYy0+bXRkLCBzdGFydCwgYy0+d2J1Zl9vZnMgLSBzdGFydCwgJnJldGxlbiwgYnVmKTsKKwkJcmV0ID0gYy0+bXRkLT5yZWFkKGMtPm10ZCwgc3RhcnQsIGMtPndidWZfb2ZzIC0gc3RhcnQsICZyZXRsZW4sIGJ1Zik7CiAKLQkJaWYgKHJldCA9PSAtRUJBRE1TRyAmJiByZXRsZW4gPT0gYy0+d2J1Zl9vZnMgLSBzdGFydCkgewotCQkJLyogRUNDIHJlY292ZXJlZCAqLworCQkvKiBFQ0MgcmVjb3ZlcmVkID8gKi8KKwkJaWYgKChyZXQgPT0gLUVVQ0xFQU4gfHwgcmV0ID09IC1FQkFETVNHKSAmJgorCQkgICAgKHJldGxlbiA9PSBjLT53YnVmX29mcyAtIHN0YXJ0KSkKIAkJCXJldCA9IDA7Ci0JCX0KKwogCQlpZiAocmV0IHx8IHJldGxlbiAhPSBjLT53YnVmX29mcyAtIHN0YXJ0KSB7CiAJCQlwcmludGsoS0VSTl9DUklUICJPbGQgZGF0YSBhcmUgYWxyZWFkeSBsb3N0IGluIHdidWYgcmVjb3ZlcnkuIERhdGEgbG9zcyBlbnN1ZXMuXG4iKTsKIAogCQkJa2ZyZWUoYnVmKTsKIAkJCWJ1ZiA9IE5VTEw7CiAJCXJlYWRfZmFpbGVkOgotCQkJZmlyc3RfcmF3ID0gJigqZmlyc3RfcmF3KS0+bmV4dF9waHlzOworCQkJZmlyc3RfcmF3ID0gcmVmX25leHQoZmlyc3RfcmF3KTsKKwkJCW5yX3JlZmlsZS0tOworCQkJd2hpbGUgKGZpcnN0X3JhdyAmJiByZWZfb2Jzb2xldGUoZmlyc3RfcmF3KSkgeworCQkJCWZpcnN0X3JhdyA9IHJlZl9uZXh0KGZpcnN0X3Jhdyk7CisJCQkJbnJfcmVmaWxlLS07CisJCQl9CisKIAkJCS8qIElmIHRoaXMgd2FzIHRoZSBvbmx5IG5vZGUgdG8gYmUgcmVjb3ZlcmVkLCBnaXZlIHVwICovCi0JCQlpZiAoISgqZmlyc3RfcmF3KSkKKwkJCWlmICghZmlyc3RfcmF3KSB7CisJCQkJYy0+d2J1Zl9sZW4gPSAwOwogCQkJCXJldHVybjsKKwkJCX0KIAogCQkJLyogSXQgd2Fzbid0LiBHbyBvbiBhbmQgdHJ5IHRvIHJlY292ZXIgbm9kZXMgY29tcGxldGUgaW4gdGhlIHdidWYgKi8KLQkJCXN0YXJ0ID0gcmVmX29mZnNldCgqZmlyc3RfcmF3KTsKKwkJCXN0YXJ0ID0gcmVmX29mZnNldChmaXJzdF9yYXcpOworCQkJZGJnX25vZGVyZWYoIndidWYgbm93IHJlY292ZXIgJTA4eC0lMDh4ICglZCBieXRlcyBpbiAlZCBub2RlcylcbiIsCisJCQkJICAgIHN0YXJ0LCBlbmQsIGVuZCAtIHN0YXJ0LCBucl9yZWZpbGUpOworCiAJCX0gZWxzZSB7CiAJCQkvKiBSZWFkIHN1Y2NlZWRlZC4gQ29weSB0aGUgcmVtYWluaW5nIGRhdGEgZnJvbSB0aGUgd2J1ZiAqLwogCQkJbWVtY3B5KGJ1ZiArIChjLT53YnVmX29mcyAtIHN0YXJ0KSwgYy0+d2J1ZiwgZW5kIC0gYy0+d2J1Zl9vZnMpOwpAQCAtMjYzLDE0ICszMzMsMjMgQEAKIAkvKiBPSy4uLiB3ZSdyZSB0byByZXdyaXRlIChlbmQtc3RhcnQpIGJ5dGVzIG9mIGRhdGEgZnJvbSBmaXJzdF9yYXcgb253YXJkcy4KIAkgICBFaXRoZXIgJ2J1ZicgY29udGFpbnMgdGhlIGRhdGEsIG9yIHdlIGZpbmQgaXQgaW4gdGhlIHdidWYgKi8KIAotCiAJLyogLi4uIGFuZCBnZXQgYW4gYWxsb2NhdGlvbiBvZiBzcGFjZSBmcm9tIGEgc2hpbnkgbmV3IGJsb2NrIGluc3RlYWQgKi8KLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIGVuZC1zdGFydCwgJm9mcywgJmxlbiwgSkZGUzJfU1VNTUFSWV9OT1NVTV9TSVpFKTsKKwlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIGVuZC1zdGFydCwgJmxlbiwgSkZGUzJfU1VNTUFSWV9OT1NVTV9TSVpFKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSBmb3Igd2J1ZiByZWNvdmVyeS4gRGF0YSBsb3NzIGVuc3Vlcy5cbiIpOwogCQlrZnJlZShidWYpOwogCQlyZXR1cm47CiAJfQorCisJcmV0ID0gamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBjLT5uZXh0YmxvY2ssIG5yX3JlZmlsZSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gYWxsb2NhdGUgbm9kZSByZWZzIGZvciB3YnVmIHJlY292ZXJ5LiBEYXRhIGxvc3MgZW5zdWVzLlxuIik7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlvZnMgPSB3cml0ZV9vZnMoYyk7CisKIAlpZiAoZW5kLXN0YXJ0ID49IGMtPndidWZfcGFnZXNpemUpIHsKIAkJLyogTmVlZCB0byBkbyBhbm90aGVyIHdyaXRlIGltbWVkaWF0ZWx5LCBidXQgaXQncyBwb3NzaWJsZQogCQkgICB0aGF0IHRoaXMgaXMganVzdCBiZWNhdXNlIHRoZSB3YnVmIGl0c2VsZiBpcyBjb21wbGV0ZWx5CkBAIC0yODgsMzYgKzM2NywyMiBAQAogCQlpZiAoYnJlYWttZSsrID09IDIwKSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkZha2luZyB3cml0ZSBlcnJvciBhdCAweCUwOHhcbiIsIG9mcyk7CiAJCQlicmVha21lID0gMDsKLQkJCWMtPm10ZC0+d3JpdGVfZWNjKGMtPm10ZCwgb2ZzLCB0b3dyaXRlLCAmcmV0bGVuLAotCQkJCQkgIGJyb2tlbmJ1ZiwgTlVMTCwgYy0+b29iaW5mbyk7CisJCQljLT5tdGQtPndyaXRlKGMtPm10ZCwgb2ZzLCB0b3dyaXRlLCAmcmV0bGVuLAorCQkJCSAgICAgIGJyb2tlbmJ1Zik7CiAJCQlyZXQgPSAtRUlPOwogCQl9IGVsc2UKICNlbmRpZgotCQlpZiAoamZmczJfY2xlYW5tYXJrZXJfb29iKGMpKQotCQkJcmV0ID0gYy0+bXRkLT53cml0ZV9lY2MoYy0+bXRkLCBvZnMsIHRvd3JpdGUsICZyZXRsZW4sCi0JCQkJCQlyZXdyaXRlX2J1ZiwgTlVMTCwgYy0+b29iaW5mbyk7Ci0JCWVsc2UKLQkJCXJldCA9IGMtPm10ZC0+d3JpdGUoYy0+bXRkLCBvZnMsIHRvd3JpdGUsICZyZXRsZW4sIHJld3JpdGVfYnVmKTsKKwkJCXJldCA9IGMtPm10ZC0+d3JpdGUoYy0+bXRkLCBvZnMsIHRvd3JpdGUsICZyZXRsZW4sCisJCQkJCSAgICByZXdyaXRlX2J1Zik7CiAKIAkJaWYgKHJldCB8fCByZXRsZW4gIT0gdG93cml0ZSkgewogCQkJLyogQXJnaC4gV2UgdHJpZWQuIFJlYWxseSB3ZSBkaWQuICovCiAJCQlwcmludGsoS0VSTl9DUklUICJSZWNvdmVyeSBvZiB3YnVmIGZhaWxlZCBkdWUgdG8gYSBzZWNvbmQgd3JpdGUgZXJyb3JcbiIpOwogCQkJa2ZyZWUoYnVmKTsKIAotCQkJaWYgKHJldGxlbikgewotCQkJCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzI7CisJCQlpZiAocmV0bGVuKQorCQkJCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBvZnMgfCBSRUZfT0JTT0xFVEUsIHJlZl90b3RsZW4oYywgamViLCBmaXJzdF9yYXcpLCBOVUxMKTsKIAotCQkJCXJhdzIgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKTsKLQkJCQlpZiAoIXJhdzIpCi0JCQkJCXJldHVybjsKLQotCQkJCXJhdzItPmZsYXNoX29mZnNldCA9IG9mcyB8IFJFRl9PQlNPTEVURTsKLQkJCQlyYXcyLT5fX3RvdGxlbiA9IHJlZl90b3RsZW4oYywgamViLCAqZmlyc3RfcmF3KTsKLQkJCQlyYXcyLT5uZXh0X3BoeXMgPSBOVUxMOwotCQkJCXJhdzItPm5leHRfaW5faW5vID0gTlVMTDsKLQotCQkJCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCByYXcyKTsKLQkJCX0KIAkJCXJldHVybjsKIAkJfQogCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlY292ZXJ5IG9mIHdidWYgc3VjY2VlZGVkIHRvICUwOHhcbiIsIG9mcyk7CkBAIC0zMjYsMTIgKzM5MSwxMCBAQAogCQljLT53YnVmX29mcyA9IG9mcyArIHRvd3JpdGU7CiAJCW1lbW1vdmUoYy0+d2J1ZiwgcmV3cml0ZV9idWYgKyB0b3dyaXRlLCBjLT53YnVmX2xlbik7CiAJCS8qIERvbid0IG11Y2sgYWJvdXQgd2l0aCBjLT53YnVmX2lub2Rlcy4gRmFsc2UgcG9zaXRpdmVzIGFyZSBoYXJtbGVzcy4gKi8KLQkJa2ZyZWUoYnVmKTsKIAl9IGVsc2UgewogCQkvKiBPSywgbm93IHdlJ3JlIGxlZnQgd2l0aCB0aGUgZHJlZ3MgaW4gd2hpY2hldmVyIGJ1ZmZlciB3ZSdyZSB1c2luZyAqLwogCQlpZiAoYnVmKSB7CiAJCQltZW1jcHkoYy0+d2J1ZiwgYnVmLCBlbmQtc3RhcnQpOwotCQkJa2ZyZWUoYnVmKTsKIAkJfSBlbHNlIHsKIAkJCW1lbW1vdmUoYy0+d2J1ZiwgYy0+d2J1ZiArIChzdGFydCAtIGMtPndidWZfb2ZzKSwgZW5kIC0gc3RhcnQpOwogCQl9CkBAIC0zNDMsNjIgKzQwNiwxMTEgQEAKIAluZXdfamViID0gJmMtPmJsb2Nrc1tvZnMgLyBjLT5zZWN0b3Jfc2l6ZV07CiAKIAlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0JaWYgKG5ld19qZWItPmZpcnN0X25vZGUpIHsKLQkJLyogT2RkLCBidXQgcG9zc2libGUgd2l0aCBTVCBmbGFzaCBsYXRlciBtYXliZSAqLwotCQluZXdfamViLT5sYXN0X25vZGUtPm5leHRfcGh5cyA9ICpmaXJzdF9yYXc7Ci0JfSBlbHNlIHsKLQkJbmV3X2plYi0+Zmlyc3Rfbm9kZSA9ICpmaXJzdF9yYXc7Ci0JfQotCi0JcmF3ID0gZmlyc3RfcmF3OwotCXdoaWxlICgqcmF3KSB7Ci0JCXVpbnQzMl90IHJhd2xlbiA9IHJlZl90b3RsZW4oYywgamViLCAqcmF3KTsKKwlmb3IgKHJhdyA9IGZpcnN0X3JhdzsgcmF3ICE9IGplYi0+bGFzdF9ub2RlOyByYXcgPSByZWZfbmV4dChyYXcpKSB7CisJCXVpbnQzMl90IHJhd2xlbiA9IHJlZl90b3RsZW4oYywgamViLCByYXcpOworCQlzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljOworCQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpuZXdfcmVmOworCQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICoqYWRqdXN0X3JlZiA9IE5VTEw7CisJCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0gTlVMTDsKIAogCQlEMShwcmludGsoS0VSTl9ERUJVRyAiUmVmaWxpbmcgYmxvY2sgb2YgJTA4eCBhdCAlMDh4KCVkKSB0byAlMDh4XG4iLAotCQkJICByYXdsZW4sIHJlZl9vZmZzZXQoKnJhdyksIHJlZl9mbGFncygqcmF3KSwgb2ZzKSk7CisJCQkgIHJhd2xlbiwgcmVmX29mZnNldChyYXcpLCByZWZfZmxhZ3MocmF3KSwgb2ZzKSk7CiAKLQkJaWYgKHJlZl9vYnNvbGV0ZSgqcmF3KSkgewotCQkJLyogU2hvdWxkbid0IHJlYWxseSBoYXBwZW4gbXVjaCAqLwotCQkJbmV3X2plYi0+ZGlydHlfc2l6ZSArPSByYXdsZW47Ci0JCQluZXdfamViLT5mcmVlX3NpemUgLT0gcmF3bGVuOwotCQkJYy0+ZGlydHlfc2l6ZSArPSByYXdsZW47Ci0JCX0gZWxzZSB7Ci0JCQluZXdfamViLT51c2VkX3NpemUgKz0gcmF3bGVuOwotCQkJbmV3X2plYi0+ZnJlZV9zaXplIC09IHJhd2xlbjsKKwkJaWMgPSBqZmZzMl9yYXdfcmVmX3RvX2ljKHJhdyk7CisKKwkJLyogSWNrLiBUaGlzIFhBVFRSIG1lc3Mgc2hvdWxkIGJlIGZpeGVkIHNob3J0bHkuLi4gKi8KKwkJaWYgKGljICYmIGljLT5jbGFzcyA9PSBSQVdOT0RFX0NMQVNTX1hBVFRSX0RBVFVNKSB7CisJCQlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkID0gKHZvaWQgKilpYzsKKwkJCUJVR19PTih4ZC0+bm9kZSAhPSByYXcpOworCQkJYWRqdXN0X3JlZiA9ICZ4ZC0+bm9kZTsKKwkJCXJhdy0+bmV4dF9pbl9pbm8gPSBOVUxMOworCQkJaWMgPSBOVUxMOworCQl9IGVsc2UgaWYgKGljICYmIGljLT5jbGFzcyA9PSBSQVdOT0RFX0NMQVNTX1hBVFRSX1JFRikgeworCQkJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ciA9ICh2b2lkICopaWM7CisJCQlCVUdfT04oeHItPm5vZGUgIT0gcmF3KTsKKwkJCWFkanVzdF9yZWYgPSAmeHItPm5vZGU7CisJCQlyYXctPm5leHRfaW5faW5vID0gTlVMTDsKKwkJCWljID0gTlVMTDsKKwkJfSBlbHNlIGlmIChpYyAmJiBpYy0+Y2xhc3MgPT0gUkFXTk9ERV9DTEFTU19JTk9ERV9DQUNIRSkgeworCQkJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqKnAgPSAmaWMtPm5vZGVzOworCisJCQkvKiBSZW1vdmUgdGhlIG9sZCBub2RlIGZyb20gdGhlIHBlci1pbm9kZSBsaXN0ICovCisJCQl3aGlsZSAoKnAgJiYgKnAgIT0gKHZvaWQgKilpYykgeworCQkJCWlmICgqcCA9PSByYXcpIHsKKwkJCQkJKCpwKSA9IChyYXctPm5leHRfaW5faW5vKTsKKwkJCQkJcmF3LT5uZXh0X2luX2lubyA9IE5VTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwID0gJigoKnApLT5uZXh0X2luX2lubyk7CisJCQl9CisKKwkJCWlmIChpYy0+c3RhdGUgPT0gSU5PX1NUQVRFX1BSRVNFTlQgJiYgIXJlZl9vYnNvbGV0ZShyYXcpKSB7CisJCQkJLyogSWYgaXQncyBhbiBpbi1jb3JlIGlub2RlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0IGFueQorCQkJCSAgIGZ1bGxfZGlyZW50IG9yIGZ1bGxfZG5vZGUgc3RydWN0dXJlIHRvIHBvaW50IHRvIHRoZQorCQkJCSAgIG5ldyB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIG9sZCAqLworCQkJCWYgPSBqZmZzMl9nY19mZXRjaF9pbm9kZShjLCBpYy0+aW5vLCBpYy0+bmxpbmspOworCQkJCWlmIChJU19FUlIoZikpIHsKKwkJCQkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbjsgaXQgX211c3RfIGJlIHByZXNlbnQgKi8KKwkJCQkJSkZGUzJfRVJST1IoIkZhaWxlZCB0byBpZ2V0KCkgaW5vICMldSwgZXJyICVsZFxuIiwKKwkJCQkJCSAgICBpYy0+aW5vLCBQVFJfRVJSKGYpKTsKKwkJCQkJQlVHKCk7CisJCQkJfQorCQkJCS8qIFdlIGRvbid0IGxvY2sgZi0+c2VtLiBUaGVyZSdzIGEgbnVtYmVyIG9mIHdheXMgd2UgY291bGQKKwkJCQkgICBlbmQgdXAgaW4gaGVyZSB3aXRoIGl0IGFscmVhZHkgYmVpbmcgbG9ja2VkLCBhbmQgbm9ib2R5J3MKKwkJCQkgICBnb2luZyB0byBtb2RpZnkgaXQgb24gdXMgYW55d2F5IGJlY2F1c2Ugd2UgaG9sZCB0aGUKKwkJCQkgICBhbGxvY19zZW0uIFdlJ3JlIG9ubHkgY2hhbmdpbmcgb25lIC0+cmF3IHBvaW50ZXIgdG9vLAorCQkJCSAgIHdoaWNoIHdlIGNhbiBnZXQgYXdheSB3aXRoIHdpdGhvdXQgdXBzZXR0aW5nIHJlYWRlcnMuICovCisJCQkJYWRqdXN0X3JlZiA9IGpmZnMyX2luY29yZV9yZXBsYWNlX3JhdyhjLCBmLCByYXcsCisJCQkJCQkJCSAgICAgICh2b2lkICopKGJ1Zj86Yy0+d2J1ZikgKyAocmVmX29mZnNldChyYXcpIC0gc3RhcnQpKTsKKwkJCX0gZWxzZSBpZiAodW5saWtlbHkoaWMtPnN0YXRlICE9IElOT19TVEFURV9QUkVTRU5UICYmCisJCQkJCSAgICBpYy0+c3RhdGUgIT0gSU5PX1NUQVRFX0NIRUNLRURBQlNFTlQgJiYKKwkJCQkJICAgIGljLT5zdGF0ZSAhPSBJTk9fU1RBVEVfR0MpKSB7CisJCQkJSkZGUzJfRVJST1IoIklub2RlICMldSBpcyBpbiBzdHJhbmdlIHN0YXRlICVkIVxuIiwgaWMtPmlubywgaWMtPnN0YXRlKTsKKwkJCQlCVUcoKTsKKwkJCX0KKwkJfQorCisJCW5ld19yZWYgPSBqZmZzMl9saW5rX25vZGVfcmVmKGMsIG5ld19qZWIsIG9mcyB8IHJlZl9mbGFncyhyYXcpLCByYXdsZW4sIGljKTsKKworCQlpZiAoYWRqdXN0X3JlZikgeworCQkJQlVHX09OKCphZGp1c3RfcmVmICE9IHJhdyk7CisJCQkqYWRqdXN0X3JlZiA9IG5ld19yZWY7CisJCX0KKwkJaWYgKGYpCisJCQlqZmZzMl9nY19yZWxlYXNlX2lub2RlKGMsIGYpOworCisJCWlmICghcmVmX29ic29sZXRlKHJhdykpIHsKIAkJCWplYi0+ZGlydHlfc2l6ZSArPSByYXdsZW47CiAJCQlqZWItPnVzZWRfc2l6ZSAgLT0gcmF3bGVuOwogCQkJYy0+ZGlydHlfc2l6ZSArPSByYXdsZW47CisJCQljLT51c2VkX3NpemUgLT0gcmF3bGVuOworCQkJcmF3LT5mbGFzaF9vZmZzZXQgPSByZWZfb2Zmc2V0KHJhdykgfCBSRUZfT0JTT0xFVEU7CisJCQlCVUdfT04ocmF3LT5uZXh0X2luX2lubyk7CiAJCX0KLQkJYy0+ZnJlZV9zaXplIC09IHJhd2xlbjsKLQkJKCpyYXcpLT5mbGFzaF9vZmZzZXQgPSBvZnMgfCByZWZfZmxhZ3MoKnJhdyk7CiAJCW9mcyArPSByYXdsZW47Ci0JCW5ld19qZWItPmxhc3Rfbm9kZSA9ICpyYXc7Ci0KLQkJcmF3ID0gJigqcmF3KS0+bmV4dF9waHlzOwogCX0KIAorCWtmcmVlKGJ1Zik7CisKIAkvKiBGaXggdXAgdGhlIG9yaWdpbmFsIGplYiBub3cgaXQncyBvbiB0aGUgYmFkX2xpc3QgKi8KLQkqZmlyc3RfcmF3ID0gTlVMTDsKLQlpZiAoZmlyc3RfcmF3ID09ICZqZWItPmZpcnN0X25vZGUpIHsKLQkJamViLT5sYXN0X25vZGUgPSBOVUxMOworCWlmIChmaXJzdF9yYXcgPT0gamViLT5maXJzdF9ub2RlKSB7CiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJGYWlsaW5nIGJsb2NrIGF0ICUwOHggaXMgbm93IGVtcHR5LiBNb3ZpbmcgdG8gZXJhc2VfcGVuZGluZ19saXN0XG4iLCBqZWItPm9mZnNldCkpOwogCQlsaXN0X2RlbCgmamViLT5saXN0KTsKIAkJbGlzdF9hZGQoJmplYi0+bGlzdCwgJmMtPmVyYXNlX3BlbmRpbmdfbGlzdCk7CiAJCWMtPm5yX2VyYXNpbmdfYmxvY2tzKys7CiAJCWpmZnMyX2VyYXNlX3BlbmRpbmdfdHJpZ2dlcihjKTsKIAl9Ci0JZWxzZQotCQlqZWItPmxhc3Rfbm9kZSA9IGNvbnRhaW5lcl9vZihmaXJzdF9yYXcsIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYsIG5leHRfcGh5cyk7CiAKIAlqZmZzMl9kYmdfYWNjdF9zYW5pdHlfY2hlY2tfbm9sb2NrKGMsIGplYik7Ci0gICAgICAgIGpmZnMyX2RiZ19hY2N0X3BhcmFub2lhX2NoZWNrX25vbG9jayhjLCBqZWIpOworCWpmZnMyX2RiZ19hY2N0X3BhcmFub2lhX2NoZWNrX25vbG9jayhjLCBqZWIpOwogCiAJamZmczJfZGJnX2FjY3Rfc2FuaXR5X2NoZWNrX25vbG9jayhjLCBuZXdfamViKTsKLSAgICAgICAgamZmczJfZGJnX2FjY3RfcGFyYW5vaWFfY2hlY2tfbm9sb2NrKGMsIG5ld19qZWIpOworCWpmZnMyX2RiZ19hY2N0X3BhcmFub2lhX2NoZWNrX25vbG9jayhjLCBuZXdfamViKTsKIAogCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwogCi0JRDEocHJpbnRrKEtFUk5fREVCVUcgIndidWYgcmVjb3ZlcnkgY29tcGxldGVkIE9LXG4iKSk7CisJRDEocHJpbnRrKEtFUk5fREVCVUcgIndidWYgcmVjb3ZlcnkgY29tcGxldGVkIE9LLiB3YnVmX29mcyAweCUwOHgsIGxlbiAweCV4XG4iLCBjLT53YnVmX29mcywgYy0+d2J1Zl9sZW4pKTsKKwogfQogCiAvKiBNZWFuaW5nIG9mIHBhZCBhcmd1bWVudDoKQEAgLTQxMiw2ICs1MjQsNyBAQAogCiBzdGF0aWMgaW50IF9famZmczJfZmx1c2hfd2J1ZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgaW50IHBhZCkKIHsKKwlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqd2J1Zl9qZWI7CiAJaW50IHJldDsKIAlzaXplX3QgcmV0bGVuOwogCkBAIC00MjksNiArNTQyLDEwIEBACiAJaWYgKCFjLT53YnVmX2xlbikJLyogYWxyZWFkeSBjaGVja2VkIGMtPndidWYgYWJvdmUgKi8KIAkJcmV0dXJuIDA7CiAKKwl3YnVmX2plYiA9ICZjLT5ibG9ja3NbYy0+d2J1Zl9vZnMgLyBjLT5zZWN0b3Jfc2l6ZV07CisJaWYgKGpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoYywgd2J1Zl9qZWIsIGMtPm5leHRibG9jay0+YWxsb2NhdGVkX3JlZnMgKyAxKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAkvKiBjbGFpbSByZW1haW5pbmcgc3BhY2Ugb24gdGhlIHBhZ2UKIAkgICB0aGlzIGhhcHBlbnMsIGlmIHdlIGhhdmUgYSBjaGFuZ2UgdG8gYSBuZXcgYmxvY2ssCiAJICAgb3IgaWYgZnN5bmMgZm9yY2VzIHVzIHRvIGZsdXNoIHRoZSB3cml0ZWJ1ZmZlci4KQEAgLTQ1OCwxNSArNTc1LDEyIEBACiAJaWYgKGJyZWFrbWUrKyA9PSAyMCkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIkZha2luZyB3cml0ZSBlcnJvciBhdCAweCUwOHhcbiIsIGMtPndidWZfb2ZzKTsKIAkJYnJlYWttZSA9IDA7Ci0JCWMtPm10ZC0+d3JpdGVfZWNjKGMtPm10ZCwgYy0+d2J1Zl9vZnMsIGMtPndidWZfcGFnZXNpemUsCi0JCQkJCSZyZXRsZW4sIGJyb2tlbmJ1ZiwgTlVMTCwgYy0+b29iaW5mbyk7CisJCWMtPm10ZC0+d3JpdGUoYy0+bXRkLCBjLT53YnVmX29mcywgYy0+d2J1Zl9wYWdlc2l6ZSwgJnJldGxlbiwKKwkJCSAgICAgIGJyb2tlbmJ1Zik7CiAJCXJldCA9IC1FSU87CiAJfSBlbHNlCiAjZW5kaWYKIAotCWlmIChqZmZzMl9jbGVhbm1hcmtlcl9vb2IoYykpCi0JCXJldCA9IGMtPm10ZC0+d3JpdGVfZWNjKGMtPm10ZCwgYy0+d2J1Zl9vZnMsIGMtPndidWZfcGFnZXNpemUsICZyZXRsZW4sIGMtPndidWYsIE5VTEwsIGMtPm9vYmluZm8pOwotCWVsc2UKIAkJcmV0ID0gYy0+bXRkLT53cml0ZShjLT5tdGQsIGMtPndidWZfb2ZzLCBjLT53YnVmX3BhZ2VzaXplLCAmcmV0bGVuLCBjLT53YnVmKTsKIAogCWlmIChyZXQgfHwgcmV0bGVuICE9IGMtPndidWZfcGFnZXNpemUpIHsKQEAgLTQ4MywzMiArNTk3LDM0IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0Jc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCiAJLyogQWRqdXN0IGZyZWUgc2l6ZSBvZiB0aGUgYmxvY2sgaWYgd2UgcGFkZGVkLiAqLwogCWlmIChwYWQpIHsKLQkJc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYjsKLQotCQlqZWIgPSAmYy0+YmxvY2tzW2MtPndidWZfb2ZzIC8gYy0+c2VjdG9yX3NpemVdOworCQl1aW50MzJfdCB3YXN0ZSA9IGMtPndidWZfcGFnZXNpemUgLSBjLT53YnVmX2xlbjsKIAogCQlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZmx1c2hfd2J1ZigpIGFkanVzdGluZyBmcmVlX3NpemUgb2YgJXNibG9jayBhdCAlMDh4XG4iLAotCQkJICAoamViPT1jLT5uZXh0YmxvY2spPyJuZXh0IjoiIiwgamViLT5vZmZzZXQpKTsKKwkJCSAgKHdidWZfamViPT1jLT5uZXh0YmxvY2spPyJuZXh0IjoiIiwgd2J1Zl9qZWItPm9mZnNldCkpOwogCiAJCS8qIHdidWZfcGFnZXNpemUgLSB3YnVmX2xlbiBpcyB0aGUgYW1vdW50IG9mIHNwYWNlIHRoYXQncyB0byBiZQogCQkgICBwYWRkZWQuIElmIHRoZXJlIGlzIGxlc3MgZnJlZSBzcGFjZSBpbiB0aGUgYmxvY2sgdGhhbiB0aGF0LAogCQkgICBzb21ldGhpbmcgc2NyZXdlZCB1cCAqLwotCQlpZiAoamViLT5mcmVlX3NpemUgPCAoYy0+d2J1Zl9wYWdlc2l6ZSAtIGMtPndidWZfbGVuKSkgeworCQlpZiAod2J1Zl9qZWItPmZyZWVfc2l6ZSA8IHdhc3RlKSB7CiAJCQlwcmludGsoS0VSTl9DUklUICJqZmZzMl9mbHVzaF93YnVmKCk6IEFjY291bnRpbmcgZXJyb3IuIHdidWYgYXQgMHglMDh4IGhhcyAweCUwM3ggYnl0ZXMsIDB4JTAzeCBsZWZ0LlxuIiwKLQkJCSAgICAgICBjLT53YnVmX29mcywgYy0+d2J1Zl9sZW4sIGMtPndidWZfcGFnZXNpemUtYy0+d2J1Zl9sZW4pOworCQkJICAgICAgIGMtPndidWZfb2ZzLCBjLT53YnVmX2xlbiwgd2FzdGUpOwogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiamZmczJfZmx1c2hfd2J1ZigpOiBCdXQgZnJlZV9zaXplIGZvciBibG9jayBhdCAweCUwOHggaXMgb25seSAweCUwOHhcbiIsCi0JCQkgICAgICAgamViLT5vZmZzZXQsIGplYi0+ZnJlZV9zaXplKTsKKwkJCSAgICAgICB3YnVmX2plYi0+b2Zmc2V0LCB3YnVmX2plYi0+ZnJlZV9zaXplKTsKIAkJCUJVRygpOwogCQl9Ci0JCWplYi0+ZnJlZV9zaXplIC09IChjLT53YnVmX3BhZ2VzaXplIC0gYy0+d2J1Zl9sZW4pOwotCQljLT5mcmVlX3NpemUgLT0gKGMtPndidWZfcGFnZXNpemUgLSBjLT53YnVmX2xlbik7Ci0JCWplYi0+d2FzdGVkX3NpemUgKz0gKGMtPndidWZfcGFnZXNpemUgLSBjLT53YnVmX2xlbik7Ci0JCWMtPndhc3RlZF9zaXplICs9IChjLT53YnVmX3BhZ2VzaXplIC0gYy0+d2J1Zl9sZW4pOwotCX0KKworCQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisKKwkJamZmczJfbGlua19ub2RlX3JlZihjLCB3YnVmX2plYiwgKGMtPndidWZfb2ZzICsgYy0+d2J1Zl9sZW4pIHwgUkVGX09CU09MRVRFLCB3YXN0ZSwgTlVMTCk7CisJCS8qIEZJWE1FOiB0aGF0IG1hZGUgaXQgY291bnQgYXMgZGlydHkuIENvbnZlcnQgdG8gd2FzdGVkICovCisJCXdidWZfamViLT5kaXJ0eV9zaXplIC09IHdhc3RlOworCQljLT5kaXJ0eV9zaXplIC09IHdhc3RlOworCQl3YnVmX2plYi0+d2FzdGVkX3NpemUgKz0gd2FzdGU7CisJCWMtPndhc3RlZF9zaXplICs9IHdhc3RlOworCX0gZWxzZQorCQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAKIAkvKiBTdGljayBhbnkgbm93LW9ic29sZXRlZCBibG9ja3Mgb24gdGhlIGVyYXNlX3BlbmRpbmdfbGlzdCAqLwogCWpmZnMyX3JlZmlsZV93YnVmX2Jsb2NrcyhjKTsKQEAgLTYwMywyMCArNzE5LDMwIEBACiAKIAlyZXR1cm4gcmV0OwogfQotaW50IGpmZnMyX2ZsYXNoX3dyaXRldihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgY29uc3Qgc3RydWN0IGt2ZWMgKmludmVjcywgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbiwgdWludDMyX3QgaW5vKQotewotCXN0cnVjdCBrdmVjIG91dHZlY3NbM107Ci0JdWludDMyX3QgdG90bGVuID0gMDsKLQl1aW50MzJfdCBzcGxpdF9vZnMgPSAwOwotCXVpbnQzMl90IG9sZF90b3RsZW47Ci0JaW50IHJldCwgc3BsaXR2ZWMgPSAtMTsKLQlpbnQgaW52ZWMsIG91dHZlYzsKLQlzaXplX3Qgd2J1Zl9yZXRsZW47Ci0JdW5zaWduZWQgY2hhciAqd2J1Zl9wdHI7Ci0Jc2l6ZV90IGRvbmVsZW4gPSAwOwotCXVpbnQzMl90IG91dHZlY190byA9IHRvOwogCi0JLyogSWYgbm90IE5BTkQgZmxhc2gsIGRvbid0IGJvdGhlciAqLworc3RhdGljIHNpemVfdCBqZmZzMl9maWxsX3didWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBsZW4pCit7CisJaWYgKGxlbiAmJiAhYy0+d2J1Zl9sZW4gJiYgKGxlbiA+PSBjLT53YnVmX3BhZ2VzaXplKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGVuID4gKGMtPndidWZfcGFnZXNpemUgLSBjLT53YnVmX2xlbikpCisJCWxlbiA9IGMtPndidWZfcGFnZXNpemUgLSBjLT53YnVmX2xlbjsKKwltZW1jcHkoYy0+d2J1ZiArIGMtPndidWZfbGVuLCBidWYsIGxlbik7CisJYy0+d2J1Zl9sZW4gKz0gKHVpbnQzMl90KSBsZW47CisJcmV0dXJuIGxlbjsKK30KKworaW50IGpmZnMyX2ZsYXNoX3dyaXRldihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgY29uc3Qgc3RydWN0IGt2ZWMgKmludmVjcywKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICpyZXRsZW4sCisJCSAgICAgICB1aW50MzJfdCBpbm8pCit7CisJc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYjsKKwlzaXplX3Qgd2J1Zl9yZXRsZW4sIGRvbmVsZW4gPSAwOworCXVpbnQzMl90IG91dHZlY190byA9IHRvOworCWludCByZXQsIGludmVjOworCisJLyogSWYgbm90IHdyaXRlYnVmZmVyZWQgZmxhc2gsIGRvbid0IGJvdGhlciAqLwogCWlmICghamZmczJfaXNfd3JpdGVidWZmZXJlZChjKSkKIAkJcmV0dXJuIGpmZnMyX2ZsYXNoX2RpcmVjdF93cml0ZXYoYywgaW52ZWNzLCBjb3VudCwgdG8sIHJldGxlbik7CiAKQEAgLTYyOSwzNCArNzU1LDIyIEBACiAJCW1lbXNldChjLT53YnVmLDB4ZmYsYy0+d2J1Zl9wYWdlc2l6ZSk7CiAJfQogCi0JLyogRml4dXAgdGhlIHdidWYgaWYgd2UgYXJlIG1vdmluZyB0byBhIG5ldyBlcmFzZWJsb2NrLiAgVGhlIGNoZWNrcyBiZWxvdwotCSAgIGZhaWwgZm9yIEVDQydkIE5PUiBiZWNhdXNlIGNsZWFubWFya2VyID09IDE2LCBzbyBhIGJsb2NrIHN0YXJ0cyBhdAotCSAgIHh4eDAwMTAuICAqLwotCWlmIChqZmZzMl9ub3JfZWNjKGMpKSB7Ci0JCWlmICgoKGMtPndidWZfb2ZzICUgYy0+c2VjdG9yX3NpemUpID09IDApICYmICFjLT53YnVmX2xlbikgewotCQkJYy0+d2J1Zl9vZnMgPSBQQUdFX0RJVih0byk7Ci0JCQljLT53YnVmX2xlbiA9IFBBR0VfTU9EKHRvKTsKLQkJCW1lbXNldChjLT53YnVmLDB4ZmYsYy0+d2J1Zl9wYWdlc2l6ZSk7Ci0JCX0KLQl9Ci0KLQkvKiBTYW5pdHkgY2hlY2tzIG9uIHRhcmdldCBhZGRyZXNzLgotCSAgIEl0J3MgcGVybWl0dGVkIHRvIHdyaXRlIGF0IFBBRChjLT53YnVmX2xlbitjLT53YnVmX29mcyksCi0JICAgYW5kIGl0J3MgcGVybWl0dGVkIHRvIHdyaXRlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcKLQkgICBlcmFzZSBibG9jay4gQW55dGhpbmcgZWxzZSwgYW5kIHlvdSBkaWUuCi0JICAgTmV3IGJsb2NrIHN0YXJ0cyBhdCB4eHgwMDBjICgwLWIgPSBibG9jayBoZWFkZXIpCi0JKi8KKwkvKgorCSAqIFNhbml0eSBjaGVja3Mgb24gdGFyZ2V0IGFkZHJlc3MuICBJdCdzIHBlcm1pdHRlZCB0byB3cml0ZQorCSAqIGF0IFBBRChjLT53YnVmX2xlbitjLT53YnVmX29mcyksIGFuZCBpdCdzIHBlcm1pdHRlZCB0bworCSAqIHdyaXRlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgZXJhc2UgYmxvY2suIEFueXRoaW5nIGVsc2UsCisJICogYW5kIHlvdSBkaWUuICBOZXcgYmxvY2sgc3RhcnRzIGF0IHh4eDAwMGMgKDAtYiA9IGJsb2NrCisJICogaGVhZGVyKQorCSAqLwogCWlmIChTRUNUT1JfQUREUih0bykgIT0gU0VDVE9SX0FERFIoYy0+d2J1Zl9vZnMpKSB7CiAJCS8qIEl0J3MgYSB3cml0ZSB0byBhIG5ldyBibG9jayAqLwogCQlpZiAoYy0+d2J1Zl9sZW4pIHsKLQkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9mbGFzaF93cml0ZXYoKSB0byAweCVseCBjYXVzZXMgZmx1c2ggb2Ygd2J1ZiBhdCAweCUwOHhcbiIsICh1bnNpZ25lZCBsb25nKXRvLCBjLT53YnVmX29mcykpOworCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2ZsYXNoX3dyaXRldigpIHRvIDB4JWx4ICIKKwkJCQkgICJjYXVzZXMgZmx1c2ggb2Ygd2J1ZiBhdCAweCUwOHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyl0bywgYy0+d2J1Zl9vZnMpKTsKIAkJCXJldCA9IF9famZmczJfZmx1c2hfd2J1ZihjLCBQQURfTk9BQ0NPVU5UKTsKLQkJCWlmIChyZXQpIHsKLQkJCQkvKiB0aGUgdW5kZXJseWluZyBsYXllciBoYXMgdG8gY2hlY2sgd2J1Zl9sZW4gdG8gZG8gdGhlIGNsZWFudXAgKi8KLQkJCQlEMShwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9mbHVzaF93YnVmKCkgY2FsbGVkIGZyb20gamZmczJfZmxhc2hfd3JpdGV2KCkgZmFpbGVkICVkXG4iLCByZXQpKTsKLQkJCQkqcmV0bGVuID0gMDsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0ZXJyOwogCQl9CiAJCS8qIHNldCBwb2ludGVyIHRvIG5ldyBibG9jayAqLwogCQljLT53YnVmX29mcyA9IFBBR0VfRElWKHRvKTsKQEAgLTY2NSwxNjUgKzc3OSw3MCBAQAogCiAJaWYgKHRvICE9IFBBRChjLT53YnVmX29mcyArIGMtPndidWZfbGVuKSkgewogCQkvKiBXZSdyZSBub3Qgd3JpdGluZyBpbW1lZGlhdGVseSBhZnRlciB0aGUgd3JpdGVidWZmZXIuIEJhZC4gKi8KLQkJcHJpbnRrKEtFUk5fQ1JJVCAiamZmczJfZmxhc2hfd3JpdGV2KCk6IE5vbi1jb250aWd1b3VzIHdyaXRlIHRvICUwOGx4XG4iLCAodW5zaWduZWQgbG9uZyl0byk7CisJCXByaW50ayhLRVJOX0NSSVQgImpmZnMyX2ZsYXNoX3dyaXRldigpOiBOb24tY29udGlndW91cyB3cml0ZSAiCisJCSAgICAgICAidG8gJTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXRvKTsKIAkJaWYgKGMtPndidWZfbGVuKQogCQkJcHJpbnRrKEtFUk5fQ1JJVCAid2J1ZiB3YXMgcHJldmlvdXNseSAlMDh4LSUwOHhcbiIsCi0JCQkJCSAgYy0+d2J1Zl9vZnMsIGMtPndidWZfb2ZzK2MtPndidWZfbGVuKTsKKwkJCSAgICAgICBjLT53YnVmX29mcywgYy0+d2J1Zl9vZnMrYy0+d2J1Zl9sZW4pOwogCQlCVUcoKTsKIAl9CiAKLQkvKiBOb3RlIG91dHZlY3NbM10gYWJvdmUuIFdlIGtub3cgY291bnQgaXMgbmV2ZXIgZ3JlYXRlciB0aGFuIDIgKi8KLQlpZiAoY291bnQgPiAyKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgImpmZnMyX2ZsYXNoX3dyaXRldigpOiBjb3VudCBpcyAlbGRcbiIsIGNvdW50KTsKLQkJQlVHKCk7Ci0JfQotCi0JaW52ZWMgPSAwOwotCW91dHZlYyA9IDA7Ci0KLQkvKiBGaWxsIHdyaXRlYnVmZmVyIGZpcnN0LCBpZiBhbHJlYWR5IGluIHVzZSAqLwotCWlmIChjLT53YnVmX2xlbikgewotCQl1aW50MzJfdCBpbnZlY19vZnMgPSAwOwotCi0JCS8qIGFkanVzdCBhbGlnbm1lbnQgb2Zmc2V0ICovCi0JCWlmIChjLT53YnVmX2xlbiAhPSBQQUdFX01PRCh0bykpIHsKLQkJCWMtPndidWZfbGVuID0gUEFHRV9NT0QodG8pOwotCQkJLyogdGFrZSBjYXJlIG9mIGFsaWdubWVudCB0byBuZXh0IHBhZ2UgKi8KLQkJCWlmICghYy0+d2J1Zl9sZW4pCi0JCQkJYy0+d2J1Zl9sZW4gPSBjLT53YnVmX3BhZ2VzaXplOwotCQl9Ci0KLQkJd2hpbGUoYy0+d2J1Zl9sZW4gPCBjLT53YnVmX3BhZ2VzaXplKSB7Ci0JCQl1aW50MzJfdCB0aGlzbGVuOwotCi0JCQlpZiAoaW52ZWMgPT0gY291bnQpCi0JCQkJZ290byBhbGxkb25lOwotCi0JCQl0aGlzbGVuID0gYy0+d2J1Zl9wYWdlc2l6ZSAtIGMtPndidWZfbGVuOwotCi0JCQlpZiAodGhpc2xlbiA+PSBpbnZlY3NbaW52ZWNdLmlvdl9sZW4pCi0JCQkJdGhpc2xlbiA9IGludmVjc1tpbnZlY10uaW92X2xlbjsKLQotCQkJaW52ZWNfb2ZzID0gdGhpc2xlbjsKLQotCQkJbWVtY3B5KGMtPndidWYgKyBjLT53YnVmX2xlbiwgaW52ZWNzW2ludmVjXS5pb3ZfYmFzZSwgdGhpc2xlbik7Ci0JCQljLT53YnVmX2xlbiArPSB0aGlzbGVuOwotCQkJZG9uZWxlbiArPSB0aGlzbGVuOwotCQkJLyogR2V0IG5leHQgaW52ZWMsIGlmIGFjdHVhbCBkaWQgbm90IGZpbGwgdGhlIGJ1ZmZlciAqLwotCQkJaWYgKGMtPndidWZfbGVuIDwgYy0+d2J1Zl9wYWdlc2l6ZSkKLQkJCQlpbnZlYysrOwotCQl9Ci0KLQkJLyogd3JpdGUgYnVmZmVyIGlzIGZ1bGwsIGZsdXNoIGJ1ZmZlciAqLwotCQlyZXQgPSBfX2pmZnMyX2ZsdXNoX3didWYoYywgTk9QQUQpOwotCQlpZiAocmV0KSB7Ci0JCQkvKiB0aGUgdW5kZXJseWluZyBsYXllciBoYXMgdG8gY2hlY2sgd2J1Zl9sZW4gdG8gZG8gdGhlIGNsZWFudXAgKi8KLQkJCUQxKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2ZsdXNoX3didWYoKSBjYWxsZWQgZnJvbSBqZmZzMl9mbGFzaF93cml0ZXYoKSBmYWlsZWQgJWRcbiIsIHJldCkpOwotCQkJLyogUmV0bGVuIHplcm8gdG8gbWFrZSBzdXJlIG91ciBjYWxsZXIgZG9lc24ndCBtYXJrIHRoZSBzcGFjZSBkaXJ0eS4KLQkJCSAgIFdlJ3ZlIGFscmVhZHkgZG9uZSBldmVyeXRoaW5nIHRoYXQncyBuZWNlc3NhcnkgKi8KLQkJCSpyZXRsZW4gPSAwOwotCQkJZ290byBleGl0OwotCQl9Ci0JCW91dHZlY190byArPSBkb25lbGVuOwotCQljLT53YnVmX29mcyA9IG91dHZlY190bzsKLQotCQkvKiBBbGwgaW52ZWNzIGRvbmUgPyAqLwotCQlpZiAoaW52ZWMgPT0gY291bnQpCi0JCQlnb3RvIGFsbGRvbmU7Ci0KLQkJLyogU2V0IHVwIHRoZSBmaXJzdCBvdXR2ZWMsIGNvbnRhaW5pbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUKLQkJICAgaW52ZWMgd2UgcGFydGlhbGx5IHVzZWQgKi8KLQkJaWYgKGludmVjc1tpbnZlY10uaW92X2xlbiA+IGludmVjX29mcykgewotCQkJb3V0dmVjc1swXS5pb3ZfYmFzZSA9IGludmVjc1tpbnZlY10uaW92X2Jhc2UraW52ZWNfb2ZzOwotCQkJdG90bGVuID0gb3V0dmVjc1swXS5pb3ZfbGVuID0gaW52ZWNzW2ludmVjXS5pb3ZfbGVuLWludmVjX29mczsKLQkJCWlmICh0b3RsZW4gPiBjLT53YnVmX3BhZ2VzaXplKSB7Ci0JCQkJc3BsaXR2ZWMgPSBvdXR2ZWM7Ci0JCQkJc3BsaXRfb2ZzID0gb3V0dmVjc1swXS5pb3ZfbGVuIC0gUEFHRV9NT0QodG90bGVuKTsKLQkJCX0KLQkJCW91dHZlYysrOwotCQl9Ci0JCWludmVjKys7Ci0JfQotCi0JLyogT0ssIG5vdyB3ZSd2ZSBmbHVzaGVkIHRoZSB3YnVmIGFuZCB0aGUgc3RhcnQgb2YgdGhlIGJpdHMKLQkgICB3ZSBoYXZlIGJlZW4gYXNrZWQgdG8gd3JpdGUsIG5vdyB0byB3cml0ZSB0aGUgcmVzdC4uLi4gKi8KLQotCS8qIHRvdGxlbiBob2xkcyB0aGUgYW1vdW50IG9mIGRhdGEgc3RpbGwgdG8gYmUgd3JpdHRlbiAqLwotCW9sZF90b3RsZW4gPSB0b3RsZW47Ci0JZm9yICggOyBpbnZlYyA8IGNvdW50OyBpbnZlYysrLG91dHZlYysrICkgewotCQlvdXR2ZWNzW291dHZlY10uaW92X2Jhc2UgPSBpbnZlY3NbaW52ZWNdLmlvdl9iYXNlOwotCQl0b3RsZW4gKz0gb3V0dmVjc1tvdXR2ZWNdLmlvdl9sZW4gPSBpbnZlY3NbaW52ZWNdLmlvdl9sZW47Ci0JCWlmIChQQUdFX0RJVih0b3RsZW4pICE9IFBBR0VfRElWKG9sZF90b3RsZW4pKSB7Ci0JCQlzcGxpdHZlYyA9IG91dHZlYzsKLQkJCXNwbGl0X29mcyA9IG91dHZlY3Nbb3V0dmVjXS5pb3ZfbGVuIC0gUEFHRV9NT0QodG90bGVuKTsKLQkJCW9sZF90b3RsZW4gPSB0b3RsZW47CisJLyogYWRqdXN0IGFsaWdubWVudCBvZmZzZXQgKi8KKwlpZiAoYy0+d2J1Zl9sZW4gIT0gUEFHRV9NT0QodG8pKSB7CisJCWMtPndidWZfbGVuID0gUEFHRV9NT0QodG8pOworCQkvKiB0YWtlIGNhcmUgb2YgYWxpZ25tZW50IHRvIG5leHQgcGFnZSAqLworCQlpZiAoIWMtPndidWZfbGVuKSB7CisJCQljLT53YnVmX2xlbiA9IGMtPndidWZfcGFnZXNpemU7CisJCQlyZXQgPSBfX2pmZnMyX2ZsdXNoX3didWYoYywgTk9QQUQpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dGVycjsKIAkJfQogCX0KIAotCS8qIE5vdyB0aGUgb3V0dmVjcyBhcnJheSBob2xkcyBhbGwgdGhlIHJlbWFpbmluZyBkYXRhIHRvIHdyaXRlICovCi0JLyogVXAgdG8gc3BsaXR2ZWMsc3BsaXRfb2ZzIGlzIHRvIGJlIHdyaXR0ZW4gaW1tZWRpYXRlbHkuIFRoZSByZXN0Ci0JICAgZ29lcyBpbnRvIHRoZSAobm93LWVtcHR5KSB3YnVmICovCisJZm9yIChpbnZlYyA9IDA7IGludmVjIDwgY291bnQ7IGludmVjKyspIHsKKwkJaW50IHZsZW4gPSBpbnZlY3NbaW52ZWNdLmlvdl9sZW47CisJCXVpbnQ4X3QgKnYgPSBpbnZlY3NbaW52ZWNdLmlvdl9iYXNlOwogCi0JaWYgKHNwbGl0dmVjICE9IC0xKSB7Ci0JCXVpbnQzMl90IHJlbWFpbmRlcjsKKwkJd2J1Zl9yZXRsZW4gPSBqZmZzMl9maWxsX3didWYoYywgdiwgdmxlbik7CiAKLQkJcmVtYWluZGVyID0gb3V0dmVjc1tzcGxpdHZlY10uaW92X2xlbiAtIHNwbGl0X29mczsKLQkJb3V0dmVjc1tzcGxpdHZlY10uaW92X2xlbiA9IHNwbGl0X29mczsKLQotCQkvKiBXZSBkaWQgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5LCBzbyB3ZSB3cml0ZSBzb21lIG5vdyAqLwotCQlpZiAoamZmczJfY2xlYW5tYXJrZXJfb29iKGMpKQotCQkJcmV0ID0gYy0+bXRkLT53cml0ZXZfZWNjKGMtPm10ZCwgb3V0dmVjcywgc3BsaXR2ZWMrMSwgb3V0dmVjX3RvLCAmd2J1Zl9yZXRsZW4sIE5VTEwsIGMtPm9vYmluZm8pOwotCQllbHNlCi0JCQlyZXQgPSBqZmZzMl9mbGFzaF9kaXJlY3Rfd3JpdGV2KGMsIG91dHZlY3MsIHNwbGl0dmVjKzEsIG91dHZlY190bywgJndidWZfcmV0bGVuKTsKLQotCQlpZiAocmV0IDwgMCB8fCB3YnVmX3JldGxlbiAhPSBQQUdFX0RJVih0b3RsZW4pKSB7Ci0JCQkvKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgbm8gcHJvYmxlbSwKLQkJCSAgIGMtPndidWYgaXMgZW1wdHkuIEhvd2V2ZXIgcmVmaWxlIG5leHRibG9jayB0byBhdm9pZAotCQkJICAgd3JpdGluZyBhZ2FpbiB0byBzYW1lIGFkZHJlc3MuCi0JCQkqLwotCQkJc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYjsKLQotCQkJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCi0JCQlqZWIgPSAmYy0+YmxvY2tzW291dHZlY190byAvIGMtPnNlY3Rvcl9zaXplXTsKLQkJCWpmZnMyX2Jsb2NrX3JlZmlsZShjLCBqZWIsIFJFRklMRV9BTllXQVkpOwotCi0JCQkqcmV0bGVuID0gMDsKLQkJCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCQkJZ290byBleGl0OworCQlpZiAoYy0+d2J1Zl9sZW4gPT0gYy0+d2J1Zl9wYWdlc2l6ZSkgeworCQkJcmV0ID0gX19qZmZzMl9mbHVzaF93YnVmKGMsIE5PUEFEKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXRlcnI7CiAJCX0KLQorCQl2bGVuIC09IHdidWZfcmV0bGVuOworCQlvdXR2ZWNfdG8gKz0gd2J1Zl9yZXRsZW47CiAJCWRvbmVsZW4gKz0gd2J1Zl9yZXRsZW47Ci0JCWMtPndidWZfb2ZzID0gUEFHRV9ESVYob3V0dmVjX3RvKSArIFBBR0VfRElWKHRvdGxlbik7CisJCXYgKz0gd2J1Zl9yZXRsZW47CiAKLQkJaWYgKHJlbWFpbmRlcikgewotCQkJb3V0dmVjc1tzcGxpdHZlY10uaW92X2Jhc2UgKz0gc3BsaXRfb2ZzOwotCQkJb3V0dmVjc1tzcGxpdHZlY10uaW92X2xlbiA9IHJlbWFpbmRlcjsKLQkJfSBlbHNlIHsKLQkJCXNwbGl0dmVjKys7CisJCWlmICh2bGVuID49IGMtPndidWZfcGFnZXNpemUpIHsKKwkJCXJldCA9IGMtPm10ZC0+d3JpdGUoYy0+bXRkLCBvdXR2ZWNfdG8sIFBBR0VfRElWKHZsZW4pLAorCQkJCQkgICAgJndidWZfcmV0bGVuLCB2KTsKKwkJCWlmIChyZXQgPCAwIHx8IHdidWZfcmV0bGVuICE9IFBBR0VfRElWKHZsZW4pKQorCQkJCWdvdG8gb3V0ZmlsZTsKKworCQkJdmxlbiAtPSB3YnVmX3JldGxlbjsKKwkJCW91dHZlY190byArPSB3YnVmX3JldGxlbjsKKwkJCWMtPndidWZfb2ZzID0gb3V0dmVjX3RvOworCQkJZG9uZWxlbiArPSB3YnVmX3JldGxlbjsKKwkJCXYgKz0gd2J1Zl9yZXRsZW47CiAJCX0KIAotCX0gZWxzZSB7Ci0JCXNwbGl0dmVjID0gMDsKKwkJd2J1Zl9yZXRsZW4gPSBqZmZzMl9maWxsX3didWYoYywgdiwgdmxlbik7CisJCWlmIChjLT53YnVmX2xlbiA9PSBjLT53YnVmX3BhZ2VzaXplKSB7CisJCQlyZXQgPSBfX2pmZnMyX2ZsdXNoX3didWYoYywgTk9QQUQpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dGVycjsKKwkJfQorCisJCW91dHZlY190byArPSB3YnVmX3JldGxlbjsKKwkJZG9uZWxlbiArPSB3YnVmX3JldGxlbjsKIAl9CiAKLQkvKiBOb3cgc3BsaXR2ZWMgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgYml0cyB3ZSBoYXZlIHRvIGNvcHkKLQkgICBpbnRvIHRoZSB3YnVmICovCi0Jd2J1Zl9wdHIgPSBjLT53YnVmOwotCi0JZm9yICggOyBzcGxpdHZlYyA8IG91dHZlYzsgc3BsaXR2ZWMrKykgewotCQkvKiBEb24ndCBjb3B5IHRoZSB3YnVmIGludG8gaXRzZWxmICovCi0JCWlmIChvdXR2ZWNzW3NwbGl0dmVjXS5pb3ZfYmFzZSA9PSBjLT53YnVmKQotCQkJY29udGludWU7Ci0JCW1lbWNweSh3YnVmX3B0ciwgb3V0dmVjc1tzcGxpdHZlY10uaW92X2Jhc2UsIG91dHZlY3Nbc3BsaXR2ZWNdLmlvdl9sZW4pOwotCQl3YnVmX3B0ciArPSBvdXR2ZWNzW3NwbGl0dmVjXS5pb3ZfbGVuOwotCQlkb25lbGVuICs9IG91dHZlY3Nbc3BsaXR2ZWNdLmlvdl9sZW47Ci0JfQotCWMtPndidWZfbGVuID0gd2J1Zl9wdHIgLSBjLT53YnVmOwotCi0JLyogSWYgdGhlcmUncyBhIHJlbWFpbmRlciBpbiB0aGUgd2J1ZiBhbmQgaXQncyBhIG5vbi1HQyB3cml0ZSwKLQkgICByZW1lbWJlciB0aGF0IHRoZSB3YnVmIGFmZmVjdHMgdGhpcyBpbm8gKi8KLWFsbGRvbmU6CisJLyoKKwkgKiBJZiB0aGVyZSdzIGEgcmVtYWluZGVyIGluIHRoZSB3YnVmIGFuZCBpdCdzIGEgbm9uLUdDIHdyaXRlLAorCSAqIHJlbWVtYmVyIHRoYXQgdGhlIHdidWYgYWZmZWN0cyB0aGlzIGlubworCSAqLwogCSpyZXRsZW4gPSBkb25lbGVuOwogCiAJaWYgKGpmZnMyX3N1bV9hY3RpdmUoKSkgewpAQCAtODM2LDggKzg1NSwyNCBAQAogCQlqZmZzMl93YnVmX2RpcnRpZXNfaW5vZGUoYywgaW5vKTsKIAogCXJldCA9IDA7CisJdXBfd3JpdGUoJmMtPndidWZfc2VtKTsKKwlyZXR1cm4gcmV0OwogCi1leGl0Ogorb3V0ZmlsZToKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBubyBwcm9ibGVtLCBjLT53YnVmIGlzIGVtcHR5LiBIb3dldmVyCisJICogcmVmaWxlIG5leHRibG9jayB0byBhdm9pZCB3cml0aW5nIGFnYWluIHRvIHNhbWUgYWRkcmVzcy4KKwkgKi8KKworCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKworCWplYiA9ICZjLT5ibG9ja3Nbb3V0dmVjX3RvIC8gYy0+c2VjdG9yX3NpemVdOworCWpmZnMyX2Jsb2NrX3JlZmlsZShjLCBqZWIsIFJFRklMRV9BTllXQVkpOworCisJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisKK291dGVycjoKKwkqcmV0bGVuID0gMDsKIAl1cF93cml0ZSgmYy0+d2J1Zl9zZW0pOwogCXJldHVybiByZXQ7CiB9CkBAIC04NDYsNyArODgxLDggQEAKICAqCVRoaXMgaXMgdGhlIGVudHJ5IGZvciBmbGFzaCB3cml0ZS4KICAqCUNoZWNrLCBpZiB3ZSB3b3JrIG9uIE5BTkQgRkxBU0gsIGlmIHNvIGJ1aWxkIGFuIGt2ZWMgYW5kIHdyaXRlIGl0IHZpYSB2cml0ZXYKICovCi1pbnQgamZmczJfZmxhc2hfd3JpdGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKK2ludCBqZmZzMl9mbGFzaF93cml0ZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKKwkJICAgICAgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQogewogCXN0cnVjdCBrdmVjIHZlY3NbMV07CiAKQEAgLTg3MSwyNSArOTA3LDIzIEBACiAKIAkvKiBSZWFkIGZsYXNoICovCiAJZG93bl9yZWFkKCZjLT53YnVmX3NlbSk7Ci0JaWYgKGpmZnMyX2NsZWFubWFya2VyX29vYihjKSkKLQkJcmV0ID0gYy0+bXRkLT5yZWFkX2VjYyhjLT5tdGQsIG9mcywgbGVuLCByZXRsZW4sIGJ1ZiwgTlVMTCwgYy0+b29iaW5mbyk7Ci0JZWxzZQotCQlyZXQgPSBjLT5tdGQtPnJlYWQoYy0+bXRkLCBvZnMsIGxlbiwgcmV0bGVuLCBidWYpOworCXJldCA9IGMtPm10ZC0+cmVhZChjLT5tdGQsIG9mcywgbGVuLCByZXRsZW4sIGJ1Zik7CiAKLQlpZiAoIChyZXQgPT0gLUVCQURNU0cpICYmICgqcmV0bGVuID09IGxlbikgKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm10ZC0+cmVhZCgweCV6eCBieXRlcyBmcm9tIDB4JWxseCkgcmV0dXJuZWQgRUNDIGVycm9yXG4iLAotCQkgICAgICAgbGVuLCBvZnMpOworCWlmICggKHJldCA9PSAtRUJBRE1TRyB8fCByZXQgPT0gLUVVQ0xFQU4pICYmICgqcmV0bGVuID09IGxlbikgKSB7CisJCWlmIChyZXQgPT0gLUVCQURNU0cpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdGQtPnJlYWQoMHglenggYnl0ZXMgZnJvbSAweCVsbHgpIgorCQkJICAgICAgICIgcmV0dXJuZWQgRUNDIGVycm9yXG4iLCBsZW4sIG9mcyk7CiAJCS8qCi0JCSAqIFdlIGhhdmUgdGhlIHJhdyBkYXRhIHdpdGhvdXQgRUNDIGNvcnJlY3Rpb24gaW4gdGhlIGJ1ZmZlciwgbWF5YmUKLQkJICogd2UgYXJlIGx1Y2t5IGFuZCBhbGwgZGF0YSBvciBwYXJ0cyBhcmUgY29ycmVjdC4gV2UgY2hlY2sgdGhlIG5vZGUuCi0JCSAqIElmIGRhdGEgYXJlIGNvcnJ1cHRlZCBub2RlIGNoZWNrIHdpbGwgc29ydCBpdCBvdXQuCi0JCSAqIFdlIGtlZXAgdGhpcyBibG9jaywgaXQgd2lsbCBmYWlsIG9uIHdyaXRlIG9yIGVyYXNlIGFuZCB0aGUgd2UKLQkJICogbWFyayBpdCBiYWQuIE9yIHNob3VsZCB3ZSBkbyB0aGF0IG5vdz8gQnV0IHdlIHNob3VsZCBnaXZlIGhpbSBhIGNoYW5jZS4KLQkJICogTWF5YmUgd2UgaGFkIGEgc3lzdGVtIGNyYXNoIG9yIHBvd2VyIGxvc3MgYmVmb3JlIHRoZSBlY2Mgd3JpdGUgb3IKLQkJICogYSBlcmFzZSB3YXMgY29tcGxldGVkLgorCQkgKiBXZSBoYXZlIHRoZSByYXcgZGF0YSB3aXRob3V0IEVDQyBjb3JyZWN0aW9uIGluIHRoZSBidWZmZXIsCisJCSAqIG1heWJlIHdlIGFyZSBsdWNreSBhbmQgYWxsIGRhdGEgb3IgcGFydHMgYXJlIGNvcnJlY3QuIFdlCisJCSAqIGNoZWNrIHRoZSBub2RlLiAgSWYgZGF0YSBhcmUgY29ycnVwdGVkIG5vZGUgY2hlY2sgd2lsbCBzb3J0CisJCSAqIGl0IG91dC4gIFdlIGtlZXAgdGhpcyBibG9jaywgaXQgd2lsbCBmYWlsIG9uIHdyaXRlIG9yIGVyYXNlCisJCSAqIGFuZCB0aGUgd2UgbWFyayBpdCBiYWQuIE9yIHNob3VsZCB3ZSBkbyB0aGF0IG5vdz8gQnV0IHdlCisJCSAqIHNob3VsZCBnaXZlIGhpbSBhIGNoYW5jZS4gIE1heWJlIHdlIGhhZCBhIHN5c3RlbSBjcmFzaCBvcgorCQkgKiBwb3dlciBsb3NzIGJlZm9yZSB0aGUgZWNjIHdyaXRlIG9yIGEgZXJhc2Ugd2FzIGNvbXBsZXRlZC4KIAkJICogU28gd2UgcmV0dXJuIHN1Y2Nlc3MuIDopCiAJCSAqLwotCSAJcmV0ID0gMDsKKwkJcmV0ID0gMDsKIAl9CiAKIAkvKiBpZiBubyB3cml0ZWJ1ZmZlciBhdmFpbGFibGUgb3Igd3JpdGUgYnVmZmVyIGVtcHR5LCByZXR1cm4gKi8KQEAgLTkxMSw3ICs5NDUsNyBAQAogCQlvcmJmID0gKGMtPndidWZfb2ZzIC0gb2ZzKTsJLyogb2Zmc2V0IGluIHJlYWQgYnVmZmVyICovCiAJCWlmIChvcmJmID4gbGVuKQkJCS8qIGlzIHdyaXRlIGJleW9uZCB3cml0ZSBidWZmZXIgPyAqLwogCQkJZ290byBleGl0OwotCQlsd2JmID0gbGVuIC0gb3JiZjsgCQkvKiBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSAqLworCQlsd2JmID0gbGVuIC0gb3JiZjsJCS8qIG51bWJlciBvZiBieXRlcyB0byBjb3B5ICovCiAJCWlmIChsd2JmID4gYy0+d2J1Zl9sZW4pCiAJCQlsd2JmID0gYy0+d2J1Zl9sZW47CiAJfQpAQCAtOTIzLDE1OCArOTU3LDE1OSBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNkZWZpbmUgTlJfT09CX1NDQU5fUEFHRVMJNAorCiAvKgotICoJQ2hlY2ssIGlmIHRoZSBvdXQgb2YgYmFuZCBhcmVhIGlzIGVtcHR5CisgKiBDaGVjaywgaWYgdGhlIG91dCBvZiBiYW5kIGFyZWEgaXMgZW1wdHkKICAqLwotaW50IGpmZnMyX2NoZWNrX29vYl9lbXB0eSggc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsIGludCBtb2RlKQoraW50IGpmZnMyX2NoZWNrX29vYl9lbXB0eShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCSAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwgaW50IG1vZGUpCiB7Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCWludCAJcmV0ID0gMDsKLQlpbnQJaSxsZW4scGFnZTsKLQlzaXplX3QgIHJldGxlbjsKLQlpbnQJb29iX3NpemU7CisJaW50IGksIHBhZ2UsIHJldDsKKwlpbnQgb29ic2l6ZSA9IGMtPm10ZC0+b29ic2l6ZTsKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOwogCi0JLyogYWxsb2NhdGUgYSBidWZmZXIgZm9yIGFsbCBvb2IgZGF0YSBpbiB0aGlzIHNlY3RvciAqLwotCW9vYl9zaXplID0gYy0+bXRkLT5vb2JzaXplOwotCWxlbiA9IDQgKiBvb2Jfc2l6ZTsKLQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJqZmZzMl9jaGVja19vb2JfZW1wdHkoKTogYWxsb2NhdGlvbiBvZiB0ZW1wb3JhcnkgZGF0YSBidWZmZXIgZm9yIG9vYiBjaGVjayBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JLyoKLQkgKiBpZiBtb2RlID0gMCwgd2Ugc2NhbiBmb3IgYSB0b3RhbCBlbXB0eSBvb2IgYXJlYSwgZWxzZSB3ZSBoYXZlCi0JICogdG8gdGFrZSBjYXJlIG9mIHRoZSBjbGVhbm1hcmtlciBpbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgYmxvY2sKLQkqLwotCXJldCA9IGpmZnMyX2ZsYXNoX3JlYWRfb29iKGMsIGplYi0+b2Zmc2V0LCBsZW4gLCAmcmV0bGVuLCBidWYpOworCW9wcy5sZW4gPSBOUl9PT0JfU0NBTl9QQUdFUyAqIG9vYnNpemU7CisJb3BzLm9vYmxlbiA9IG9vYnNpemU7CisJb3BzLm9vYmJ1ZiA9IGMtPm9vYmJ1ZjsKKwlvcHMub29ib2ZmcyA9IDA7CisJb3BzLmRhdGJ1ZiA9IE5VTEw7CisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCisJcmV0ID0gYy0+bXRkLT5yZWFkX29vYihjLT5tdGQsIGplYi0+b2Zmc2V0LCAmb3BzKTsKIAlpZiAocmV0KSB7Ci0JCUQxKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX29vYl9lbXB0eSgpOiBSZWFkIE9PQiBmYWlsZWQgJWQgZm9yIGJsb2NrIGF0ICUwOHhcbiIsIHJldCwgamViLT5vZmZzZXQpKTsKLQkJZ290byBvdXQ7CisJCUQxKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX29vYl9lbXB0eSgpOiBSZWFkIE9PQiAiCisJCQkgICJmYWlsZWQgJWQgZm9yIGJsb2NrIGF0ICUwOHhcbiIsIHJldCwgamViLT5vZmZzZXQpKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAocmV0bGVuIDwgbGVuKSB7Ci0JCUQxKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX29vYl9lbXB0eSgpOiBSZWFkIE9PQiByZXR1cm4gc2hvcnQgcmVhZCAiCi0JCQkgICIoJXpkIGJ5dGVzIG5vdCAlZCkgZm9yIGJsb2NrIGF0ICUwOHhcbiIsIHJldGxlbiwgbGVuLCBqZWItPm9mZnNldCkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKKwlpZiAob3BzLnJldGxlbiA8IG9wcy5sZW4pIHsKKwkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfY2hlY2tfb29iX2VtcHR5KCk6IFJlYWQgT09CICIKKwkJCSAgInJldHVybmVkIHNob3J0IHJlYWQgKCV6ZCBieXRlcyBub3QgJWQpIGZvciBibG9jayAiCisJCQkgICJhdCAlMDh4XG4iLCBvcHMucmV0bGVuLCBvcHMubGVuLCBqZWItPm9mZnNldCkpOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBTcGVjaWFsIGNoZWNrIGZvciBmaXJzdCBwYWdlICovCi0JZm9yKGkgPSAwOyBpIDwgb29iX3NpemUgOyBpKyspIHsKKwlmb3IoaSA9IDA7IGkgPCBvb2JzaXplIDsgaSsrKSB7CiAJCS8qIFllYWgsIHdlIGtub3cgYWJvdXQgdGhlIGNsZWFubWFya2VyLiAqLwogCQlpZiAobW9kZSAmJiBpID49IGMtPmZzZGF0YV9wb3MgJiYKIAkJICAgIGkgPCBjLT5mc2RhdGFfcG9zICsgYy0+ZnNkYXRhX2xlbikKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChidWZbaV0gIT0gMHhGRikgewotCQkJRDIocHJpbnRrKEtFUk5fREVCVUcgIkZvdW5kICUwMnggYXQgJXggaW4gT09CIGZvciAlMDh4XG4iLAotCQkJCSAgYnVmW2ldLCBpLCBqZWItPm9mZnNldCkpOwotCQkJcmV0ID0gMTsKLQkJCWdvdG8gb3V0OworCQlpZiAob3BzLm9vYmJ1ZltpXSAhPSAweEZGKSB7CisJCQlEMihwcmludGsoS0VSTl9ERUJVRyAiRm91bmQgJTAyeCBhdCAleCBpbiBPT0IgZm9yICIKKwkJCQkgICIlMDh4XG4iLCBvcHMub29iYnVmW2ldLCBpLCBqZWItPm9mZnNldCkpOworCQkJcmV0dXJuIDE7CiAJCX0KIAl9CiAKIAkvKiB3ZSBrbm93LCB3ZSBhcmUgYWxpZ25lZCA6KSAqLwotCWZvciAocGFnZSA9IG9vYl9zaXplOyBwYWdlIDwgbGVuOyBwYWdlICs9IHNpemVvZihsb25nKSkgewotCQl1bnNpZ25lZCBsb25nIGRhdCA9ICoodW5zaWduZWQgbG9uZyAqKSgmYnVmW3BhZ2VdKTsKLQkJaWYoZGF0ICE9IC0xKSB7Ci0JCQlyZXQgPSAxOwotCQkJZ290byBvdXQ7Ci0JCX0KKwlmb3IgKHBhZ2UgPSBvb2JzaXplOyBwYWdlIDwgb3BzLmxlbjsgcGFnZSArPSBzaXplb2YobG9uZykpIHsKKwkJbG9uZyBkYXQgPSAqKGxvbmcgKikoJm9wcy5vb2JidWZbcGFnZV0pOworCQlpZihkYXQgIT0gLTEpCisJCQlyZXR1cm4gMTsKIAl9Ci0KLW91dDoKLQlrZnJlZShidWYpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKLSoJU2NhbiBmb3IgYSB2YWxpZCBjbGVhbm1hcmtlciBhbmQgZm9yIGJhZCBibG9ja3MKLSoJRm9yIHZpcnR1YWwgYmxvY2tzIChjb25jYXRlbmF0ZWQgcGh5c2ljYWwgYmxvY2tzKSBjaGVjayB0aGUgY2xlYW5tYXJrZXIKLSoJb25seSBpbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgZmlyc3QgcGh5c2ljYWwgYmxvY2ssIGJ1dCBzY2FuIGZvciBiYWQgYmxvY2tzIGluIGFsbAotKglwaHlzaWNhbCBibG9ja3MKLSovCi1pbnQgamZmczJfY2hlY2tfbmFuZF9jbGVhbm1hcmtlciAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpCisgKiBTY2FuIGZvciBhIHZhbGlkIGNsZWFubWFya2VyIGFuZCBmb3IgYmFkIGJsb2NrcworICovCitpbnQgamZmczJfY2hlY2tfbmFuZF9jbGVhbm1hcmtlciAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCisJCQkJICBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViKQogewogCXN0cnVjdCBqZmZzMl91bmtub3duX25vZGUgbjsKLQl1bnNpZ25lZCBjaGFyIGJ1ZlsyICogTkFORF9NQVhfT09CU0laRV07Ci0JdW5zaWduZWQgY2hhciAqcDsKLQlpbnQgcmV0LCBpLCBjbnQsIHJldHZhbCA9IDA7Ci0Jc2l6ZV90IHJldGxlbiwgb2Zmc2V0OwotCWludCBvb2Jfc2l6ZTsKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCBvb2JzaXplID0gYy0+bXRkLT5vb2JzaXplOworCXVuc2lnbmVkIGNoYXIgKnAsKmI7CisJaW50IGksIHJldDsKKwlzaXplX3Qgb2Zmc2V0ID0gamViLT5vZmZzZXQ7CiAKLQlvZmZzZXQgPSBqZWItPm9mZnNldDsKLQlvb2Jfc2l6ZSA9IGMtPm10ZC0+b29ic2l6ZTsKLQotCS8qIExvb3AgdGhyb3VnaCB0aGUgcGh5c2ljYWwgYmxvY2tzICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCAoYy0+c2VjdG9yX3NpemUgLyBjLT5tdGQtPmVyYXNlc2l6ZSk7IGNudCsrKSB7Ci0JCS8qIENoZWNrIGZpcnN0IGlmIHRoZSBibG9jayBpcyBiYWQuICovCi0JCWlmIChjLT5tdGQtPmJsb2NrX2lzYmFkIChjLT5tdGQsIG9mZnNldCkpIHsKLQkJCUQxIChwcmludGsgKEtFUk5fV0FSTklORyAiamZmczJfY2hlY2tfbmFuZF9jbGVhbm1hcmtlcigpOiBCYWQgYmxvY2sgYXQgJTA4eFxuIiwgamViLT5vZmZzZXQpKTsKLQkJCXJldHVybiAyOwotCQl9Ci0JCS8qCi0JCSAgICogICAgV2UgcmVhZCBvb2IgZGF0YSBmcm9tIHBhZ2UgMCBhbmQgMSBvZiB0aGUgYmxvY2suCi0JCSAgICogICAgcGFnZSAwIGNvbnRhaW5zIGNsZWFubWFya2VyIGFuZCBiYWRibG9jayBpbmZvCi0JCSAgICogICAgcGFnZSAxIGNvbnRhaW5zIGZhaWx1cmUgY291bnQgb2YgdGhpcyBibG9jawotCQkgKi8KLQkJcmV0ID0gYy0+bXRkLT5yZWFkX29vYiAoYy0+bXRkLCBvZmZzZXQsIG9vYl9zaXplIDw8IDEsICZyZXRsZW4sIGJ1Zik7Ci0KLQkJaWYgKHJldCkgewotCQkJRDEgKHByaW50ayAoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCk6IFJlYWQgT09CIGZhaWxlZCAlZCBmb3IgYmxvY2sgYXQgJTA4eFxuIiwgcmV0LCBqZWItPm9mZnNldCkpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlpZiAocmV0bGVuIDwgKG9vYl9zaXplIDw8IDEpKSB7Ci0JCQlEMSAocHJpbnRrIChLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKTogUmVhZCBPT0IgcmV0dXJuIHNob3J0IHJlYWQgKCV6ZCBieXRlcyBub3QgJWQpIGZvciBibG9jayBhdCAlMDh4XG4iLCByZXRsZW4sIG9vYl9zaXplIDw8IDEsIGplYi0+b2Zmc2V0KSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCS8qIENoZWNrIGNsZWFubWFya2VyIG9ubHkgb24gdGhlIGZpcnN0IHBoeXNpY2FsIGJsb2NrICovCi0JCWlmICghY250KSB7Ci0JCQluLm1hZ2ljID0gY3B1X3RvX2plMTYgKEpGRlMyX01BR0lDX0JJVE1BU0spOwotCQkJbi5ub2RldHlwZSA9IGNwdV90b19qZTE2IChKRkZTMl9OT0RFVFlQRV9DTEVBTk1BUktFUik7Ci0JCQluLnRvdGxlbiA9IGNwdV90b19qZTMyICg4KTsKLQkJCXAgPSAodW5zaWduZWQgY2hhciAqKSAmbjsKLQotCQkJZm9yIChpID0gMDsgaSA8IGMtPmZzZGF0YV9sZW47IGkrKykgewotCQkJCWlmIChidWZbYy0+ZnNkYXRhX3BvcyArIGldICE9IHBbaV0pIHsKLQkJCQkJcmV0dmFsID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCQlEMShpZiAocmV0dmFsID09IDEpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCk6IENsZWFubWFya2VyIG5vZGUgbm90IGRldGVjdGVkIGluIGJsb2NrIGF0ICUwOHhcbiIsIGplYi0+b2Zmc2V0KTsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJPT0IgYXQgJTA4eCB3YXMgIiwgb2Zmc2V0KTsKLQkJCQlmb3IgKGk9MDsgaSA8IG9vYl9zaXplOyBpKyspIHsKLQkJCQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltpXSk7Ci0JCQkJfQotCQkJCXByaW50aygiXG4iKTsKLQkJCX0pCi0JCX0KLQkJb2Zmc2V0ICs9IGMtPm10ZC0+ZXJhc2VzaXplOworCS8qIENoZWNrIGZpcnN0IGlmIHRoZSBibG9jayBpcyBiYWQuICovCisJaWYgKGMtPm10ZC0+YmxvY2tfaXNiYWQoYy0+bXRkLCBvZmZzZXQpKSB7CisJCUQxIChwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCkiCisJCQkgICAiOiBCYWQgYmxvY2sgYXQgJTA4eFxuIiwgamViLT5vZmZzZXQpKTsKKwkJcmV0dXJuIDI7CiAJfQotCXJldHVybiByZXR2YWw7CisKKwlvcHMubGVuID0gb29ic2l6ZTsKKwlvcHMub29ibGVuID0gb29ic2l6ZTsKKwlvcHMub29iYnVmID0gYy0+b29iYnVmOworCW9wcy5vb2JvZmZzID0gMDsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisKKwlyZXQgPSBjLT5tdGQtPnJlYWRfb29iKGMtPm10ZCwgb2Zmc2V0LCAmb3BzKTsKKwlpZiAocmV0KSB7CisJCUQxIChwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCk6ICIKKwkJCSAgICJSZWFkIE9PQiBmYWlsZWQgJWQgZm9yIGJsb2NrIGF0ICUwOHhcbiIsCisJCQkgICByZXQsIGplYi0+b2Zmc2V0KSk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKG9wcy5yZXRsZW4gPCBvcHMubGVuKSB7CisJCUQxIChwcmludGsgKEtFUk5fV0FSTklORyAiamZmczJfY2hlY2tfbmFuZF9jbGVhbm1hcmtlcigpOiAiCisJCQkgICAgIlJlYWQgT09CIHJldHVybiBzaG9ydCByZWFkICglemQgYnl0ZXMgbm90ICVkKSAiCisJCQkgICAgImZvciBibG9jayBhdCAlMDh4XG4iLCBvcHMucmV0bGVuLCBvcHMubGVuLAorCQkJICAgIGplYi0+b2Zmc2V0KSk7CisJCXJldHVybiAtRUlPOworCX0KKworCW4ubWFnaWMgPSBjcHVfdG9famUxNiAoSkZGUzJfTUFHSUNfQklUTUFTSyk7CisJbi5ub2RldHlwZSA9IGNwdV90b19qZTE2IChKRkZTMl9OT0RFVFlQRV9DTEVBTk1BUktFUik7CisJbi50b3RsZW4gPSBjcHVfdG9famUzMiAoOCk7CisJcCA9ICh1bnNpZ25lZCBjaGFyICopICZuOworCWIgPSBjLT5vb2JidWYgKyBjLT5mc2RhdGFfcG9zOworCisJZm9yIChpID0gYy0+ZnNkYXRhX2xlbjsgaTsgaS0tKSB7CisJCWlmICgqYisrICE9ICpwKyspCisJCQlyZXQgPSAxOworCX0KKworCUQxKGlmIChyZXQgPT0gMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCk6ICIKKwkJICAgICAgICJDbGVhbm1hcmtlciBub2RlIG5vdCBkZXRlY3RlZCBpbiBibG9jayBhdCAlMDh4XG4iLAorCQkgICAgICAgb2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiT09CIGF0ICUwOHp4IHdhcyAiLCBvZmZzZXQpOworCQlmb3IgKGk9MDsgaSA8IG9vYnNpemU7IGkrKykKKwkJCXByaW50aygiJTAyeCAiLCBjLT5vb2JidWZbaV0pOworCQlwcmludGsoIlxuIik7CisJfSk7CisJcmV0dXJuIHJldDsKIH0KIAotaW50IGpmZnMyX3dyaXRlX25hbmRfY2xlYW5tYXJrZXIoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpCitpbnQgamZmczJfd3JpdGVfbmFuZF9jbGVhbm1hcmtlcihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYikKIHsKLQlzdHJ1Y3QgCWpmZnMyX3Vua25vd25fbm9kZSBuOwotCWludCAJcmV0OwotCXNpemVfdCAJcmV0bGVuOworCXN0cnVjdCBqZmZzMl91bmtub3duX25vZGUgbjsKKwlpbnQJcmV0OworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CiAKIAluLm1hZ2ljID0gY3B1X3RvX2plMTYoSkZGUzJfTUFHSUNfQklUTUFTSyk7CiAJbi5ub2RldHlwZSA9IGNwdV90b19qZTE2KEpGRlMyX05PREVUWVBFX0NMRUFOTUFSS0VSKTsKIAluLnRvdGxlbiA9IGNwdV90b19qZTMyKDgpOwogCi0JcmV0ID0gamZmczJfZmxhc2hfd3JpdGVfb29iKGMsIGplYi0+b2Zmc2V0ICsgYy0+ZnNkYXRhX3BvcywgYy0+ZnNkYXRhX2xlbiwgJnJldGxlbiwgKHVuc2lnbmVkIGNoYXIgKikmbik7CisJb3BzLmxlbiA9IGMtPmZzZGF0YV9sZW47CisJb3BzLm9vYmxlbiA9IGMtPmZzZGF0YV9sZW47OworCW9wcy5vb2JidWYgPSAodWludDhfdCAqKSZuOworCW9wcy5vb2JvZmZzID0gYy0+ZnNkYXRhX3BvczsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisKKwlyZXQgPSBjLT5tdGQtPndyaXRlX29vYihjLT5tdGQsIGplYi0+b2Zmc2V0LCAmb3BzKTsKIAogCWlmIChyZXQpIHsKLQkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfd3JpdGVfbmFuZF9jbGVhbm1hcmtlcigpOiBXcml0ZSBmYWlsZWQgZm9yIGJsb2NrIGF0ICUwOHg6IGVycm9yICVkXG4iLCBqZWItPm9mZnNldCwgcmV0KSk7CisJCUQxKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX3dyaXRlX25hbmRfY2xlYW5tYXJrZXIoKTogIgorCQkJICAiV3JpdGUgZmFpbGVkIGZvciBibG9jayBhdCAlMDh4OiBlcnJvciAlZFxuIiwKKwkJCSAgamViLT5vZmZzZXQsIHJldCkpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAocmV0bGVuICE9IGMtPmZzZGF0YV9sZW4pIHsKLQkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfd3JpdGVfbmFuZF9jbGVhbm1hcmtlcigpOiBTaG9ydCB3cml0ZSBmb3IgYmxvY2sgYXQgJTA4eDogJXpkIG5vdCAlZFxuIiwgamViLT5vZmZzZXQsIHJldGxlbiwgYy0+ZnNkYXRhX2xlbikpOwotCQlyZXR1cm4gcmV0OworCWlmIChvcHMucmV0bGVuICE9IG9wcy5sZW4pIHsKKwkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfd3JpdGVfbmFuZF9jbGVhbm1hcmtlcigpOiAiCisJCQkgICJTaG9ydCB3cml0ZSBmb3IgYmxvY2sgYXQgJTA4eDogJXpkIG5vdCAlZFxuIiwKKwkJCSAgamViLT5vZmZzZXQsIG9wcy5yZXRsZW4sIG9wcy5sZW4pKTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTEwOCwxOCArMTE0Myw5IEBACiAJcmV0dXJuIDE7CiB9CiAKLSNkZWZpbmUgTkFORF9KRkZTMl9PT0IxNl9GU0RBTEVOCTgKLQotc3RhdGljIHN0cnVjdCBuYW5kX29vYmluZm8gamZmczJfb29iaW5mb19kb2NlY2MgPSB7Ci0JLnVzZWVjYyA9IE1URF9OQU5ERUNDX1BMQUNFLAotCS5lY2NieXRlcyA9IDYsCi0JLmVjY3BvcyA9IHswLDEsMiwzLDQsNX0KLX07Ci0KLQogc3RhdGljIGludCBqZmZzMl9uYW5kX3NldF9vb2JpbmZvKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQogewotCXN0cnVjdCBuYW5kX29vYmluZm8gKm9pbmZvID0gJmMtPm10ZC0+b29iaW5mbzsKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKm9pbmZvID0gYy0+bXRkLT5lY2NsYXlvdXQ7CiAKIAkvKiBEbyB0aGlzIG9ubHksIGlmIHdlIGhhdmUgYW4gb29iIGJ1ZmZlciAqLwogCWlmICghYy0+bXRkLT5vb2JzaXplKQpAQCAtMTEyOSwzMyArMTE1NSwyMyBAQAogCWMtPmNsZWFubWFya2VyX3NpemUgPSAwOwogCiAJLyogU2hvdWxkIHdlIHVzZSBhdXRvcGxhY2VtZW50ID8gKi8KLQlpZiAob2luZm8gJiYgb2luZm8tPnVzZWVjYyA9PSBNVERfTkFOREVDQ19BVVRPUExBQ0UpIHsKLQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkpGRlMyIHVzaW5nIGF1dG9wbGFjZSBvbiBOQU5EXG4iKSk7Ci0JCS8qIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGZyZWUgYnl0ZXMgKi8KLQkJaWYgKCFvaW5mby0+b29iZnJlZVswXVsxXSkgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgImpmZnMyX25hbmRfc2V0X29vYmluZm8oKTogRWVlcC4gQXV0b3BsYWNlbWVudCBzZWxlY3RlZCBhbmQgbm8gZW1wdHkgc3BhY2UgaW4gb29iXG4iKTsKLQkJCXJldHVybiAtRU5PU1BDOwotCQl9Ci0JCWMtPmZzZGF0YV9wb3MgPSBvaW5mby0+b29iZnJlZVswXVswXTsKLQkJYy0+ZnNkYXRhX2xlbiA9IG9pbmZvLT5vb2JmcmVlWzBdWzFdOwotCQlpZiAoYy0+ZnNkYXRhX2xlbiA+IDgpCi0JCQljLT5mc2RhdGFfbGVuID0gODsKLQl9IGVsc2UgewotCQkvKiBUaGlzIGlzIGp1c3QgYSBsZWdhY3kgZmFsbGJhY2sgYW5kIHNob3VsZCBnbyBhd2F5IHNvb24gKi8KLQkJc3dpdGNoKGMtPm10ZC0+ZWNjdHlwZSkgewotCQljYXNlIE1URF9FQ0NfUlNfRGlza09uQ2hpcDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkpGRlMyIHVzaW5nIERpc2tPbkNoaXAgaGFyZHdhcmUgRUNDIHdpdGhvdXQgYXV0b3BsYWNlbWVudC4gRml4IGl0IVxuIik7Ci0JCQljLT5vb2JpbmZvID0gJmpmZnMyX29vYmluZm9fZG9jZWNjOwotCQkJYy0+ZnNkYXRhX3BvcyA9IDY7Ci0JCQljLT5mc2RhdGFfbGVuID0gTkFORF9KRkZTMl9PT0IxNl9GU0RBTEVOOwotCQkJYy0+YmFkYmxvY2tfcG9zID0gMTU7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkpGRlMyIG9uIE5BTkQuIE5vIGF1dG9wbGFjbWVudCBpbmZvIGZvdW5kXG4iKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCWlmICghb2luZm8pIHsKKwkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkpGRlMyIG9uIE5BTkQuIE5vIGF1dG9wbGFjbWVudCBpbmZvIGZvdW5kXG4iKSk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKworCUQxKHByaW50ayhLRVJOX0RFQlVHICJKRkZTMiB1c2luZyBhdXRvcGxhY2Ugb24gTkFORFxuIikpOworCS8qIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGZyZWUgYnl0ZXMgKi8KKwlpZiAoIW9pbmZvLT5vb2JmcmVlWzBdLmxlbmd0aCkgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiamZmczJfbmFuZF9zZXRfb29iaW5mbygpOiBFZWVwLiIKKwkJCSIgQXV0b3BsYWNlbWVudCBzZWxlY3RlZCBhbmQgbm8gZW1wdHkgc3BhY2UgaW4gb29iXG4iKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCWMtPmZzZGF0YV9wb3MgPSBvaW5mby0+b29iZnJlZVswXS5vZmZzZXQ7CisJYy0+ZnNkYXRhX2xlbiA9IG9pbmZvLT5vb2JmcmVlWzBdLmxlbmd0aDsKKwlpZiAoYy0+ZnNkYXRhX2xlbiA+IDgpCisJCWMtPmZzZGF0YV9sZW4gPSA4OworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNjUsMTMgKzExODEsMTcgQEAKIAogCS8qIEluaXRpYWxpc2Ugd3JpdGUgYnVmZmVyICovCiAJaW5pdF9yd3NlbSgmYy0+d2J1Zl9zZW0pOwotCWMtPndidWZfcGFnZXNpemUgPSBjLT5tdGQtPm9vYmJsb2NrOworCWMtPndidWZfcGFnZXNpemUgPSBjLT5tdGQtPndyaXRlc2l6ZTsKIAljLT53YnVmX29mcyA9IDB4RkZGRkZGRkY7CiAKIAljLT53YnVmID0ga21hbGxvYyhjLT53YnVmX3BhZ2VzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWMtPndidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJYy0+b29iYnVmID0ga21hbGxvYyhOUl9PT0JfU0NBTl9QQUdFUyAqIGMtPm10ZC0+b29ic2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjLT5vb2JidWYpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmVzID0gamZmczJfbmFuZF9zZXRfb29iaW5mbyhjKTsKIAogI2lmZGVmIEJSRUFLTUUKQEAgLTExODksNiArMTIwOSw3IEBACiB2b2lkIGpmZnMyX25hbmRfZmxhc2hfY2xlYW51cChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYykKIHsKIAlrZnJlZShjLT53YnVmKTsKKwlrZnJlZShjLT5vb2JidWYpOwogfQogCiBpbnQgamZmczJfZGF0YWZsYXNoX3NldHVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKSB7CkBAIC0xMjM2LDMzICsxMjU3LDE0IEBACiAJa2ZyZWUoYy0+d2J1Zik7CiB9CiAKLWludCBqZmZzMl9ub3JfZWNjX2ZsYXNoX3NldHVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKSB7Ci0JLyogQ2xlYW5tYXJrZXIgaXMgYWN0dWFsbHkgbGFyZ2VyIG9uIHRoZSBmbGFzaGVzICovCi0JYy0+Y2xlYW5tYXJrZXJfc2l6ZSA9IDE2OwotCi0JLyogSW5pdGlhbGl6ZSB3cml0ZSBidWZmZXIgKi8KLQlpbml0X3J3c2VtKCZjLT53YnVmX3NlbSk7Ci0JYy0+d2J1Zl9wYWdlc2l6ZSA9IGMtPm10ZC0+ZWNjc2l6ZTsKLQljLT53YnVmX29mcyA9IDB4RkZGRkZGRkY7Ci0KLQljLT53YnVmID0ga21hbGxvYyhjLT53YnVmX3BhZ2VzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWMtPndidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgamZmczJfbm9yX2VjY19mbGFzaF9jbGVhbnVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKSB7Ci0Ja2ZyZWUoYy0+d2J1Zik7Ci19Ci0KIGludCBqZmZzMl9ub3Jfd2J1Zl9mbGFzaF9zZXR1cChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYykgewotCS8qIENsZWFubWFya2VyIGN1cnJlbnRseSBvY2N1cGllcyBhIHdob2xlIHByb2dyYW1taW5nIHJlZ2lvbiAqLwotCWMtPmNsZWFubWFya2VyX3NpemUgPSBNVERfUFJPR1JFR0lPTl9TSVpFKGMtPm10ZCk7CisJLyogQ2xlYW5tYXJrZXIgY3VycmVudGx5IG9jY3VwaWVzIHdob2xlIHByb2dyYW1taW5nIHJlZ2lvbnMsCisJICogZWl0aGVyIG9uZSBvciAyIGZvciA4Qnl0ZSBTVE1pY3JvIGZsYXNoZXMuICovCisJYy0+Y2xlYW5tYXJrZXJfc2l6ZSA9IG1heCgxNnUsIGMtPm10ZC0+d3JpdGVzaXplKTsKIAogCS8qIEluaXRpYWxpemUgd3JpdGUgYnVmZmVyICovCiAJaW5pdF9yd3NlbSgmYy0+d2J1Zl9zZW0pOwotCWMtPndidWZfcGFnZXNpemUgPSBNVERfUFJPR1JFR0lPTl9TSVpFKGMtPm10ZCk7CisJYy0+d2J1Zl9wYWdlc2l6ZSA9IGMtPm10ZC0+d3JpdGVzaXplOwogCWMtPndidWZfb2ZzID0gMHhGRkZGRkZGRjsKIAogCWMtPndidWYgPSBrbWFsbG9jKGMtPndidWZfcGFnZXNpemUsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvd3JpdGUuYyBiL2ZzL2pmZnMyL3dyaXRlLmMKaW5kZXggMTM0MmYwMS4uNjcxNzY3OSAxMDA2NDQKLS0tIGEvZnMvamZmczIvd3JpdGUuYworKysgYi9mcy9qZmZzMi93cml0ZS5jCkBAIC0zNyw3ICszNyw2IEBACiAJZi0+aW5vY2FjaGUtPm5vZGVzID0gKHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKilmLT5pbm9jYWNoZTsKIAlmLT5pbm9jYWNoZS0+c3RhdGUgPSBJTk9fU1RBVEVfUFJFU0VOVDsKIAotCiAJamZmczJfYWRkX2lub19jYWNoZShjLCBmLT5pbm9jYWNoZSk7CiAJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2RvX25ld19pbm9kZSgpOiBBc3NpZ25lZCBpbm8jICVkXG4iLCBmLT5pbm9jYWNoZS0+aW5vKSk7CiAJcmktPmlubyA9IGNwdV90b19qZTMyKGYtPmlub2NhY2hlLT5pbm8pOwpAQCAtNTcsMTIgKzU2LDE0IEBACiAvKiBqZmZzMl93cml0ZV9kbm9kZSAtIGdpdmVuIGEgcmF3X2lub2RlLCBhbGxvY2F0ZSBhIGZ1bGxfZG5vZGUgZm9yIGl0LAogICAgd3JpdGUgaXQgdG8gdGhlIGZsYXNoLCBsaW5rIGl0IGludG8gdGhlIGV4aXN0aW5nIGlub2RlL2ZyYWdtZW50IGxpc3QgKi8KIAotc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKmpmZnMyX3dyaXRlX2Rub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVpbnQzMl90IGRhdGFsZW4sIHVpbnQzMl90IGZsYXNoX29mcywgaW50IGFsbG9jX21vZGUpCitzdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqamZmczJfd3JpdGVfZG5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLAorCQkJCQkgICBzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCQkJICAgdWludDMyX3QgZGF0YWxlbiwgaW50IGFsbG9jX21vZGUpCiAKIHsKLQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXc7CiAJc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKmZuOwogCXNpemVfdCByZXRsZW47CisJdWludDMyX3QgZmxhc2hfb2ZzOwogCXN0cnVjdCBrdmVjIHZlY3NbMl07CiAJaW50IHJldDsKIAlpbnQgcmV0cmllZCA9IDA7CkBAIC03OCwzNCArNzksMjEgQEAKIAl2ZWNzWzFdLmlvdl9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOwogCXZlY3NbMV0uaW92X2xlbiA9IGRhdGFsZW47CiAKLQlqZmZzMl9kYmdfcHJld3JpdGVfcGFyYW5vaWFfY2hlY2soYywgZmxhc2hfb2ZzLCB2ZWNzWzBdLmlvdl9sZW4gKyB2ZWNzWzFdLmlvdl9sZW4pOwotCiAJaWYgKGplMzJfdG9fY3B1KHJpLT50b3RsZW4pICE9IHNpemVvZigqcmkpICsgZGF0YWxlbikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl93cml0ZV9kbm9kZTogcmktPnRvdGxlbiAoMHglMDh4KSAhPSBzaXplb2YoKnJpKSAoMHglMDh6eCkgKyBkYXRhbGVuICgweCUwOHgpXG4iLCBqZTMyX3RvX2NwdShyaS0+dG90bGVuKSwgc2l6ZW9mKCpyaSksIGRhdGFsZW4pOwogCX0KLQlyYXcgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKTsKLQlpZiAoIXJhdykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlmbiA9IGpmZnMyX2FsbG9jX2Z1bGxfZG5vZGUoKTsKLQlpZiAoIWZuKSB7Ci0JCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKHJhdyk7CisJaWYgKCFmbikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCi0JZm4tPm9mcyA9IGplMzJfdG9fY3B1KHJpLT5vZmZzZXQpOwotCWZuLT5zaXplID0gamUzMl90b19jcHUocmktPmRzaXplKTsKLQlmbi0+ZnJhZ3MgPSAwOwogCiAJLyogY2hlY2sgbnVtYmVyIG9mIHZhbGlkIHZlY3MgKi8KIAlpZiAoIWRhdGFsZW4gfHwgIWRhdGEpCiAJCWNudCA9IDE7CiAgcmV0cnk6Ci0JZm4tPnJhdyA9IHJhdzsKKwlmbGFzaF9vZnMgPSB3cml0ZV9vZnMoYyk7CiAKLQlyYXctPmZsYXNoX29mZnNldCA9IGZsYXNoX29mczsKLQlyYXctPl9fdG90bGVuID0gUEFEKHNpemVvZigqcmkpK2RhdGFsZW4pOwotCXJhdy0+bmV4dF9waHlzID0gTlVMTDsKKwlqZmZzMl9kYmdfcHJld3JpdGVfcGFyYW5vaWFfY2hlY2soYywgZmxhc2hfb2ZzLCB2ZWNzWzBdLmlvdl9sZW4gKyB2ZWNzWzFdLmlvdl9sZW4pOwogCiAJaWYgKChhbGxvY19tb2RlIT1BTExPQ19HQykgJiYgKGplMzJfdG9fY3B1KHJpLT52ZXJzaW9uKSA8IGYtPmhpZ2hlc3RfdmVyc2lvbikpIHsKIAkJQlVHX09OKCFyZXRyaWVkKTsKQEAgLTEyNSwyMiArMTEzLDE2IEBACiAKIAkJLyogTWFyayB0aGUgc3BhY2UgYXMgZGlydGllZCAqLwogCQlpZiAocmV0bGVuKSB7Ci0JCQkvKiBEb2Vzbid0IGJlbG9uZyB0byBhbnkgaW5vZGUgKi8KLQkJCXJhdy0+bmV4dF9pbl9pbm8gPSBOVUxMOwotCiAJCQkvKiBEb24ndCBjaGFuZ2UgcmF3LT5zaXplIHRvIG1hdGNoIHJldGxlbi4gV2UgbWF5IGhhdmUKIAkJCSAgIHdyaXR0ZW4gdGhlIG5vZGUgaGVhZGVyIGFscmVhZHksIGFuZCBvbmx5IHRoZSBkYXRhIHdpbGwKIAkJCSAgIHNlZW0gY29ycnVwdGVkLCBpbiB3aGljaCBjYXNlIHRoZSBzY2FuIHdvdWxkIHNraXAgb3ZlcgogCQkJICAgYW55IG5vZGUgd2Ugd3JpdGUgYmVmb3JlIHRoZSBvcmlnaW5hbCBpbnRlbmRlZCBlbmQgb2YKIAkJCSAgIHRoaXMgbm9kZSAqLwotCQkJcmF3LT5mbGFzaF9vZmZzZXQgfD0gUkVGX09CU09MRVRFOwotCQkJamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHJhdyk7Ci0JCQlqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUoYywgcmF3KTsKKwkJCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBmbGFzaF9vZnMgfCBSRUZfT0JTT0xFVEUsIFBBRChzaXplb2YoKnJpKStkYXRhbGVuKSwgTlVMTCk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIk5vdCBtYXJraW5nIHRoZSBzcGFjZSBhdCAweCUwOHggYXMgZGlydHkgYmVjYXVzZSB0aGUgZmxhc2ggZHJpdmVyIHJldHVybmVkIHJldGxlbiB6ZXJvXG4iLCByYXctPmZsYXNoX29mZnNldCk7Ci0JCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJOb3QgbWFya2luZyB0aGUgc3BhY2UgYXQgMHglMDh4IGFzIGRpcnR5IGJlY2F1c2UgdGhlIGZsYXNoIGRyaXZlciByZXR1cm5lZCByZXRsZW4gemVyb1xuIiwgZmxhc2hfb2ZzKTsKIAkJfQotCQlpZiAoIXJldHJpZWQgJiYgYWxsb2NfbW9kZSAhPSBBTExPQ19OT1JFVFJZICYmIChyYXcgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKSkpIHsKKwkJaWYgKCFyZXRyaWVkICYmIGFsbG9jX21vZGUgIT0gQUxMT0NfTk9SRVRSWSkgewogCQkJLyogVHJ5IHRvIHJlYWxsb2NhdGUgc3BhY2UgYW5kIHJldHJ5ICovCiAJCQl1aW50MzJfdCBkdW1teTsKIAkJCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIgPSAmYy0+YmxvY2tzW2ZsYXNoX29mcyAvIGMtPnNlY3Rvcl9zaXplXTsKQEAgLTE1MywxOSArMTM1LDIwIEBACiAJCQlqZmZzMl9kYmdfYWNjdF9wYXJhbm9pYV9jaGVjayhjLCBqZWIpOwogCiAJCQlpZiAoYWxsb2NfbW9kZSA9PSBBTExPQ19HQykgewotCQkJCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgc2l6ZW9mKCpyaSkgKyBkYXRhbGVuLCAmZmxhc2hfb2ZzLAotCQkJCQkJCSZkdW1teSwgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKKwkJCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHNpemVvZigqcmkpICsgZGF0YWxlbiwgJmR1bW15LAorCQkJCQkJCSAgICAgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogTG9ja2luZyBwYWluICovCiAJCQkJdXAoJmYtPnNlbSk7CiAJCQkJamZmczJfY29tcGxldGVfcmVzZXJ2YXRpb24oYyk7CiAKLQkJCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmkpICsgZGF0YWxlbiwgJmZsYXNoX29mcywKLQkJCQkJCQkmZHVtbXksIGFsbG9jX21vZGUsIEpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CisJCQkJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJpKSArIGRhdGFsZW4sICZkdW1teSwKKwkJCQkJCQkgIGFsbG9jX21vZGUsIEpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CiAJCQkJZG93bigmZi0+c2VtKTsKIAkJCX0KIAogCQkJaWYgKCFyZXQpIHsKKwkJCQlmbGFzaF9vZnMgPSB3cml0ZV9vZnMoYyk7CiAJCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkFsbG9jYXRlZCBzcGFjZSBhdCAweCUwOHggdG8gcmV0cnkgZmFpbGVkIHdyaXRlLlxuIiwgZmxhc2hfb2ZzKSk7CiAKIAkJCQlqZmZzMl9kYmdfYWNjdF9zYW5pdHlfY2hlY2soYyxqZWIpOwpAQCAtMTc0LDcgKzE1Nyw2IEBACiAJCQkJZ290byByZXRyeTsKIAkJCX0KIAkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gYWxsb2NhdGUgc3BhY2UgdG8gcmV0cnkgZmFpbGVkIHdyaXRlOiAlZCFcbiIsIHJldCkpOwotCQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYocmF3KTsKIAkJfQogCQkvKiBSZWxlYXNlIHRoZSBmdWxsX2Rub2RlIHdoaWNoIGlzIG5vdyB1c2VsZXNzLCBhbmQgcmV0dXJuICovCiAJCWpmZnMyX2ZyZWVfZnVsbF9kbm9kZShmbik7CkBAIC0xODgsMjAgKzE3MCwxNyBAQAogCWlmICgoamUzMl90b19jcHUocmktPmRzaXplKSA+PSBQQUdFX0NBQ0hFX1NJWkUpIHx8CiAJICAgICggKChqZTMyX3RvX2NwdShyaS0+b2Zmc2V0KSYoUEFHRV9DQUNIRV9TSVpFLTEpKT09MCkgJiYKIAkgICAgICAoamUzMl90b19jcHUocmktPmRzaXplKStqZTMyX3RvX2NwdShyaS0+b2Zmc2V0KSA9PSAgamUzMl90b19jcHUocmktPmlzaXplKSkpKSB7Ci0JCXJhdy0+Zmxhc2hfb2Zmc2V0IHw9IFJFRl9QUklTVElORTsKKwkJZmxhc2hfb2ZzIHw9IFJFRl9QUklTVElORTsKIAl9IGVsc2UgewotCQlyYXctPmZsYXNoX29mZnNldCB8PSBSRUZfTk9STUFMOworCQlmbGFzaF9vZnMgfD0gUkVGX05PUk1BTDsKIAl9Ci0JamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHJhdyk7Ci0KLQkvKiBMaW5rIGludG8gcGVyLWlub2RlIGxpc3QgKi8KLQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0JcmF3LT5uZXh0X2luX2lubyA9IGYtPmlub2NhY2hlLT5ub2RlczsKLQlmLT5pbm9jYWNoZS0+bm9kZXMgPSByYXc7Ci0Jc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJZm4tPnJhdyA9IGpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBmbGFzaF9vZnMsIFBBRChzaXplb2YoKnJpKStkYXRhbGVuKSwgZi0+aW5vY2FjaGUpOworCWZuLT5vZnMgPSBqZTMyX3RvX2NwdShyaS0+b2Zmc2V0KTsKKwlmbi0+c2l6ZSA9IGplMzJfdG9fY3B1KHJpLT5kc2l6ZSk7CisJZm4tPmZyYWdzID0gMDsKIAogCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl93cml0ZV9kbm9kZSB3cm90ZSBub2RlIGF0IDB4JTA4eCglZCkgd2l0aCBkc2l6ZSAweCV4LCBjc2l6ZSAweCV4LCBub2RlX2NyYyAweCUwOHgsIGRhdGFfY3JjIDB4JTA4eCwgdG90bGVuIDB4JTA4eFxuIiwKLQkJICBmbGFzaF9vZnMsIHJlZl9mbGFncyhyYXcpLCBqZTMyX3RvX2NwdShyaS0+ZHNpemUpLAorCQkgIGZsYXNoX29mcyAmIH4zLCBmbGFzaF9vZnMgJiAzLCBqZTMyX3RvX2NwdShyaS0+ZHNpemUpLAogCQkgIGplMzJfdG9fY3B1KHJpLT5jc2l6ZSksIGplMzJfdG9fY3B1KHJpLT5ub2RlX2NyYyksCiAJCSAgamUzMl90b19jcHUocmktPmRhdGFfY3JjKSwgamUzMl90b19jcHUocmktPnRvdGxlbikpKTsKIApAQCAtMjEyLDEyICsxOTEsMTQgQEAKIAlyZXR1cm4gZm47CiB9CiAKLXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqamZmczJfd3JpdGVfZGlyZW50KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwgc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCB1aW50MzJfdCBuYW1lbGVuLCB1aW50MzJfdCBmbGFzaF9vZnMsIGludCBhbGxvY19tb2RlKQorc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpqZmZzMl93cml0ZV9kaXJlbnQoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLAorCQkJCQkgICAgIHN0cnVjdCBqZmZzMl9yYXdfZGlyZW50ICpyZCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwkJCQkJICAgICB1aW50MzJfdCBuYW1lbGVuLCBpbnQgYWxsb2NfbW9kZSkKIHsKLQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXc7CiAJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpmZDsKIAlzaXplX3QgcmV0bGVuOwogCXN0cnVjdCBrdmVjIHZlY3NbMl07CisJdWludDMyX3QgZmxhc2hfb2ZzOwogCWludCByZXRyaWVkID0gMDsKIAlpbnQgcmV0OwogCkBAIC0yMjgsMjYgKzIwOSwxNiBAQAogCUQxKGlmKGplMzJfdG9fY3B1KHJkLT5oZHJfY3JjKSAhPSBjcmMzMigwLCByZCwgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpLTQpKSB7CiAJCXByaW50ayhLRVJOX0NSSVQgIkVlcC4gQ1JDIG5vdCBjb3JyZWN0IGluIGpmZnMyX3dyaXRlX2RpcmVudCgpXG4iKTsKIAkJQlVHKCk7Ci0JfQotCSAgICk7CisJICAgfSk7CiAKIAl2ZWNzWzBdLmlvdl9iYXNlID0gcmQ7CiAJdmVjc1swXS5pb3ZfbGVuID0gc2l6ZW9mKCpyZCk7CiAJdmVjc1sxXS5pb3ZfYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopbmFtZTsKIAl2ZWNzWzFdLmlvdl9sZW4gPSBuYW1lbGVuOwogCi0JamZmczJfZGJnX3ByZXdyaXRlX3BhcmFub2lhX2NoZWNrKGMsIGZsYXNoX29mcywgdmVjc1swXS5pb3ZfbGVuICsgdmVjc1sxXS5pb3ZfbGVuKTsKLQotCXJhdyA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOwotCi0JaWYgKCFyYXcpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCiAJZmQgPSBqZmZzMl9hbGxvY19mdWxsX2RpcmVudChuYW1lbGVuKzEpOwotCWlmICghZmQpIHsKLQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYocmF3KTsKKwlpZiAoIWZkKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9CiAKIAlmZC0+dmVyc2lvbiA9IGplMzJfdG9fY3B1KHJkLT52ZXJzaW9uKTsKIAlmZC0+aW5vID0gamUzMl90b19jcHUocmQtPmlubyk7CkBAIC0yNTcsMTEgKzIyOCw5IEBACiAJZmQtPm5hbWVbbmFtZWxlbl09MDsKIAogIHJldHJ5OgotCWZkLT5yYXcgPSByYXc7CisJZmxhc2hfb2ZzID0gd3JpdGVfb2ZzKGMpOwogCi0JcmF3LT5mbGFzaF9vZmZzZXQgPSBmbGFzaF9vZnM7Ci0JcmF3LT5fX3RvdGxlbiA9IFBBRChzaXplb2YoKnJkKStuYW1lbGVuKTsKLQlyYXctPm5leHRfcGh5cyA9IE5VTEw7CisJamZmczJfZGJnX3ByZXdyaXRlX3BhcmFub2lhX2NoZWNrKGMsIGZsYXNoX29mcywgdmVjc1swXS5pb3ZfbGVuICsgdmVjc1sxXS5pb3ZfbGVuKTsKIAogCWlmICgoYWxsb2NfbW9kZSE9QUxMT0NfR0MpICYmIChqZTMyX3RvX2NwdShyZC0+dmVyc2lvbikgPCBmLT5oaWdoZXN0X3ZlcnNpb24pKSB7CiAJCUJVR19PTighcmV0cmllZCk7CkBAIC0yODAsMTUgKzI0OSwxMSBAQAogCQkJICAgICAgIHNpemVvZigqcmQpK25hbWVsZW4sIGZsYXNoX29mcywgcmV0LCByZXRsZW4pOwogCQkvKiBNYXJrIHRoZSBzcGFjZSBhcyBkaXJ0aWVkICovCiAJCWlmIChyZXRsZW4pIHsKLQkJCXJhdy0+bmV4dF9pbl9pbm8gPSBOVUxMOwotCQkJcmF3LT5mbGFzaF9vZmZzZXQgfD0gUkVGX09CU09MRVRFOwotCQkJamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHJhdyk7Ci0JCQlqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUoYywgcmF3KTsKKwkJCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBmbGFzaF9vZnMgfCBSRUZfT0JTT0xFVEUsIFBBRChzaXplb2YoKnJkKStuYW1lbGVuKSwgTlVMTCk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIk5vdCBtYXJraW5nIHRoZSBzcGFjZSBhdCAweCUwOHggYXMgZGlydHkgYmVjYXVzZSB0aGUgZmxhc2ggZHJpdmVyIHJldHVybmVkIHJldGxlbiB6ZXJvXG4iLCByYXctPmZsYXNoX29mZnNldCk7Ci0JCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJOb3QgbWFya2luZyB0aGUgc3BhY2UgYXQgMHglMDh4IGFzIGRpcnR5IGJlY2F1c2UgdGhlIGZsYXNoIGRyaXZlciByZXR1cm5lZCByZXRsZW4gemVyb1xuIiwgZmxhc2hfb2ZzKTsKIAkJfQotCQlpZiAoIXJldHJpZWQgJiYgKHJhdyA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpKSkgeworCQlpZiAoIXJldHJpZWQpIHsKIAkJCS8qIFRyeSB0byByZWFsbG9jYXRlIHNwYWNlIGFuZCByZXRyeSAqLwogCQkJdWludDMyX3QgZHVtbXk7CiAJCQlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViID0gJmMtPmJsb2Nrc1tmbGFzaF9vZnMgLyBjLT5zZWN0b3Jfc2l6ZV07CkBAIC0zMDEsMzkgKzI2NiwzMyBAQAogCQkJamZmczJfZGJnX2FjY3RfcGFyYW5vaWFfY2hlY2soYywgamViKTsKIAogCQkJaWYgKGFsbG9jX21vZGUgPT0gQUxMT0NfR0MpIHsKLQkJCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHNpemVvZigqcmQpICsgbmFtZWxlbiwgJmZsYXNoX29mcywKLQkJCQkJCQkmZHVtbXksIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobmFtZWxlbikpOworCQkJCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgc2l6ZW9mKCpyZCkgKyBuYW1lbGVuLCAmZHVtbXksCisJCQkJCQkJICAgICBKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogTG9ja2luZyBwYWluICovCiAJCQkJdXAoJmYtPnNlbSk7CiAJCQkJamZmczJfY29tcGxldGVfcmVzZXJ2YXRpb24oYyk7CiAKLQkJCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmQpICsgbmFtZWxlbiwgJmZsYXNoX29mcywKLQkJCQkJCQkmZHVtbXksIGFsbG9jX21vZGUsIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobmFtZWxlbikpOworCQkJCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkgKyBuYW1lbGVuLCAmZHVtbXksCisJCQkJCQkJICBhbGxvY19tb2RlLCBKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsKIAkJCQlkb3duKCZmLT5zZW0pOwogCQkJfQogCiAJCQlpZiAoIXJldCkgeworCQkJCWZsYXNoX29mcyA9IHdyaXRlX29mcyhjKTsKIAkJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiQWxsb2NhdGVkIHNwYWNlIGF0IDB4JTA4eCB0byByZXRyeSBmYWlsZWQgd3JpdGUuXG4iLCBmbGFzaF9vZnMpKTsKIAkJCQlqZmZzMl9kYmdfYWNjdF9zYW5pdHlfY2hlY2soYyxqZWIpOwogCQkJCWpmZnMyX2RiZ19hY2N0X3BhcmFub2lhX2NoZWNrKGMsIGplYik7CiAJCQkJZ290byByZXRyeTsKIAkJCX0KIAkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gYWxsb2NhdGUgc3BhY2UgdG8gcmV0cnkgZmFpbGVkIHdyaXRlOiAlZCFcbiIsIHJldCkpOwotCQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYocmF3KTsKIAkJfQogCQkvKiBSZWxlYXNlIHRoZSBmdWxsX2Rub2RlIHdoaWNoIGlzIG5vdyB1c2VsZXNzLCBhbmQgcmV0dXJuICovCiAJCWpmZnMyX2ZyZWVfZnVsbF9kaXJlbnQoZmQpOwogCQlyZXR1cm4gRVJSX1BUUihyZXQ/cmV0Oi1FSU8pOwogCX0KIAkvKiBNYXJrIHRoZSBzcGFjZSB1c2VkICovCi0JcmF3LT5mbGFzaF9vZmZzZXQgfD0gUkVGX1BSSVNUSU5FOwotCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCByYXcpOwotCi0Jc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCXJhdy0+bmV4dF9pbl9pbm8gPSBmLT5pbm9jYWNoZS0+bm9kZXM7Ci0JZi0+aW5vY2FjaGUtPm5vZGVzID0gcmF3OwotCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCWZkLT5yYXcgPSBqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoYywgZmxhc2hfb2ZzIHwgUkVGX1BSSVNUSU5FLCBQQUQoc2l6ZW9mKCpyZCkrbmFtZWxlbiksIGYtPmlub2NhY2hlKTsKIAogCWlmIChyZXRyaWVkKSB7CiAJCWpmZnMyX2RiZ19hY2N0X3Nhbml0eV9jaGVjayhjLE5VTEwpOwpAQCAtMzU5LDE0ICszMTgsMTQgQEAKIAkJc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKmZuOwogCQl1bnNpZ25lZCBjaGFyICpjb21wcmJ1ZiA9IE5VTEw7CiAJCXVpbnQxNl90IGNvbXBydHlwZSA9IEpGRlMyX0NPTVBSX05PTkU7Ci0JCXVpbnQzMl90IHBoeXNfb2ZzLCBhbGxvY2xlbjsKKwkJdWludDMyX3QgYWxsb2NsZW47CiAJCXVpbnQzMl90IGRhdGFsZW4sIGNkYXRhbGVuOwogCQlpbnQgcmV0cmllZCA9IDA7CiAKIAlyZXRyeToKIAkJRDIocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2NvbW1pdF93cml0ZSgpIGxvb3A6IDB4JXggdG8gd3JpdGUgdG8gMHgleFxuIiwgd3JpdGVsZW4sIG9mZnNldCkpOwogCi0JCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyaSkgKyBKRkZTMl9NSU5fREFUQV9MRU4sICZwaHlzX29mcywKKwkJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJpKSArIEpGRlMyX01JTl9EQVRBX0xFTiwKIAkJCQkJJmFsbG9jbGVuLCBBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CiAJCWlmIChyZXQpIHsKIAkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9yZXNlcnZlX3NwYWNlIHJldHVybmVkICVkXG4iLCByZXQpKTsKQEAgLTM5NCw3ICszNTMsNyBAQAogCQlyaS0+bm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCByaSwgc2l6ZW9mKCpyaSktOCkpOwogCQlyaS0+ZGF0YV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCBjb21wcmJ1ZiwgY2RhdGFsZW4pKTsKIAotCQlmbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsIHJpLCBjb21wcmJ1ZiwgY2RhdGFsZW4sIHBoeXNfb2ZzLCBBTExPQ19OT1JFVFJZKTsKKwkJZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCByaSwgY29tcHJidWYsIGNkYXRhbGVuLCBBTExPQ19OT1JFVFJZKTsKIAogCQlqZmZzMl9mcmVlX2NvbXByYnVmKGNvbXByYnVmLCBidWYpOwogCkBAIC00NDgsMTMgKzQwNywxMyBAQAogCXN0cnVjdCBqZmZzMl9yYXdfZGlyZW50ICpyZDsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqZm47CiAJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpmZDsKLQl1aW50MzJfdCBhbGxvY2xlbiwgcGh5c19vZnM7CisJdWludDMyX3QgYWxsb2NsZW47CiAJaW50IHJldDsKIAogCS8qIFRyeSB0byByZXNlcnZlIGVub3VnaCBzcGFjZSBmb3IgYm90aCBub2RlIGFuZCBkaXJlbnQuCiAJICogSnVzdCB0aGUgbm9kZSB3aWxsIGRvIGZvciBub3csIHRob3VnaAogCSAqLwotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyaSksICZwaHlzX29mcywgJmFsbG9jbGVuLCBBTExPQ19OT1JNQUwsCisJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJpKSwgJmFsbG9jbGVuLCBBTExPQ19OT1JNQUwsCiAJCQkJSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZG9fY3JlYXRlKCk6IHJlc2VydmVkIDB4JXggYnl0ZXNcbiIsIGFsbG9jbGVuKSk7CiAJaWYgKHJldCkgewpAQCAtNDY1LDcgKzQyNCw3IEBACiAJcmktPmRhdGFfY3JjID0gY3B1X3RvX2plMzIoMCk7CiAJcmktPm5vZGVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgcmksIHNpemVvZigqcmkpLTgpKTsKIAotCWZuID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgcmksIE5VTEwsIDAsIHBoeXNfb2ZzLCBBTExPQ19OT1JNQUwpOworCWZuID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgcmksIE5VTEwsIDAsIEFMTE9DX05PUk1BTCk7CiAKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZG9fY3JlYXRlIGNyZWF0ZWQgZmlsZSB3aXRoIG1vZGUgMHgleFxuIiwKIAkJICBqZW1vZGVfdG9fY3B1KHJpLT5tb2RlKSkpOwpAQCAtNDg0LDcgKzQ0Myw3IEBACiAKIAl1cCgmZi0+c2VtKTsKIAlqZmZzMl9jb21wbGV0ZV9yZXNlcnZhdGlvbihjKTsKLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmQpK25hbWVsZW4sICZwaHlzX29mcywgJmFsbG9jbGVuLAorCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgJmFsbG9jbGVuLAogCQkJCUFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRShuYW1lbGVuKSk7CiAKIAlpZiAocmV0KSB7CkBAIC01MTYsNyArNDc1LDcgQEAKIAlyZC0+bm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCByZCwgc2l6ZW9mKCpyZCktOCkpOwogCXJkLT5uYW1lX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIG5hbWUsIG5hbWVsZW4pKTsKIAotCWZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIGRpcl9mLCByZCwgbmFtZSwgbmFtZWxlbiwgcGh5c19vZnMsIEFMTE9DX05PUk1BTCk7CisJZmQgPSBqZmZzMl93cml0ZV9kaXJlbnQoYywgZGlyX2YsIHJkLCBuYW1lLCBuYW1lbGVuLCBBTExPQ19OT1JNQUwpOwogCiAJamZmczJfZnJlZV9yYXdfZGlyZW50KHJkKTsKIApAQCAtNTQ1LDcgKzUwNCw3IEBACiB7CiAJc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkOwogCXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqZmQ7Ci0JdWludDMyX3QgYWxsb2NsZW4sIHBoeXNfb2ZzOworCXVpbnQzMl90IGFsbG9jbGVuOwogCWludCByZXQ7CiAKIAlpZiAoMSAvKiBhbHRlcm5hdGl2ZSBicmFuY2ggbmVlZHMgdGVzdGluZyAqLyB8fApAQCAtNTU2LDcgKzUxNSw3IEBACiAJCWlmICghcmQpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmQpK25hbWVsZW4sICZwaHlzX29mcywgJmFsbG9jbGVuLAorCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmQpK25hbWVsZW4sICZhbGxvY2xlbiwKIAkJCQkJQUxMT0NfREVMRVRJT04sIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobmFtZWxlbikpOwogCQlpZiAocmV0KSB7CiAJCQlqZmZzMl9mcmVlX3Jhd19kaXJlbnQocmQpOwpAQCAtNTgwLDcgKzUzOSw3IEBACiAJCXJkLT5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHJkLCBzaXplb2YoKnJkKS04KSk7CiAJCXJkLT5uYW1lX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIG5hbWUsIG5hbWVsZW4pKTsKIAotCQlmZCA9IGpmZnMyX3dyaXRlX2RpcmVudChjLCBkaXJfZiwgcmQsIG5hbWUsIG5hbWVsZW4sIHBoeXNfb2ZzLCBBTExPQ19ERUxFVElPTik7CisJCWZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIGRpcl9mLCByZCwgbmFtZSwgbmFtZWxlbiwgQUxMT0NfREVMRVRJT04pOwogCiAJCWpmZnMyX2ZyZWVfcmF3X2RpcmVudChyZCk7CiAKQEAgLTY1OSwxNCArNjE4LDE0IEBACiB7CiAJc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkOwogCXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqZmQ7Ci0JdWludDMyX3QgYWxsb2NsZW4sIHBoeXNfb2ZzOworCXVpbnQzMl90IGFsbG9jbGVuOwogCWludCByZXQ7CiAKIAlyZCA9IGpmZnMyX2FsbG9jX3Jhd19kaXJlbnQoKTsKIAlpZiAoIXJkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCisJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJkKStuYW1lbGVuLCAmYWxsb2NsZW4sCiAJCQkJQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsKIAlpZiAocmV0KSB7CiAJCWpmZnMyX2ZyZWVfcmF3X2RpcmVudChyZCk7CkBAIC02OTIsNyArNjUxLDcgQEAKIAlyZC0+bm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCByZCwgc2l6ZW9mKCpyZCktOCkpOwogCXJkLT5uYW1lX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIG5hbWUsIG5hbWVsZW4pKTsKIAotCWZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIGRpcl9mLCByZCwgbmFtZSwgbmFtZWxlbiwgcGh5c19vZnMsIEFMTE9DX05PUk1BTCk7CisJZmQgPSBqZmZzMl93cml0ZV9kaXJlbnQoYywgZGlyX2YsIHJkLCBuYW1lLCBuYW1lbGVuLCBBTExPQ19OT1JNQUwpOwogCiAJamZmczJfZnJlZV9yYXdfZGlyZW50KHJkKTsKIApkaWZmIC0tZ2l0IGEvZnMvamZmczIveGF0dHIuYyBiL2ZzL2pmZnMyL3hhdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4MmUyNQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2pmZnMyL3hhdHRyLmMKQEAgLTAsMCArMSwxMjM4IEBACisvKgorICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIE5FQyBDb3Jwb3JhdGlvbgorICoKKyAqIENyZWF0ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KKyAqCisgKiBGb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZpbGUgJ0xJQ0VOQ0UnIGluIHRoaXMgZGlyZWN0b3J5LgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvamZmczIuaD4KKyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlICJub2RlbGlzdC5oIgorLyogLS0tLS0tLS0geGRhdHVtIHJlbGF0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0KKyAqIHhhdHRyX2RhdHVtX2hhc2hrZXkoeHByZWZpeCwgeG5hbWUsIHh2YWx1ZSwgeHNpemUpCisgKiAgIGlzIHVzZWQgdG8gY2FsY3VyYXRlIHhkYXR1bSBoYXNoa2V5LiBUaGUgcmVtaW5kZXIgb2YgaGFzaGtleSBpbnRvIFhBVFRSSU5ERVhfSEFTSFNJWkUgaXMKKyAqICAgdGhlIGluZGV4IG9mIHRoZSB4YXR0ciBuYW1lL3ZhbHVlIHBhaXIgY2FjaGUgKGMtPnhhdHRyaW5kZXgpLgorICogdW5sb2FkX3hhdHRyX2RhdHVtKGMsIHhkKQorICogICBpcyB1c2VkIHRvIHJlbGVhc2UgeGF0dHIgbmFtZS92YWx1ZSBwYWlyIGFuZCBkZXRhY2ggZnJvbSBjLT54YXR0cmluZGV4LgorICogcmVjbGFpbV94YXR0cl9kYXR1bShjKQorICogICBpcyB1c2VkIHRvIHJlY2xhaW0geGF0dHIgbmFtZS92YWx1ZSBwYWlycyBvbiB0aGUgeGF0dHIgbmFtZS92YWx1ZSBwYWlyIGNhY2hlIHdoZW4KKyAqICAgbWVtb3J5IHVzYWdlIGJ5IGNhY2hlIGlzIG92ZXIgYy0+eGRhdHVtX21lbV90aHJlc2hvbGQuIEN1cnJlbnRyeSwgdGhpcyB0aHJlc2hvbGQgCisgKiAgIGlzIGhhcmQgY29kZWQgYXMgMzJLaUIuCisgKiBkZWxldGVfeGF0dHJfZGF0dW1fbm9kZShjLCB4ZCkKKyAqICAgaXMgdXNlZCB0byBkZWxldGUgYSBqZmZzMiBub2RlIGlzIGRvbWluYXRlZCBieSB4ZGF0dW0uIFdoZW4gRUJTKEVyYXNlIEJsb2NrIFN1bW1hcnkpIGlzCisgKiAgIGVuYWJsZWQsIGl0IG92ZXJ3cml0ZXMgdGhlIG9ic29sZXRlIG5vZGUgYnkgbXlzZWxmLgorICogZGVsZXRlX3hhdHRyX2RhdHVtKGMsIHhkKQorICogICBpcyB1c2VkIHRvIGRlbGV0ZSBqZmZzMl94YXR0cl9kYXR1bSBvYmplY3QuIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggMC12YWx1ZSBvZiByZWZlcmVuY2UKKyAqICAgY291bnRlci4gKEl0IG1lYW5zIGhvdyBtYW55IGpmZnMyX3hhdHRyX3JlZiBvYmplY3QgcmVmZXJzIHRoaXMgeGRhdHVtLikKKyAqIGRvX3ZlcmlmeV94YXR0cl9kYXR1bShjLCB4ZCkKKyAqICAgaXMgdXNlZCB0byBsb2FkIHRoZSB4ZGF0dW0gaW5mb3JtYXRpb25zIHdpdGhvdXQgbmFtZS92YWx1ZSBwYWlyIGZyb20gdGhlIG1lZGl1bS4KKyAqICAgSXQncyBuZWNlc3Nhcnkgb25jZSwgYmVjYXVzZSB0aG9zZSBpbmZvcm1hdGlvbnMgYXJlIG5vdCBjb2xsZWN0ZWQgZHVyaW5nIG1vdW50aW5nCisgKiAgIHByb2Nlc3Mgd2hlbiBFQlMgaXMgZW5hYmxlZC4KKyAqICAgMCB3aWxsIGJlIHJldHVybmVkLCBpZiBzdWNjZXNzLiBBbiBuZWdhdGl2ZSByZXR1cm4gdmFsdWUgbWVhbnMgcmVjb3ZlcmFibGUgZXJyb3IsIGFuZAorICogICBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgbWVhbnMgdW5yZWNvdmVyYWJsZSBlcnJvci4gVGh1cywgY2FsbGVyIG11c3QgcmVtb3ZlIHRoaXMgeGRhdHVtCisgKiAgIGFuZCB4cmVmIHdoZW4gaXQgcmV0dXJuZWQgcG9zaXRpdmUgdmFsdWUuCisgKiBkb19sb2FkX3hhdHRyX2RhdHVtKGMsIHhkKQorICogICBpcyB1c2VkIHRvIGxvYWQgbmFtZS92YWx1ZSBwYWlyIGZyb20gdGhlIG1lZGl1bS4KKyAqICAgVGhlIG1lYW5pbmdzIG9mIHJldHVybiB2YWx1ZSBpcyBzYW1lIGFzIGRvX3ZlcmlmeV94YXR0cl9kYXR1bSgpLgorICogbG9hZF94YXR0cl9kYXR1bShjLCB4ZCkKKyAqICAgaXMgdXNlZCB0byBiZSBhcyBhIHdyYXBwZXIgb2YgZG9fdmVyaWZ5X3hhdHRyX2RhdHVtKCkgYW5kIGRvX2xvYWRfeGF0dHJfZGF0dW0oKS4KKyAqICAgSWYgeGQgbmVlZCB0byBjYWxsIGRvX3ZlcmlmeV94YXR0cl9kYXR1bSgpIGF0IGZpcnN0LCBpdCdzIGNhbGxlZCBiZWZvcmUgY2FsbGluZworICogICBkb19sb2FkX3hhdHRyX2RhdHVtKCkuIFRoZSBtZWFuaW5ncyBvZiByZXR1cm4gdmFsdWUgaXMgc2FtZSBhcyBkb192ZXJpZnlfeGF0dHJfZGF0dW0oKS4KKyAqIHNhdmVfeGF0dHJfZGF0dW0oYywgeGQpCisgKiAgIGlzIHVzZWQgdG8gd3JpdGUgeGRhdHVtIHRvIG1lZGl1bS4geGQtPnZlcnNpb24gd2lsbCBiZSBpbmNyZW1lbnRlZC4KKyAqIGNyZWF0ZV94YXR0cl9kYXR1bShjLCB4cHJlZml4LCB4bmFtZSwgeHZhbHVlLCB4c2l6ZSkKKyAqICAgaXMgdXNlZCB0byBjcmVhdGUgbmV3IHhkYXR1bSBhbmQgd3JpdGUgdG8gbWVkaXVtLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHVpbnQzMl90IHhhdHRyX2RhdHVtX2hhc2hrZXkoaW50IHhwcmVmaXgsIGNvbnN0IGNoYXIgKnhuYW1lLCBjb25zdCBjaGFyICp4dmFsdWUsIGludCB4c2l6ZSkKK3sKKwlpbnQgbmFtZV9sZW4gPSBzdHJsZW4oeG5hbWUpOworCisJcmV0dXJuIGNyYzMyKHhwcmVmaXgsIHhuYW1lLCBuYW1lX2xlbikgXiBjcmMzMih4cHJlZml4LCB4dmFsdWUsIHhzaXplKTsKK30KKworc3RhdGljIHZvaWQgdW5sb2FkX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKQoreworCS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSAqLworCUQxKGRiZ194YXR0cigiJXM6IHhpZD0ldSwgdmVyc2lvbj0ldVxuIiwgX19GVU5DVElPTl9fLCB4ZC0+eGlkLCB4ZC0+dmVyc2lvbikpOworCWlmICh4ZC0+eG5hbWUpIHsKKwkJYy0+eGRhdHVtX21lbV91c2FnZSAtPSAoeGQtPm5hbWVfbGVuICsgMSArIHhkLT52YWx1ZV9sZW4pOworCQlrZnJlZSh4ZC0+eG5hbWUpOworCX0KKworCWxpc3RfZGVsX2luaXQoJnhkLT54aW5kZXgpOworCXhkLT5oYXNoa2V5ID0gMDsKKwl4ZC0+eG5hbWUgPSBOVUxMOworCXhkLT54dmFsdWUgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZWNsYWltX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQoreworCS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSAqLworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQsICpfeGQ7CisJdWludDMyX3QgdGFyZ2V0LCBiZWZvcmU7CisJc3RhdGljIGludCBpbmRleCA9IDA7CisJaW50IGNvdW50OworCisJaWYgKGMtPnhkYXR1bV9tZW1fdGhyZXNob2xkID4gYy0+eGRhdHVtX21lbV91c2FnZSkKKwkJcmV0dXJuOworCisJYmVmb3JlID0gYy0+eGRhdHVtX21lbV91c2FnZTsKKwl0YXJnZXQgPSBjLT54ZGF0dW1fbWVtX3VzYWdlICogNCAvIDU7IC8qIDIwJSByZWR1Y3Rpb24gKi8KKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBYQVRUUklOREVYX0hBU0hTSVpFOyBjb3VudCsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4ZCwgX3hkLCAmYy0+eGF0dHJpbmRleFtpbmRleF0sIHhpbmRleCkgeworCQkJaWYgKHhkLT5mbGFncyAmIEpGRlMyX1hGTEFHU19IT1QpIHsKKwkJCQl4ZC0+ZmxhZ3MgJj0gfkpGRlMyX1hGTEFHU19IT1Q7CisJCQl9IGVsc2UgaWYgKCEoeGQtPmZsYWdzICYgSkZGUzJfWEZMQUdTX0JJTkQpKSB7CisJCQkJdW5sb2FkX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwkJCX0KKwkJCWlmIChjLT54ZGF0dW1fbWVtX3VzYWdlIDw9IHRhcmdldCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlpbmRleCA9IChpbmRleCsxKSAlIFhBVFRSSU5ERVhfSEFTSFNJWkU7CisJfQorIG91dDoKKwlKRkZTMl9OT1RJQ0UoInhkYXR1bV9tZW1fdXNhZ2UgZnJvbSAldSBieXRlIHRvICV1IGJ5dGUgKCV1IGJ5dGUgcmVjbGFpbWVkKVxuIiwKKwkJICAgICBiZWZvcmUsIGMtPnhkYXR1bV9tZW1fdXNhZ2UsIGJlZm9yZSAtIGMtPnhkYXR1bV9tZW1fdXNhZ2UpOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfeGF0dHJfZGF0dW1fbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCkKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlzdHJ1Y3QgamZmczJfcmF3X3hhdHRyIHJ4OworCXNpemVfdCBsZW5ndGg7CisJaW50IHJjOworCisJaWYgKCF4ZC0+bm9kZSkgeworCQlKRkZTMl9XQVJOSU5HKCJ4ZGF0dW0gKHhpZD0ldSkgaXMgcmVtb3ZlZCB0d2ljZS5cbiIsIHhkLT54aWQpOworCQlyZXR1cm47CisJfQorCWlmIChqZmZzMl9zdW1fYWN0aXZlKCkpIHsKKwkJbWVtc2V0KCZyeCwgMHhmZiwgc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIpKTsKKwkJcmMgPSBqZmZzMl9mbGFzaF9yZWFkKGMsIHJlZl9vZmZzZXQoeGQtPm5vZGUpLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSwKKwkJCQkgICAgICAmbGVuZ3RoLCAoY2hhciAqKSZyeCk7CisJCWlmIChyYyB8fCBsZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKSB7CisJCQlKRkZTMl9FUlJPUigiamZmczJfZmxhc2hfcmVhZCgpPSVkLCByZXE9JXp1LCByZWFkPSV6dSBhdCAlIzA4eFxuIiwKKwkJCQkgICAgcmMsIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSwKKwkJCQkgICAgbGVuZ3RoLCByZWZfb2Zmc2V0KHhkLT5ub2RlKSk7CisJCX0KKwkJcmMgPSBqZmZzMl9mbGFzaF93cml0ZShjLCByZWZfb2Zmc2V0KHhkLT5ub2RlKSwgc2l6ZW9mKHJ4KSwKKwkJCQkgICAgICAgJmxlbmd0aCwgKGNoYXIgKikmcngpOworCQlpZiAocmMgfHwgbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hhdHRyKSkgeworCQkJSkZGUzJfRVJST1IoImpmZnMyX2ZsYXNoX3dyaXRlKCk9JWQsIHJlcT0lenUsIHdyb3RlPSV6dSBhciAlIzA4eFxuIiwKKwkJCQkgICAgcmMsIHNpemVvZihyeCksIGxlbmd0aCwgcmVmX29mZnNldCh4ZC0+bm9kZSkpOworCQl9CisJfQorCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwl4ZC0+bm9kZS0+bmV4dF9pbl9pbm8gPSBOVUxMOworCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCB4ZC0+bm9kZSk7CisJeGQtPm5vZGUgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfeGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJQlVHX09OKHhkLT5yZWZjbnQpOworCisJdW5sb2FkX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwlpZiAoeGQtPm5vZGUpIHsKKwkJZGVsZXRlX3hhdHRyX2RhdHVtX25vZGUoYywgeGQpOworCQl4ZC0+bm9kZSA9IE5VTEw7CisJfQorCWpmZnMyX2ZyZWVfeGF0dHJfZGF0dW0oeGQpOworfQorCitzdGF0aWMgaW50IGRvX3ZlcmlmeV94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCkKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViOworCXN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgcng7CisJc2l6ZV90IHJlYWRsZW47CisJdWludDMyX3QgY3JjLCB0b3RsZW47CisJaW50IHJjOworCisJQlVHX09OKCF4ZC0+bm9kZSk7CisJQlVHX09OKHJlZl9mbGFncyh4ZC0+bm9kZSkgIT0gUkVGX1VOQ0hFQ0tFRCk7CisKKwlyYyA9IGpmZnMyX2ZsYXNoX3JlYWQoYywgcmVmX29mZnNldCh4ZC0+bm9kZSksIHNpemVvZihyeCksICZyZWFkbGVuLCAoY2hhciAqKSZyeCk7CisJaWYgKHJjIHx8IHJlYWRsZW4gIT0gc2l6ZW9mKHJ4KSkgeworCQlKRkZTMl9XQVJOSU5HKCJqZmZzMl9mbGFzaF9yZWFkKCk9JWQsIHJlcT0lenUsIHJlYWQ9JXp1IGF0ICUjMDh4XG4iLAorCQkJICAgICAgcmMsIHNpemVvZihyeCksIHJlYWRsZW4sIHJlZl9vZmZzZXQoeGQtPm5vZGUpKTsKKwkJcmV0dXJuIHJjID8gcmMgOiAtRUlPOworCX0KKwljcmMgPSBjcmMzMigwLCAmcngsIHNpemVvZihyeCkgLSA0KTsKKwlpZiAoY3JjICE9IGplMzJfdG9fY3B1KHJ4Lm5vZGVfY3JjKSkgeworCQlpZiAoamUzMl90b19jcHUocngubm9kZV9jcmMpICE9IDB4ZmZmZmZmZmYpCisJCQlKRkZTMl9FUlJPUigibm9kZSBDUkMgZmFpbGVkIGF0ICUjMDh4LCByZWFkPSUjMDh4LCBjYWxjPSUjMDh4XG4iLAorCQkJCSAgICByZWZfb2Zmc2V0KHhkLT5ub2RlKSwgamUzMl90b19jcHUocnguaGRyX2NyYyksIGNyYyk7CisJCXJldHVybiBFSU87CisJfQorCXRvdGxlbiA9IFBBRChzaXplb2YocngpICsgcngubmFtZV9sZW4gKyAxICsgamUxNl90b19jcHUocngudmFsdWVfbGVuKSk7CisJaWYgKGplMTZfdG9fY3B1KHJ4Lm1hZ2ljKSAhPSBKRkZTMl9NQUdJQ19CSVRNQVNLCisJICAgIHx8IGplMTZfdG9fY3B1KHJ4Lm5vZGV0eXBlKSAhPSBKRkZTMl9OT0RFVFlQRV9YQVRUUgorCSAgICB8fCBqZTMyX3RvX2NwdShyeC50b3RsZW4pICE9IHRvdGxlbgorCSAgICB8fCBqZTMyX3RvX2NwdShyeC54aWQpICE9IHhkLT54aWQKKwkgICAgfHwgamUzMl90b19jcHUocngudmVyc2lvbikgIT0geGQtPnZlcnNpb24pIHsKKwkJSkZGUzJfRVJST1IoImluY29uc2lzdGVudCB4ZGF0dW0gYXQgJSMwOHgsIG1hZ2ljPSUjMDR4LyUjMDR4LCAiCisJCQkgICAgIm5vZGV0eXBlPSUjMDR4LyUjMDR4LCB0b3RsZW49JXUvJXUsIHhpZD0ldS8ldSwgdmVyc2lvbj0ldS8ldVxuIiwKKwkJCSAgICByZWZfb2Zmc2V0KHhkLT5ub2RlKSwgamUxNl90b19jcHUocngubWFnaWMpLCBKRkZTMl9NQUdJQ19CSVRNQVNLLAorCQkJICAgIGplMTZfdG9fY3B1KHJ4Lm5vZGV0eXBlKSwgSkZGUzJfTk9ERVRZUEVfWEFUVFIsCisJCQkgICAgamUzMl90b19jcHUocngudG90bGVuKSwgdG90bGVuLAorCQkJICAgIGplMzJfdG9fY3B1KHJ4LnhpZCksIHhkLT54aWQsCisJCQkgICAgamUzMl90b19jcHUocngudmVyc2lvbiksIHhkLT52ZXJzaW9uKTsKKwkJcmV0dXJuIEVJTzsKKwl9CisJeGQtPnhwcmVmaXggPSByeC54cHJlZml4OworCXhkLT5uYW1lX2xlbiA9IHJ4Lm5hbWVfbGVuOworCXhkLT52YWx1ZV9sZW4gPSBqZTE2X3RvX2NwdShyeC52YWx1ZV9sZW4pOworCXhkLT5kYXRhX2NyYyA9IGplMzJfdG9fY3B1KHJ4LmRhdGFfY3JjKTsKKworCS8qIFRoaXMgSkZGUzJfTk9ERVRZUEVfWEFUVFIgbm9kZSBpcyBjaGVja2VkICovCisJamViID0gJmMtPmJsb2Nrc1tyZWZfb2Zmc2V0KHhkLT5ub2RlKSAvIGMtPnNlY3Rvcl9zaXplXTsKKwl0b3RsZW4gPSBQQUQoamUzMl90b19jcHUocngudG90bGVuKSk7CisKKwlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJYy0+dW5jaGVja2VkX3NpemUgLT0gdG90bGVuOyBjLT51c2VkX3NpemUgKz0gdG90bGVuOworCWplYi0+dW5jaGVja2VkX3NpemUgLT0gdG90bGVuOyBqZWItPnVzZWRfc2l6ZSArPSB0b3RsZW47CisJeGQtPm5vZGUtPmZsYXNoX29mZnNldCA9IHJlZl9vZmZzZXQoeGQtPm5vZGUpIHwgUkVGX1BSSVNUSU5FOworCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCisJLyogdW5jaGVja2VkIHhkYXR1bSBpcyBjaGFpbmVkIHdpdGggYy0+eGF0dHJfdW5jaGVja2VkICovCisJbGlzdF9kZWxfaW5pdCgmeGQtPnhpbmRleCk7CisKKwlkYmdfeGF0dHIoInN1Y2Nlc3Mgb24gdmVyZnlpbmcgeGRhdHVtICh4aWQ9JXUsIHZlcnNpb249JXUpXG4iLAorCQkgIHhkLT54aWQsIHhkLT52ZXJzaW9uKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRvX2xvYWRfeGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJY2hhciAqZGF0YTsKKwlzaXplX3QgcmVhZGxlbjsKKwl1aW50MzJfdCBjcmMsIGxlbmd0aDsKKwlpbnQgaSwgcmV0LCByZXRyeSA9IDA7CisKKwlCVUdfT04oIXhkLT5ub2RlKTsKKwlCVUdfT04ocmVmX2ZsYWdzKHhkLT5ub2RlKSAhPSBSRUZfUFJJU1RJTkUpOworCUJVR19PTighbGlzdF9lbXB0eSgmeGQtPnhpbmRleCkpOworIHJldHJ5OgorCWxlbmd0aCA9IHhkLT5uYW1lX2xlbiArIDEgKyB4ZC0+dmFsdWVfbGVuOworCWRhdGEgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGpmZnMyX2ZsYXNoX3JlYWQoYywgcmVmX29mZnNldCh4ZC0+bm9kZSkrc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIpLAorCQkJICAgICAgIGxlbmd0aCwgJnJlYWRsZW4sIGRhdGEpOworCisJaWYgKHJldCB8fCBsZW5ndGghPXJlYWRsZW4pIHsKKwkJSkZGUzJfV0FSTklORygiamZmczJfZmxhc2hfcmVhZCgpIHJldHVybmVkICVkLCByZXF1ZXN0PSVkLCByZWFkbGVuPSV6dSwgYXQgJSMwOHhcbiIsCisJCQkgICAgICByZXQsIGxlbmd0aCwgcmVhZGxlbiwgcmVmX29mZnNldCh4ZC0+bm9kZSkpOworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIHJldCA/IHJldCA6IC1FSU87CisJfQorCisJZGF0YVt4ZC0+bmFtZV9sZW5dID0gJ1wwJzsKKwljcmMgPSBjcmMzMigwLCBkYXRhLCBsZW5ndGgpOworCWlmIChjcmMgIT0geGQtPmRhdGFfY3JjKSB7CisJCUpGRlMyX1dBUk5JTkcoIm5vZGUgQ1JDIGZhaWxlZCAoSkZGUzJfTk9ERVRZUEVfWFJFRikiCisJCQkgICAgICAiIGF0ICUjMDh4LCByZWFkOiAweCUwOHggY2FsY3VsYXRlZDogMHglMDh4XG4iLAorCQkJICAgICAgcmVmX29mZnNldCh4ZC0+bm9kZSksIHhkLT5kYXRhX2NyYywgY3JjKTsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiBFSU87CisJfQorCisJeGQtPmZsYWdzIHw9IEpGRlMyX1hGTEFHU19IT1Q7CisJeGQtPnhuYW1lID0gZGF0YTsKKwl4ZC0+eHZhbHVlID0gZGF0YSArIHhkLT5uYW1lX2xlbisxOworCisJYy0+eGRhdHVtX21lbV91c2FnZSArPSBsZW5ndGg7CisKKwl4ZC0+aGFzaGtleSA9IHhhdHRyX2RhdHVtX2hhc2hrZXkoeGQtPnhwcmVmaXgsIHhkLT54bmFtZSwgeGQtPnh2YWx1ZSwgeGQtPnZhbHVlX2xlbik7CisJaSA9IHhkLT5oYXNoa2V5ICUgWEFUVFJJTkRFWF9IQVNIU0laRTsKKwlsaXN0X2FkZCgmeGQtPnhpbmRleCwgJmMtPnhhdHRyaW5kZXhbaV0pOworCWlmICghcmV0cnkpIHsKKwkJcmV0cnkgPSAxOworCQlyZWNsYWltX3hhdHRyX2RhdHVtKGMpOworCQlpZiAoIXhkLT54bmFtZSkKKwkJCWdvdG8gcmV0cnk7CisJfQorCisJZGJnX3hhdHRyKCJzdWNjZXNzIG9uIGxvYWRpbmcgeGRhdHVtICh4aWQ9JXUsIHhwcmVmaXg9JXUsIHhuYW1lPSclcycpXG4iLAorCQkgIHhkLT54aWQsIHhkLT54cHJlZml4LCB4ZC0+eG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9hZF94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCkKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSk7CisJICogcmMgPCAwIDogcmVjb3ZlcmFibGUgZXJyb3IsIHRyeSBhZ2FpbgorCSAqIHJjID0gMCA6IHN1Y2Nlc3MKKwkgKiByYyA+IDAgOiBVbnJlY292ZXJhYmxlIGVycm9yLCB0aGlzIG5vZGUgc2hvdWxkIGJlIGRlbGV0ZWQuCisJICovCisJaW50IHJjID0gMDsKKwlCVUdfT04oeGQtPnhuYW1lKTsKKwlpZiAoIXhkLT5ub2RlKQorCQlyZXR1cm4gRUlPOworCWlmICh1bmxpa2VseShyZWZfZmxhZ3MoeGQtPm5vZGUpICE9IFJFRl9QUklTVElORSkpIHsKKwkJcmMgPSBkb192ZXJpZnlfeGF0dHJfZGF0dW0oYywgeGQpOworCQlpZiAocmMgPiAwKSB7CisJCQlsaXN0X2RlbF9pbml0KCZ4ZC0+eGluZGV4KTsKKwkJCWRlbGV0ZV94YXR0cl9kYXR1bV9ub2RlKGMsIHhkKTsKKwkJfQorCX0KKwlpZiAoIXJjKQorCQlyYyA9IGRvX2xvYWRfeGF0dHJfZGF0dW0oYywgeGQpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzYXZlX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKQoreworCS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSAqLworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsKKwlzdHJ1Y3QgamZmczJfcmF3X3hhdHRyIHJ4OworCXN0cnVjdCBrdmVjIHZlY3NbMl07CisJc2l6ZV90IGxlbmd0aDsKKwlpbnQgcmMsIHRvdGxlbjsKKwl1aW50MzJfdCBwaHlzX29mcyA9IHdyaXRlX29mcyhjKTsKKworCUJVR19PTigheGQtPnhuYW1lKTsKKworCXZlY3NbMF0uaW92X2Jhc2UgPSAmcng7CisJdmVjc1swXS5pb3ZfbGVuID0gUEFEKHNpemVvZihyeCkpOworCXZlY3NbMV0uaW92X2Jhc2UgPSB4ZC0+eG5hbWU7CisJdmVjc1sxXS5pb3ZfbGVuID0geGQtPm5hbWVfbGVuICsgMSArIHhkLT52YWx1ZV9sZW47CisJdG90bGVuID0gdmVjc1swXS5pb3ZfbGVuICsgdmVjc1sxXS5pb3ZfbGVuOworCisJLyogU2V0dXAgcmF3LXhhdHRyICovCisJcngubWFnaWMgPSBjcHVfdG9famUxNihKRkZTMl9NQUdJQ19CSVRNQVNLKTsKKwlyeC5ub2RldHlwZSA9IGNwdV90b19qZTE2KEpGRlMyX05PREVUWVBFX1hBVFRSKTsKKwlyeC50b3RsZW4gPSBjcHVfdG9famUzMihQQUQodG90bGVuKSk7CisJcnguaGRyX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsICZyeCwgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpIC0gNCkpOworCisJcngueGlkID0gY3B1X3RvX2plMzIoeGQtPnhpZCk7CisJcngudmVyc2lvbiA9IGNwdV90b19qZTMyKCsreGQtPnZlcnNpb24pOworCXJ4LnhwcmVmaXggPSB4ZC0+eHByZWZpeDsKKwlyeC5uYW1lX2xlbiA9IHhkLT5uYW1lX2xlbjsKKwlyeC52YWx1ZV9sZW4gPSBjcHVfdG9famUxNih4ZC0+dmFsdWVfbGVuKTsKKwlyeC5kYXRhX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHZlY3NbMV0uaW92X2Jhc2UsIHZlY3NbMV0uaW92X2xlbikpOworCXJ4Lm5vZGVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgJnJ4LCBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194YXR0cikgLSA0KSk7CisKKwlyYyA9IGpmZnMyX2ZsYXNoX3dyaXRldihjLCB2ZWNzLCAyLCBwaHlzX29mcywgJmxlbmd0aCwgMCk7CisJaWYgKHJjIHx8IHRvdGxlbiAhPSBsZW5ndGgpIHsKKwkJSkZGUzJfV0FSTklORygiamZmczJfZmxhc2hfd3JpdGV2KCk9JWQsIHJlcT0ldSwgd3JvdGU9JXp1LCBhdCAlIzA4eFxuIiwKKwkJCSAgICAgIHJjLCB0b3RsZW4sIGxlbmd0aCwgcGh5c19vZnMpOworCQlyYyA9IHJjID8gcmMgOiAtRUlPOworCQlpZiAobGVuZ3RoKQorCQkJamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHBoeXNfb2ZzIHwgUkVGX09CU09MRVRFLCBQQUQodG90bGVuKSwgTlVMTCk7CisKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIHN1Y2Nlc3MgKi8KKwlyYXcgPSBqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoYywgcGh5c19vZnMgfCBSRUZfUFJJU1RJTkUsIFBBRCh0b3RsZW4pLCBOVUxMKTsKKwkvKiBGSVhNRSAqLyByYXctPm5leHRfaW5faW5vID0gKHZvaWQgKil4ZDsKKworCWlmICh4ZC0+bm9kZSkKKwkJZGVsZXRlX3hhdHRyX2RhdHVtX25vZGUoYywgeGQpOworCXhkLT5ub2RlID0gcmF3OworCisJZGJnX3hhdHRyKCJzdWNjZXNzIG9uIHNhdmluZyB4ZGF0dW0gKHhpZD0ldSwgdmVyc2lvbj0ldSwgeHByZWZpeD0ldSwgeG5hbWU9JyVzJylcbiIsCisJCSAgeGQtPnhpZCwgeGQtPnZlcnNpb24sIHhkLT54cHJlZml4LCB4ZC0+eG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKmNyZWF0ZV94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkJCSAgICBpbnQgeHByZWZpeCwgY29uc3QgY2hhciAqeG5hbWUsCisJCQkJCQkgICAgY29uc3QgY2hhciAqeHZhbHVlLCBpbnQgeHNpemUpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZDsKKwl1aW50MzJfdCBoYXNoa2V5LCBuYW1lX2xlbjsKKwljaGFyICpkYXRhOworCWludCBpLCByYzsKKworCS8qIFNlYXJjaCB4YXR0cl9kYXR1bSBoYXMgc2FtZSB4bmFtZS94dmFsdWUgYnkgaW5kZXggKi8KKwloYXNoa2V5ID0geGF0dHJfZGF0dW1faGFzaGtleSh4cHJlZml4LCB4bmFtZSwgeHZhbHVlLCB4c2l6ZSk7CisJaSA9IGhhc2hrZXkgJSBYQVRUUklOREVYX0hBU0hTSVpFOworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGQsICZjLT54YXR0cmluZGV4W2ldLCB4aW5kZXgpIHsKKwkJaWYgKHhkLT5oYXNoa2V5PT1oYXNoa2V5CisJCSAgICAmJiB4ZC0+eHByZWZpeD09eHByZWZpeAorCQkgICAgJiYgeGQtPnZhbHVlX2xlbj09eHNpemUKKwkJICAgICYmICFzdHJjbXAoeGQtPnhuYW1lLCB4bmFtZSkKKwkJICAgICYmICFtZW1jbXAoeGQtPnh2YWx1ZSwgeHZhbHVlLCB4c2l6ZSkpIHsKKwkJCXhkLT5yZWZjbnQrKzsKKwkJCXJldHVybiB4ZDsKKwkJfQorCX0KKworCS8qIE5vdCBmb3VuZCwgQ3JlYXRlIE5FVyBYQVRUUi1DYWNoZSAqLworCW5hbWVfbGVuID0gc3RybGVuKHhuYW1lKTsKKworCXhkID0gamZmczJfYWxsb2NfeGF0dHJfZGF0dW0oKTsKKwlpZiAoIXhkKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRhdGEgPSBrbWFsbG9jKG5hbWVfbGVuICsgMSArIHhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJamZmczJfZnJlZV94YXR0cl9kYXR1bSh4ZCk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKwlzdHJjcHkoZGF0YSwgeG5hbWUpOworCW1lbWNweShkYXRhICsgbmFtZV9sZW4gKyAxLCB4dmFsdWUsIHhzaXplKTsKKworCXhkLT5yZWZjbnQgPSAxOworCXhkLT54aWQgPSArK2MtPmhpZ2hlc3RfeGlkOworCXhkLT5mbGFncyB8PSBKRkZTMl9YRkxBR1NfSE9UOworCXhkLT54cHJlZml4ID0geHByZWZpeDsKKworCXhkLT5oYXNoa2V5ID0gaGFzaGtleTsKKwl4ZC0+eG5hbWUgPSBkYXRhOworCXhkLT54dmFsdWUgPSBkYXRhICsgbmFtZV9sZW4gKyAxOworCXhkLT5uYW1lX2xlbiA9IG5hbWVfbGVuOworCXhkLT52YWx1ZV9sZW4gPSB4c2l6ZTsKKwl4ZC0+ZGF0YV9jcmMgPSBjcmMzMigwLCBkYXRhLCB4ZC0+bmFtZV9sZW4gKyAxICsgeGQtPnZhbHVlX2xlbik7CisKKwlyYyA9IHNhdmVfeGF0dHJfZGF0dW0oYywgeGQpOworCWlmIChyYykgeworCQlrZnJlZSh4ZC0+eG5hbWUpOworCQlqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHhkKTsKKwkJcmV0dXJuIEVSUl9QVFIocmMpOworCX0KKworCS8qIEluc2VydCBIYXNoIEluZGV4ICovCisJaSA9IGhhc2hrZXkgJSBYQVRUUklOREVYX0hBU0hTSVpFOworCWxpc3RfYWRkKCZ4ZC0+eGluZGV4LCAmYy0+eGF0dHJpbmRleFtpXSk7CisKKwljLT54ZGF0dW1fbWVtX3VzYWdlICs9ICh4ZC0+bmFtZV9sZW4gKyAxICsgeGQtPnZhbHVlX2xlbik7CisJcmVjbGFpbV94YXR0cl9kYXR1bShjKTsKKworCXJldHVybiB4ZDsKK30KKworLyogLS0tLS0tLS0geHJlZiByZWxhdGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHZlcmlmeV94YXR0cl9yZWYoYywgcmVmKQorICogICBpcyB1c2VkIHRvIGxvYWQgeHJlZiBpbmZvcm1hdGlvbiBmcm9tIG1lZGl1bS4gQmVjYXVzZSBzdW1tYXJ5IGRhdGEgZG9lcyBub3QKKyAqICAgY29udGFpbiB4aWQvaW5vLCBpdCdzIG5lY2Vzc2FyeSB0byB2ZXJpZnkgb25jZSB3aGlsZSBtb3VudGluZyBwcm9jZXNzLgorICogZGVsZXRlX3hhdHRyX3JlZl9ub2RlKGMsIHJlZikKKyAqICAgaXMgdXNlZCB0byBkZWxldGUgYSBqZmZzMiBub2RlIGlzIGRvbWluYXRlZCBieSB4cmVmLiBXaGVuIEVCUyBpcyBlbmFibGVkLAorICogICBpdCBvdmVyd3JpdGVzIHRoZSBvYnNvbGV0ZSBub2RlIGJ5IG15c2VsZi4gCisgKiBkZWxldGVfeGF0dHJfcmVmKGMsIHJlZikKKyAqICAgaXMgdXNlZCB0byBkZWxldGUgamZmczJfeGF0dHJfcmVmIG9iamVjdC4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudGVyIG9mIHhkYXR1bQorICogICBpcyByZWZlcmVkIGJ5IHRoaXMgeHJlZiBiZWNvbWUgMCwgZGVsZXRlX3hhdHRyX2RhdHVtKCkgaXMgY2FsbGVkIGxhdGVyLgorICogc2F2ZV94YXR0cl9yZWYoYywgcmVmKQorICogICBpcyB1c2VkIHRvIHdyaXRlIHhyZWYgdG8gbWVkaXVtLgorICogY3JlYXRlX3hhdHRyX3JlZihjLCBpYywgeGQpCisgKiAgIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3IHhyZWYgYW5kIHdyaXRlIHRvIG1lZGl1bS4KKyAqIGpmZnMyX3hhdHRyX2RlbGV0ZV9pbm9kZShjLCBpYykKKyAqICAgaXMgY2FsbGVkIHRvIHJlbW92ZSB4cmVmcyByZWxhdGVkIHRvIG9ic29sZXRlIGlub2RlIHdoZW4gaW5vZGUgaXMgdW5saW5rZWQuCisgKiBqZmZzMl94YXR0cl9mcmVlX2lub2RlKGMsIGljKQorICogICBpcyBjYWxsZWQgdG8gcmVsZWFzZSB4YXR0ciByZWxhdGVkIG9iamVjdHMgd2hlbiB1bm1vdW50aW5nLiAKKyAqIGNoZWNrX3hhdHRyX3JlZl9pbm9kZShjLCBpYykKKyAqICAgaXMgdXNlZCB0byBjb25maXJtIGlub2RlIGRvZXMgbm90IGhhdmUgZHVwbGljYXRlIHhhdHRyIG5hbWUvdmFsdWUgcGFpci4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IHZlcmlmeV94YXR0cl9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZikKK3sKKwlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViOworCXN0cnVjdCBqZmZzMl9yYXdfeHJlZiBycjsKKwlzaXplX3QgcmVhZGxlbjsKKwl1aW50MzJfdCBjcmMsIHRvdGxlbjsKKwlpbnQgcmM7CisKKwlCVUdfT04ocmVmX2ZsYWdzKHJlZi0+bm9kZSkgIT0gUkVGX1VOQ0hFQ0tFRCk7CisKKwlyYyA9IGpmZnMyX2ZsYXNoX3JlYWQoYywgcmVmX29mZnNldChyZWYtPm5vZGUpLCBzaXplb2YocnIpLCAmcmVhZGxlbiwgKGNoYXIgKikmcnIpOworCWlmIChyYyB8fCBzaXplb2YocnIpICE9IHJlYWRsZW4pIHsKKwkJSkZGUzJfV0FSTklORygiamZmczJfZmxhc2hfcmVhZCgpPSVkLCByZXE9JXp1LCByZWFkPSV6dSwgYXQgJSMwOHhcbiIsCisJCQkgICAgICByYywgc2l6ZW9mKHJyKSwgcmVhZGxlbiwgcmVmX29mZnNldChyZWYtPm5vZGUpKTsKKwkJcmV0dXJuIHJjID8gcmMgOiAtRUlPOworCX0KKwkvKiBvYnNvbGV0ZSBub2RlICovCisJY3JjID0gY3JjMzIoMCwgJnJyLCBzaXplb2YocnIpIC0gNCk7CisJaWYgKGNyYyAhPSBqZTMyX3RvX2NwdShyci5ub2RlX2NyYykpIHsKKwkJaWYgKGplMzJfdG9fY3B1KHJyLm5vZGVfY3JjKSAhPSAweGZmZmZmZmZmKQorCQkJSkZGUzJfRVJST1IoIm5vZGUgQ1JDIGZhaWxlZCBhdCAlIzA4eCwgcmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKKwkJCQkgICAgcmVmX29mZnNldChyZWYtPm5vZGUpLCBqZTMyX3RvX2NwdShyci5ub2RlX2NyYyksIGNyYyk7CisJCXJldHVybiBFSU87CisJfQorCWlmIChqZTE2X3RvX2NwdShyci5tYWdpYykgIT0gSkZGUzJfTUFHSUNfQklUTUFTSworCSAgICB8fCBqZTE2X3RvX2NwdShyci5ub2RldHlwZSkgIT0gSkZGUzJfTk9ERVRZUEVfWFJFRgorCSAgICB8fCBqZTMyX3RvX2NwdShyci50b3RsZW4pICE9IFBBRChzaXplb2YocnIpKSkgeworCQlKRkZTMl9FUlJPUigiaW5jb25zaXN0ZW50IHhyZWYgYXQgJSMwOHgsIG1hZ2ljPSUjMDR4LyUjMDR4LCAiCisJCQkgICAgIm5vZGV0eXBlPSUjMDR4LyUjMDR4LCB0b3RsZW49JXUvJXp1XG4iLAorCQkJICAgIHJlZl9vZmZzZXQocmVmLT5ub2RlKSwgamUxNl90b19jcHUocnIubWFnaWMpLCBKRkZTMl9NQUdJQ19CSVRNQVNLLAorCQkJICAgIGplMTZfdG9fY3B1KHJyLm5vZGV0eXBlKSwgSkZGUzJfTk9ERVRZUEVfWFJFRiwKKwkJCSAgICBqZTMyX3RvX2NwdShyci50b3RsZW4pLCBQQUQoc2l6ZW9mKHJyKSkpOworCQlyZXR1cm4gRUlPOworCX0KKwlyZWYtPmlubyA9IGplMzJfdG9fY3B1KHJyLmlubyk7CisJcmVmLT54aWQgPSBqZTMyX3RvX2NwdShyci54aWQpOworCisJLyogZml4dXAgc3VwZXJibG9jay9lcmFzZWJsb2NrIGluZm8gKi8KKwlqZWIgPSAmYy0+YmxvY2tzW3JlZl9vZmZzZXQocmVmLT5ub2RlKSAvIGMtPnNlY3Rvcl9zaXplXTsKKwl0b3RsZW4gPSBQQUQoc2l6ZW9mKHJyKSk7CisKKwlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJYy0+dW5jaGVja2VkX3NpemUgLT0gdG90bGVuOyBjLT51c2VkX3NpemUgKz0gdG90bGVuOworCWplYi0+dW5jaGVja2VkX3NpemUgLT0gdG90bGVuOyBqZWItPnVzZWRfc2l6ZSArPSB0b3RsZW47CisJcmVmLT5ub2RlLT5mbGFzaF9vZmZzZXQgPSByZWZfb2Zmc2V0KHJlZi0+bm9kZSkgfCBSRUZfUFJJU1RJTkU7CisJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisKKwlkYmdfeGF0dHIoInN1Y2Nlc3Mgb24gdmVyaWZ5aW5nIHhyZWYgKGlubz0ldSwgeGlkPSV1KSBhdCAlIzA4eFxuIiwKKwkJICByZWYtPmlubywgcmVmLT54aWQsIHJlZl9vZmZzZXQocmVmLT5ub2RlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV94YXR0cl9yZWZfbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmKQoreworCXN0cnVjdCBqZmZzMl9yYXdfeHJlZiBycjsKKwlzaXplX3QgbGVuZ3RoOworCWludCByYzsKKworCWlmIChqZmZzMl9zdW1fYWN0aXZlKCkpIHsKKwkJbWVtc2V0KCZyciwgMHhmZiwgc2l6ZW9mKHJyKSk7CisJCXJjID0gamZmczJfZmxhc2hfcmVhZChjLCByZWZfb2Zmc2V0KHJlZi0+bm9kZSksCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpLAorCQkJCSAgICAgICZsZW5ndGgsIChjaGFyICopJnJyKTsKKwkJaWYgKHJjIHx8IGxlbmd0aCAhPSBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpIHsKKwkJCUpGRlMyX0VSUk9SKCJqZmZzMl9mbGFzaF9yZWFkKCk9JWQsIHJlcT0lenUsIHJlYWQ9JXp1IGF0ICUjMDh4XG4iLAorCQkJCSAgICByYywgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpLAorCQkJCSAgICBsZW5ndGgsIHJlZl9vZmZzZXQocmVmLT5ub2RlKSk7CisJCX0KKwkJcmMgPSBqZmZzMl9mbGFzaF93cml0ZShjLCByZWZfb2Zmc2V0KHJlZi0+bm9kZSksIHNpemVvZihyciksCisJCQkJICAgICAgICZsZW5ndGgsIChjaGFyICopJnJyKTsKKwkJaWYgKHJjIHx8IGxlbmd0aCAhPSBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194cmVmKSkgeworCQkJSkZGUzJfRVJST1IoImpmZnMyX2ZsYXNoX3dyaXRlKCk9JWQsIHJlcT0lenUsIHdyb3RlPSV6dSBhdCAlIzA4eFxuIiwKKwkJCQkgICAgcmMsIHNpemVvZihyciksIGxlbmd0aCwgcmVmX29mZnNldChyZWYtPm5vZGUpKTsKKwkJfQorCX0KKwlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJcmVmLT5ub2RlLT5uZXh0X2luX2lubyA9IE5VTEw7CisJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJamZmczJfbWFya19ub2RlX29ic29sZXRlKGMsIHJlZi0+bm9kZSk7CisJcmVmLT5ub2RlID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlX3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmKQoreworCS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSAqLworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisKKwlCVUdfT04oIXJlZi0+bm9kZSk7CisJZGVsZXRlX3hhdHRyX3JlZl9ub2RlKGMsIHJlZik7CisKKwl4ZCA9IHJlZi0+eGQ7CisJeGQtPnJlZmNudC0tOworCWlmICgheGQtPnJlZmNudCkKKwkJZGVsZXRlX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwlqZmZzMl9mcmVlX3hhdHRyX3JlZihyZWYpOworfQorCitzdGF0aWMgaW50IHNhdmVfeGF0dHJfcmVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3OworCXN0cnVjdCBqZmZzMl9yYXdfeHJlZiBycjsKKwlzaXplX3QgbGVuZ3RoOworCXVpbnQzMl90IHBoeXNfb2ZzID0gd3JpdGVfb2ZzKGMpOworCWludCByZXQ7CisKKwlyci5tYWdpYyA9IGNwdV90b19qZTE2KEpGRlMyX01BR0lDX0JJVE1BU0spOworCXJyLm5vZGV0eXBlID0gY3B1X3RvX2plMTYoSkZGUzJfTk9ERVRZUEVfWFJFRik7CisJcnIudG90bGVuID0gY3B1X3RvX2plMzIoUEFEKHNpemVvZihycikpKTsKKwlyci5oZHJfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgJnJyLCBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkgLSA0KSk7CisKKwlyci5pbm8gPSBjcHVfdG9famUzMihyZWYtPmljLT5pbm8pOworCXJyLnhpZCA9IGNwdV90b19qZTMyKHJlZi0+eGQtPnhpZCk7CisJcnIubm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCAmcnIsIHNpemVvZihycikgLSA0KSk7CisKKwlyZXQgPSBqZmZzMl9mbGFzaF93cml0ZShjLCBwaHlzX29mcywgc2l6ZW9mKHJyKSwgJmxlbmd0aCwgKGNoYXIgKikmcnIpOworCWlmIChyZXQgfHwgc2l6ZW9mKHJyKSAhPSBsZW5ndGgpIHsKKwkJSkZGUzJfV0FSTklORygiamZmczJfZmxhc2hfd3JpdGUoKSByZXR1cm5lZCAlZCwgcmVxdWVzdD0lenUsIHJldGxlbj0lenUsIGF0ICUjMDh4XG4iLAorCQkJICAgICAgcmV0LCBzaXplb2YocnIpLCBsZW5ndGgsIHBoeXNfb2ZzKTsKKwkJcmV0ID0gcmV0ID8gcmV0IDogLUVJTzsKKwkJaWYgKGxlbmd0aCkKKwkJCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBwaHlzX29mcyB8IFJFRl9PQlNPTEVURSwgUEFEKHNpemVvZihycikpLCBOVUxMKTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCXJhdyA9IGpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBwaHlzX29mcyB8IFJFRl9QUklTVElORSwgUEFEKHNpemVvZihycikpLCBOVUxMKTsKKwkvKiBGSVhNRSAqLyByYXctPm5leHRfaW5faW5vID0gKHZvaWQgKilyZWY7CisJaWYgKHJlZi0+bm9kZSkKKwkJZGVsZXRlX3hhdHRyX3JlZl9ub2RlKGMsIHJlZik7CisJcmVmLT5ub2RlID0gcmF3OworCisJZGJnX3hhdHRyKCJzdWNjZXNzIG9uIHNhdmluZyB4cmVmIChpbm89JXUsIHhpZD0ldSlcbiIsIHJlZi0+aWMtPmlubywgcmVmLT54ZC0+eGlkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqY3JlYXRlX3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYywKKwkJCQkJCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmOworCWludCByZXQ7CisKKwlyZWYgPSBqZmZzMl9hbGxvY194YXR0cl9yZWYoKTsKKwlpZiAoIXJlZikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJcmVmLT5pYyA9IGljOworCXJlZi0+eGQgPSB4ZDsKKworCXJldCA9IHNhdmVfeGF0dHJfcmVmKGMsIHJlZik7CisJaWYgKHJldCkgeworCQlqZmZzMl9mcmVlX3hhdHRyX3JlZihyZWYpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCS8qIENoYWluIHRvIGlub2RlICovCisJcmVmLT5uZXh0ID0gaWMtPnhyZWY7CisJaWMtPnhyZWYgPSByZWY7CisKKwlyZXR1cm4gcmVmOyAvKiBzdWNjZXNzICovCit9CisKK3ZvaWQgamZmczJfeGF0dHJfZGVsZXRlX2lub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKQoreworCS8qIEl0J3MgY2FsbGVkIGZyb20gamZmczJfY2xlYXJfaW5vZGUoKSBvbiBpbm9kZSByZW1vdmluZy4KKwkgICBXaGVuIGFuIGlub2RlIHdpdGggWEFUVFIgaXMgcmVtb3ZlZCwgdGhvc2UgWEFUVFJzIG11c3QgYmUgcmVtb3ZlZC4gKi8KKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYsICpfcmVmOworCisJaWYgKCFpYyB8fCBpYy0+bmxpbmsgPiAwKQorCQlyZXR1cm47CisKKwlkb3duX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCWZvciAocmVmID0gaWMtPnhyZWY7IHJlZjsgcmVmID0gX3JlZikgeworCQlfcmVmID0gcmVmLT5uZXh0OworCQlkZWxldGVfeGF0dHJfcmVmKGMsIHJlZik7CisJfQorCWljLT54cmVmID0gTlVMTDsKKwl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsKK30KKwordm9pZCBqZmZzMl94YXR0cl9mcmVlX2lub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKQoreworCS8qIEl0J3MgY2FsbGVkIGZyb20gamZmczJfZnJlZV9pbm9fY2FjaGVzKCkgdW50aWwgdW5tb3VudGluZyBGUy4gKi8KKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkOworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZiwgKl9yZWY7CisKKwlkb3duX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCWZvciAocmVmID0gaWMtPnhyZWY7IHJlZjsgcmVmID0gX3JlZikgeworCQlfcmVmID0gcmVmLT5uZXh0OworCQl4ZCA9IHJlZi0+eGQ7CisJCXhkLT5yZWZjbnQtLTsKKwkJaWYgKCF4ZC0+cmVmY250KSB7CisJCQl1bmxvYWRfeGF0dHJfZGF0dW0oYywgeGQpOworCQkJamZmczJfZnJlZV94YXR0cl9kYXR1bSh4ZCk7CisJCX0KKwkJamZmczJfZnJlZV94YXR0cl9yZWYocmVmKTsKKwl9CisJaWMtPnhyZWYgPSBOVUxMOworCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOworfQorCitzdGF0aWMgaW50IGNoZWNrX3hhdHRyX3JlZl9pbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYykKK3sKKwkvKiBzdWNjZXNzIG9mIGNoZWNrX3hhdHRyX3JlZl9pbm9kZSgpIG1lYW5zIHRhaHQgaW5vZGUgKGljKSBkb3NlIG5vdCBoYXZlCisJICogZHVwbGljYXRlIG5hbWUvdmFsdWUgcGFpcnMuIElmIGR1cGxpY2F0ZSBuYW1lL3ZhbHVlIHBhaXIgd291bGQgYmUgZm91bmQsCisJICogb25lIHdpbGwgYmUgcmVtb3ZlZC4KKwkgKi8KKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYsICpjbXAsICoqcHJlZjsKKwlpbnQgcmMgPSAwOworCisJaWYgKGxpa2VseShpYy0+ZmxhZ3MgJiBJTk9fRkxBR1NfWEFUVFJfQ0hFQ0tFRCkpCisJCXJldHVybiAwOworCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisgcmV0cnk6CisJcmMgPSAwOworCWZvciAocmVmPWljLT54cmVmLCBwcmVmPSZpYy0+eHJlZjsgcmVmOyBwcmVmPSZyZWYtPm5leHQsIHJlZj1yZWYtPm5leHQpIHsKKwkJaWYgKCFyZWYtPnhkLT54bmFtZSkgeworCQkJcmMgPSBsb2FkX3hhdHRyX2RhdHVtKGMsIHJlZi0+eGQpOworCQkJaWYgKHVubGlrZWx5KHJjID4gMCkpIHsKKwkJCQkqcHJlZiA9IHJlZi0+bmV4dDsKKwkJCQlkZWxldGVfeGF0dHJfcmVmKGMsIHJlZik7CisJCQkJZ290byByZXRyeTsKKwkJCX0gZWxzZSBpZiAodW5saWtlbHkocmMgPCAwKSkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlmb3IgKGNtcD1yZWYtPm5leHQsIHByZWY9JnJlZi0+bmV4dDsgY21wOyBwcmVmPSZjbXAtPm5leHQsIGNtcD1jbXAtPm5leHQpIHsKKwkJCWlmICghY21wLT54ZC0+eG5hbWUpIHsKKwkJCQlyZWYtPnhkLT5mbGFncyB8PSBKRkZTMl9YRkxBR1NfQklORDsKKwkJCQlyYyA9IGxvYWRfeGF0dHJfZGF0dW0oYywgY21wLT54ZCk7CisJCQkJcmVmLT54ZC0+ZmxhZ3MgJj0gfkpGRlMyX1hGTEFHU19CSU5EOworCQkJCWlmICh1bmxpa2VseShyYyA+IDApKSB7CisJCQkJCSpwcmVmID0gY21wLT5uZXh0OworCQkJCQlkZWxldGVfeGF0dHJfcmVmKGMsIGNtcCk7CisJCQkJCWdvdG8gcmV0cnk7CisJCQkJfSBlbHNlIGlmICh1bmxpa2VseShyYyA8IDApKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWlmIChyZWYtPnhkLT54cHJlZml4ID09IGNtcC0+eGQtPnhwcmVmaXgKKwkJCSAgICAmJiAhc3RyY21wKHJlZi0+eGQtPnhuYW1lLCBjbXAtPnhkLT54bmFtZSkpIHsKKwkJCQkqcHJlZiA9IGNtcC0+bmV4dDsKKwkJCQlkZWxldGVfeGF0dHJfcmVmKGMsIGNtcCk7CisJCQkJZ290byByZXRyeTsKKwkJCX0KKwkJfQorCX0KKwlpYy0+ZmxhZ3MgfD0gSU5PX0ZMQUdTX1hBVFRSX0NIRUNLRUQ7Cisgb3V0OgorCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCisJcmV0dXJuIHJjOworfQorCisvKiAtLS0tLS0tLSB4YXR0ciBzdWJzeXN0ZW0gZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLQorICogamZmczJfaW5pdF94YXR0cl9zdWJzeXN0ZW0oYykKKyAqICAgaXMgdXNlZCB0byBpbml0aWFsaXplIHNlbWFwaG9yZSBhbmQgbGlzdF9oZWFkLCBhbmQgc29tZSB2YXJpYWJsZXMuCisgKiBqZmZzMl9maW5kX3hhdHRyX2RhdHVtKGMsIHhpZCkKKyAqICAgaXMgdXNlZCB0byBsb29rdXAgeGRhdHVtIHdoaWxlIHNjYW5uaW5nIHByb2Nlc3MuCisgKiBqZmZzMl9jbGVhcl94YXR0cl9zdWJzeXN0ZW0oYykKKyAqICAgaXMgdXNlZCB0byByZWxlYXNlIGFueSB4YXR0ciByZWxhdGVkIG9iamVjdHMuCisgKiBqZmZzMl9idWlsZF94YXR0cl9zdWJzeXN0ZW0oYykKKyAqICAgaXMgdXNlZCB0byBhc3NvY2lhdGUgeGRhdHVtIGFuZCB4cmVmIHdoaWxlIHN1cGVyIGJsb2NrIGJ1aWxkaW5nIHByb2Nlc3MuCisgKiBqZmZzMl9zZXR1cF94YXR0cl9kYXR1bShjLCB4aWQsIHZlcnNpb24pCisgKiAgIGlzIHVzZWQgdG8gaW5zZXJ0IHhkYXR1bSB3aGlsZSBzY2FubmluZyBwcm9jZXNzLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3ZvaWQgamZmczJfaW5pdF94YXR0cl9zdWJzeXN0ZW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaSA8IFhBVFRSSU5ERVhfSEFTSFNJWkU7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJmMtPnhhdHRyaW5kZXhbaV0pOworCUlOSVRfTElTVF9IRUFEKCZjLT54YXR0cl91bmNoZWNrZWQpOworCWMtPnhyZWZfdGVtcCA9IE5VTEw7CisKKwlpbml0X3J3c2VtKCZjLT54YXR0cl9zZW0pOworCWMtPnhkYXR1bV9tZW1fdXNhZ2UgPSAwOworCWMtPnhkYXR1bV9tZW1fdGhyZXNob2xkID0gMzIgKiAxMDI0OwkvKiBEZWZhdWx0IDMyS0IgKi8KK30KKworc3RhdGljIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqamZmczJfZmluZF94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgdWludDMyX3QgeGlkKQoreworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisJaW50IGkgPSB4aWQgJSBYQVRUUklOREVYX0hBU0hTSVpFOworCisJLyogSXQncyBvbmx5IHVzZWQgaW4gc2Nhbm5pbmcvYnVpbGRpbmcgcHJvY2Vzcy4gKi8KKwlCVUdfT04oIShjLT5mbGFncyAmIChKRkZTMl9TQl9GTEFHX1NDQU5OSU5HfEpGRlMyX1NCX0ZMQUdfQlVJTERJTkcpKSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHhkLCAmYy0+eGF0dHJpbmRleFtpXSwgeGluZGV4KSB7CisJCWlmICh4ZC0+eGlkPT14aWQpCisJCQlyZXR1cm4geGQ7CisJfQorCXJldHVybiBOVUxMOworfQorCit2b2lkIGpmZnMyX2NsZWFyX3hhdHRyX3N1YnN5c3RlbShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYykKK3sKKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkLCAqX3hkOworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZiwgKl9yZWY7CisJaW50IGk7CisKKwlmb3IgKHJlZj1jLT54cmVmX3RlbXA7IHJlZjsgcmVmID0gX3JlZikgeworCQlfcmVmID0gcmVmLT5uZXh0OworCQlqZmZzMl9mcmVlX3hhdHRyX3JlZihyZWYpOworCX0KKwljLT54cmVmX3RlbXAgPSBOVUxMOworCisJZm9yIChpPTA7IGkgPCBYQVRUUklOREVYX0hBU0hTSVpFOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHhkLCBfeGQsICZjLT54YXR0cmluZGV4W2ldLCB4aW5kZXgpIHsKKwkJCWxpc3RfZGVsKCZ4ZC0+eGluZGV4KTsKKwkJCWlmICh4ZC0+eG5hbWUpCisJCQkJa2ZyZWUoeGQtPnhuYW1lKTsKKwkJCWpmZnMyX2ZyZWVfeGF0dHJfZGF0dW0oeGQpOworCQl9CisJfQorfQorCit2b2lkIGpmZnMyX2J1aWxkX3hhdHRyX3N1YnN5c3RlbShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYykKK3sKKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYsICpfcmVmOworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQsICpfeGQ7CisJc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYzsKKwlpbnQgaSwgeGRhdHVtX2NvdW50ID0wLCB4ZGF0dW1fdW5jaGVja2VkX2NvdW50ID0gMCwgeHJlZl9jb3VudCA9IDA7CisKKwlCVUdfT04oIShjLT5mbGFncyAmIEpGRlMyX1NCX0ZMQUdfQlVJTERJTkcpKTsKKworCS8qIFBoYXNlLjEgKi8KKwlmb3IgKHJlZj1jLT54cmVmX3RlbXA7IHJlZjsgcmVmPV9yZWYpIHsKKwkJX3JlZiA9IHJlZi0+bmV4dDsKKwkJLyogY2hlY2tpbmcgUkVGX1VOQ0hFQ0tFRCBub2RlcyAqLworCQlpZiAocmVmX2ZsYWdzKHJlZi0+bm9kZSkgIT0gUkVGX1BSSVNUSU5FKSB7CisJCQlpZiAodmVyaWZ5X3hhdHRyX3JlZihjLCByZWYpKSB7CisJCQkJZGVsZXRlX3hhdHRyX3JlZl9ub2RlKGMsIHJlZik7CisJCQkJamZmczJfZnJlZV94YXR0cl9yZWYocmVmKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQkvKiBBdCB0aGlzIHBvaW50LCByZWYtPnhpZCBhbmQgcmVmLT5pbm8gY29udGFpbiBYSUQgYW5kIGlub2RlIG51bWJlci4KKwkJICAgcmVmLT54ZCBhbmQgcmVmLT5pYyBhcmUgbm90IHZhbGlkIHlldC4gKi8KKwkJeGQgPSBqZmZzMl9maW5kX3hhdHRyX2RhdHVtKGMsIHJlZi0+eGlkKTsKKwkJaWMgPSBqZmZzMl9nZXRfaW5vX2NhY2hlKGMsIHJlZi0+aW5vKTsKKwkJaWYgKCF4ZCB8fCAhaWMpIHsKKwkJCWlmIChyZWZfZmxhZ3MocmVmLT5ub2RlKSAhPSBSRUZfVU5DSEVDS0VEKQorCQkJCUpGRlMyX1dBUk5JTkcoInhyZWYoaW5vPSV1LCB4aWQ9JXUpIGlzIG9ycGhhbi4gXG4iLAorCQkJCQkgICAgICByZWYtPmlubywgcmVmLT54aWQpOworCQkJZGVsZXRlX3hhdHRyX3JlZl9ub2RlKGMsIHJlZik7CisJCQlqZmZzMl9mcmVlX3hhdHRyX3JlZihyZWYpOworCQkJY29udGludWU7CisJCX0KKwkJcmVmLT54ZCA9IHhkOworCQlyZWYtPmljID0gaWM7CisJCXhkLT5yZWZjbnQrKzsKKwkJcmVmLT5uZXh0ID0gaWMtPnhyZWY7CisJCWljLT54cmVmID0gcmVmOworCQl4cmVmX2NvdW50Kys7CisJfQorCWMtPnhyZWZfdGVtcCA9IE5VTEw7CisJLyogQWZ0ZXIgdGhpcywgcmVmLT54aWQvaW5vIGFyZSBORVZFUiB1c2VkLiAqLworCisJLyogUGhhc2UuMiAqLworCWZvciAoaT0wOyBpIDwgWEFUVFJJTkRFWF9IQVNIU0laRTsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4ZCwgX3hkLCAmYy0+eGF0dHJpbmRleFtpXSwgeGluZGV4KSB7CisJCQlsaXN0X2RlbF9pbml0KCZ4ZC0+eGluZGV4KTsKKwkJCWlmICgheGQtPnJlZmNudCkgeworCQkJCWlmIChyZWZfZmxhZ3MoeGQtPm5vZGUpICE9IFJFRl9VTkNIRUNLRUQpCisJCQkJCUpGRlMyX1dBUk5JTkcoIm9ycGhhbiB4ZGF0dW0oeGlkPSV1LCB2ZXJzaW9uPSV1KSBhdCAlIzA4eFxuIiwKKwkJCQkJCSAgICAgIHhkLT54aWQsIHhkLT52ZXJzaW9uLCByZWZfb2Zmc2V0KHhkLT5ub2RlKSk7CisJCQkJZGVsZXRlX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChyZWZfZmxhZ3MoeGQtPm5vZGUpICE9IFJFRl9QUklTVElORSkgeworCQkJCWRiZ194YXR0cigidW5jaGVja2VkIHhkYXR1bSh4aWQ9JXUpIGF0ICUjMDh4XG4iLAorCQkJCQkgIHhkLT54aWQsIHJlZl9vZmZzZXQoeGQtPm5vZGUpKTsKKwkJCQlsaXN0X2FkZCgmeGQtPnhpbmRleCwgJmMtPnhhdHRyX3VuY2hlY2tlZCk7CisJCQkJeGRhdHVtX3VuY2hlY2tlZF9jb3VudCsrOworCQkJfQorCQkJeGRhdHVtX2NvdW50Kys7CisJCX0KKwl9CisJLyogYnVpbGQgY29tcGxldGUgKi8KKwlKRkZTMl9OT1RJQ0UoImNvbXBsZXRlIGJ1aWxkaW5nIHhhdHRyIHN1YnN5c3RlbSwgJXUgb2YgeGRhdHVtICgldSB1bmNoZWNrZWQpIGFuZCAiCisJCSAgICAgIiV1IG9mIHhyZWYgZm91bmQuXG4iLCB4ZGF0dW1fY291bnQsIHhkYXR1bV91bmNoZWNrZWRfY291bnQsIHhyZWZfY291bnQpOworfQorCitzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKmpmZnMyX3NldHVwX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJCQkJICB1aW50MzJfdCB4aWQsIHVpbnQzMl90IHZlcnNpb24pCit7CisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCwgKl94ZDsKKworCV94ZCA9IGpmZnMyX2ZpbmRfeGF0dHJfZGF0dW0oYywgeGlkKTsKKwlpZiAoX3hkKSB7CisJCWRiZ194YXR0cigiZHVwbGljYXRlIHhkYXR1bSAoeGlkPSV1LCB2ZXJzaW9uPSV1LyV1KSBhdCAlIzA4eFxuIiwKKwkJCSAgeGlkLCB2ZXJzaW9uLCBfeGQtPnZlcnNpb24sIHJlZl9vZmZzZXQoX3hkLT5ub2RlKSk7CisJCWlmICh2ZXJzaW9uIDwgX3hkLT52ZXJzaW9uKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVFWElTVCk7CisJfQorCXhkID0gamZmczJfYWxsb2NfeGF0dHJfZGF0dW0oKTsKKwlpZiAoIXhkKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl4ZC0+eGlkID0geGlkOworCXhkLT52ZXJzaW9uID0gdmVyc2lvbjsKKwlpZiAoeGQtPnhpZCA+IGMtPmhpZ2hlc3RfeGlkKQorCQljLT5oaWdoZXN0X3hpZCA9IHhkLT54aWQ7CisJbGlzdF9hZGRfdGFpbCgmeGQtPnhpbmRleCwgJmMtPnhhdHRyaW5kZXhbeGlkICUgWEFUVFJJTkRFWF9IQVNIU0laRV0pOworCisJaWYgKF94ZCkgeworCQlsaXN0X2RlbF9pbml0KCZfeGQtPnhpbmRleCk7CisJCWRlbGV0ZV94YXR0cl9kYXR1bV9ub2RlKGMsIF94ZCk7CisJCWpmZnMyX2ZyZWVfeGF0dHJfZGF0dW0oX3hkKTsKKwl9CisJcmV0dXJuIHhkOworfQorCisvKiAtLS0tLS0tLSB4YXR0ciBzdWJzeXN0ZW0gZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLQorICogeHByZWZpeF90b19oYW5kbGVyKHhwcmVmaXgpCisgKiAgIGlzIHVzZWQgdG8gdHJhbnNsYXRlIHhwcmVmaXggaW50byB4YXR0cl9oYW5kbGVyLgorICogamZmczJfbGlzdHhhdHRyKGRlbnRyeSwgYnVmZmVyLCBzaXplKQorICogICBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBsaXN0eGF0dHIgaGFuZGxlciBvbiBqZmZzMi4KKyAqIGRvX2pmZnMyX2dldHhhdHRyKGlub2RlLCB4cHJlZml4LCB4bmFtZSwgYnVmZmVyLCBzaXplKQorICogICBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBnZXR4YXR0ciBoYW5kbGVyIG9uIGpmZnMyLgorICogZG9famZmczJfc2V0eGF0dHIoaW5vZGUsIHhwcmVmaXgsIHhuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKQorICogICBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBzZXR4YXR0ciBoYW5kbGVyIG9uIGpmZnMyLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0cnVjdCB4YXR0cl9oYW5kbGVyICpqZmZzMl94YXR0cl9oYW5kbGVyc1tdID0geworCSZqZmZzMl91c2VyX3hhdHRyX2hhbmRsZXIsCisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZCisJJmpmZnMyX3NlY3VyaXR5X3hhdHRyX2hhbmRsZXIsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMCisJJmpmZnMyX2FjbF9hY2Nlc3NfeGF0dHJfaGFuZGxlciwKKwkmamZmczJfYWNsX2RlZmF1bHRfeGF0dHJfaGFuZGxlciwKKyNlbmRpZgorCSZqZmZzMl90cnVzdGVkX3hhdHRyX2hhbmRsZXIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCB4YXR0cl9oYW5kbGVyICp4cHJlZml4X3RvX2hhbmRsZXIoaW50IHhwcmVmaXgpIHsKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqcmV0OworCisJc3dpdGNoICh4cHJlZml4KSB7CisJY2FzZSBKRkZTMl9YUFJFRklYX1VTRVI6CisJCXJldCA9ICZqZmZzMl91c2VyX3hhdHRyX2hhbmRsZXI7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19KRkZTMl9GU19TRUNVUklUWQorCWNhc2UgSkZGUzJfWFBSRUZJWF9TRUNVUklUWToKKwkJcmV0ID0gJmpmZnMyX3NlY3VyaXR5X3hhdHRyX2hhbmRsZXI7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTAorCWNhc2UgSkZGUzJfWFBSRUZJWF9BQ0xfQUNDRVNTOgorCQlyZXQgPSAmamZmczJfYWNsX2FjY2Vzc194YXR0cl9oYW5kbGVyOworCQlicmVhazsKKwljYXNlIEpGRlMyX1hQUkVGSVhfQUNMX0RFRkFVTFQ6CisJCXJldCA9ICZqZmZzMl9hY2xfZGVmYXVsdF94YXR0cl9oYW5kbGVyOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgSkZGUzJfWFBSRUZJWF9UUlVTVEVEOgorCQlyZXQgPSAmamZmczJfdHJ1c3RlZF94YXR0cl9oYW5kbGVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSBOVUxMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3NpemVfdCBqZmZzMl9saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYgPSBKRkZTMl9JTk9ERV9JTkZPKGlub2RlKTsKKwlzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyA9IEpGRlMyX1NCX0lORk8oaW5vZGUtPmlfc2IpOworCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMgPSBmLT5pbm9jYWNoZTsKKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYsICoqcHJlZjsKKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkOworCXN0cnVjdCB4YXR0cl9oYW5kbGVyICp4aGFuZGxlOworCXNzaXplX3QgbGVuLCByYzsKKwlpbnQgcmV0cnkgPSAwOworCisJcmMgPSBjaGVja194YXR0cl9yZWZfaW5vZGUoYywgaWMpOworCWlmICh1bmxpa2VseShyYykpCisJCXJldHVybiByYzsKKworCWRvd25fcmVhZCgmYy0+eGF0dHJfc2VtKTsKKyByZXRyeToKKwlsZW4gPSAwOworCWZvciAocmVmPWljLT54cmVmLCBwcmVmPSZpYy0+eHJlZjsgcmVmOyBwcmVmPSZyZWYtPm5leHQsIHJlZj1yZWYtPm5leHQpIHsKKwkJQlVHX09OKHJlZi0+aWMgIT0gaWMpOworCQl4ZCA9IHJlZi0+eGQ7CisJCWlmICgheGQtPnhuYW1lKSB7CisJCQkvKiB4ZGF0dW0gaXMgdW5jaGFjaGVkICovCisJCQlpZiAoIXJldHJ5KSB7CisJCQkJcmV0cnkgPSAxOworCQkJCXVwX3JlYWQoJmMtPnhhdHRyX3NlbSk7CisJCQkJZG93bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfSBlbHNlIHsKKwkJCQlyYyA9IGxvYWRfeGF0dHJfZGF0dW0oYywgeGQpOworCQkJCWlmICh1bmxpa2VseShyYyA+IDApKSB7CisJCQkJCSpwcmVmID0gcmVmLT5uZXh0OworCQkJCQlkZWxldGVfeGF0dHJfcmVmKGMsIHJlZik7CisJCQkJCWdvdG8gcmV0cnk7CisJCQkJfSBlbHNlIGlmICh1bmxpa2VseShyYyA8IDApKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQl4aGFuZGxlID0geHByZWZpeF90b19oYW5kbGVyKHhkLT54cHJlZml4KTsKKwkJaWYgKCF4aGFuZGxlKQorCQkJY29udGludWU7CisJCWlmIChidWZmZXIpIHsKKwkJCXJjID0geGhhbmRsZS0+bGlzdChpbm9kZSwgYnVmZmVyK2xlbiwgc2l6ZS1sZW4sIHhkLT54bmFtZSwgeGQtPm5hbWVfbGVuKTsKKwkJfSBlbHNlIHsKKwkJCXJjID0geGhhbmRsZS0+bGlzdChpbm9kZSwgTlVMTCwgMCwgeGQtPnhuYW1lLCB4ZC0+bmFtZV9sZW4pOworCQl9CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKwkJbGVuICs9IHJjOworCX0KKwlyYyA9IGxlbjsKKyBvdXQ6CisJaWYgKCFyZXRyeSkgeworCQl1cF9yZWFkKCZjLT54YXR0cl9zZW0pOworCX0gZWxzZSB7CisJCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK2ludCBkb19qZmZzMl9nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgeHByZWZpeCwgY29uc3QgY2hhciAqeG5hbWUsCisJCSAgICAgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYgPSBKRkZTMl9JTk9ERV9JTkZPKGlub2RlKTsKKwlzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyA9IEpGRlMyX1NCX0lORk8oaW5vZGUtPmlfc2IpOworCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMgPSBmLT5pbm9jYWNoZTsKKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkOworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZiwgKipwcmVmOworCWludCByYywgcmV0cnkgPSAwOworCisJcmMgPSBjaGVja194YXR0cl9yZWZfaW5vZGUoYywgaWMpOworCWlmICh1bmxpa2VseShyYykpCisJCXJldHVybiByYzsKKworCWRvd25fcmVhZCgmYy0+eGF0dHJfc2VtKTsKKyByZXRyeToKKwlmb3IgKHJlZj1pYy0+eHJlZiwgcHJlZj0maWMtPnhyZWY7IHJlZjsgcHJlZj0mcmVmLT5uZXh0LCByZWY9cmVmLT5uZXh0KSB7CisJCUJVR19PTihyZWYtPmljIT1pYyk7CisKKwkJeGQgPSByZWYtPnhkOworCQlpZiAoeGQtPnhwcmVmaXggIT0geHByZWZpeCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXhkLT54bmFtZSkgeworCQkJLyogeGRhdHVtIGlzIHVuY2hhY2hlZCAqLworCQkJaWYgKCFyZXRyeSkgeworCQkJCXJldHJ5ID0gMTsKKwkJCQl1cF9yZWFkKCZjLT54YXR0cl9zZW0pOworCQkJCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJCQkJZ290byByZXRyeTsKKwkJCX0gZWxzZSB7CisJCQkJcmMgPSBsb2FkX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwkJCQlpZiAodW5saWtlbHkocmMgPiAwKSkgeworCQkJCQkqcHJlZiA9IHJlZi0+bmV4dDsKKwkJCQkJZGVsZXRlX3hhdHRyX3JlZihjLCByZWYpOworCQkJCQlnb3RvIHJldHJ5OworCQkJCX0gZWxzZSBpZiAodW5saWtlbHkocmMgPCAwKSkgeworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKCFzdHJjbXAoeG5hbWUsIHhkLT54bmFtZSkpIHsKKwkJCXJjID0geGQtPnZhbHVlX2xlbjsKKwkJCWlmIChidWZmZXIpIHsKKwkJCQlpZiAoc2l6ZSA8IHJjKSB7CisJCQkJCXJjID0gLUVSQU5HRTsKKwkJCQl9IGVsc2UgeworCQkJCQltZW1jcHkoYnVmZmVyLCB4ZC0+eHZhbHVlLCByYyk7CisJCQkJfQorCQkJfQorCQkJZ290byBvdXQ7CisJCX0KKwl9CisJcmMgPSAtRU5PREFUQTsKKyBvdXQ6CisJaWYgKCFyZXRyeSkgeworCQl1cF9yZWFkKCZjLT54YXR0cl9zZW0pOworCX0gZWxzZSB7CisJCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK2ludCBkb19qZmZzMl9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgeHByZWZpeCwgY29uc3QgY2hhciAqeG5hbWUsCisJCSAgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOworCXN0cnVjdCBqZmZzMl9zYl9pbmZvICpjID0gSkZGUzJfU0JfSU5GTyhpbm9kZS0+aV9zYik7CisJc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYyA9IGYtPmlub2NhY2hlOworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmLCAqbmV3cmVmLCAqKnByZWY7CisJdWludDMyX3QgbGVuZ3RoLCByZXF1ZXN0OworCWludCByYzsKKworCXJjID0gY2hlY2tfeGF0dHJfcmVmX2lub2RlKGMsIGljKTsKKwlpZiAodW5saWtlbHkocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyZXF1ZXN0ID0gUEFEKHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hhdHRyKSArIHN0cmxlbih4bmFtZSkgKyAxICsgc2l6ZSk7CisJcmMgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHJlcXVlc3QsICZsZW5ndGgsCisJCQkJIEFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9YQVRUUl9TSVpFKTsKKwlpZiAocmMpIHsKKwkJSkZGUzJfV0FSTklORygiamZmczJfcmVzZXJ2ZV9zcGFjZSgpPSVkLCByZXF1ZXN0PSV1XG4iLCByYywgcmVxdWVzdCk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBGaW5kIGV4aXN0aW5nIHhhdHRyICovCisJZG93bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKyByZXRyeToKKwlmb3IgKHJlZj1pYy0+eHJlZiwgcHJlZj0maWMtPnhyZWY7IHJlZjsgcHJlZj0mcmVmLT5uZXh0LCByZWY9cmVmLT5uZXh0KSB7CisJCXhkID0gcmVmLT54ZDsKKwkJaWYgKHhkLT54cHJlZml4ICE9IHhwcmVmaXgpCisJCQljb250aW51ZTsKKwkJaWYgKCF4ZC0+eG5hbWUpIHsKKwkJCXJjID0gbG9hZF94YXR0cl9kYXR1bShjLCB4ZCk7CisJCQlpZiAodW5saWtlbHkocmMgPiAwKSkgeworCQkJCSpwcmVmID0gcmVmLT5uZXh0OworCQkJCWRlbGV0ZV94YXR0cl9yZWYoYywgcmVmKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfSBlbHNlIGlmICh1bmxpa2VseShyYyA8IDApKQorCQkJCWdvdG8gb3V0OworCQl9CisJCWlmICghc3RyY21wKHhkLT54bmFtZSwgeG5hbWUpKSB7CisJCQlpZiAoZmxhZ3MgJiBYQVRUUl9DUkVBVEUpIHsKKwkJCQlyYyA9IC1FRVhJU1Q7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlpZiAoIWJ1ZmZlcikgeworCQkJCSpwcmVmID0gcmVmLT5uZXh0OworCQkJCWRlbGV0ZV94YXR0cl9yZWYoYywgcmVmKTsKKwkJCQlyYyA9IDA7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCS8qIG5vdCBmb3VuZCAqLworCWlmIChmbGFncyAmIFhBVFRSX1JFUExBQ0UpIHsKKwkJcmMgPSAtRU5PREFUQTsKKwkJZ290byBvdXQ7CisJfQorCWlmICghYnVmZmVyKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorIGZvdW5kOgorCXhkID0gY3JlYXRlX3hhdHRyX2RhdHVtKGMsIHhwcmVmaXgsIHhuYW1lLCBidWZmZXIsIHNpemUpOworCWlmIChJU19FUlIoeGQpKSB7CisJCXJjID0gUFRSX0VSUih4ZCk7CisJCWdvdG8gb3V0OworCX0KKwl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwlqZmZzMl9jb21wbGV0ZV9yZXNlcnZhdGlvbihjKTsKKworCS8qIGNyZWF0ZSB4YXR0cl9yZWYgKi8KKwlyZXF1ZXN0ID0gUEFEKHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hyZWYpKTsKKwlyYyA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgcmVxdWVzdCwgJmxlbmd0aCwKKwkJCQkgQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX1hSRUZfU0laRSk7CisJaWYgKHJjKSB7CisJCUpGRlMyX1dBUk5JTkcoImpmZnMyX3Jlc2VydmVfc3BhY2UoKT0lZCwgcmVxdWVzdD0ldVxuIiwgcmMsIHJlcXVlc3QpOworCQlkb3duX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCQl4ZC0+cmVmY250LS07CisJCWlmICgheGQtPnJlZmNudCkKKwkJCWRlbGV0ZV94YXR0cl9kYXR1bShjLCB4ZCk7CisJCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCQlyZXR1cm4gcmM7CisJfQorCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJaWYgKHJlZikKKwkJKnByZWYgPSByZWYtPm5leHQ7CisJbmV3cmVmID0gY3JlYXRlX3hhdHRyX3JlZihjLCBpYywgeGQpOworCWlmIChJU19FUlIobmV3cmVmKSkgeworCQlpZiAocmVmKSB7CisJCQlyZWYtPm5leHQgPSBpYy0+eHJlZjsKKwkJCWljLT54cmVmID0gcmVmOworCQl9CisJCXJjID0gUFRSX0VSUihuZXdyZWYpOworCQl4ZC0+cmVmY250LS07CisJCWlmICgheGQtPnJlZmNudCkKKwkJCWRlbGV0ZV94YXR0cl9kYXR1bShjLCB4ZCk7CisJfSBlbHNlIGlmIChyZWYpIHsKKwkJZGVsZXRlX3hhdHRyX3JlZihjLCByZWYpOworCX0KKyBvdXQ6CisJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJamZmczJfY29tcGxldGVfcmVzZXJ2YXRpb24oYyk7CisJcmV0dXJuIHJjOworfQorCisvKiAtLS0tLS0tLSBnYXJiYWdlIGNvbGxlY3RvciBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLQorICogamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX2RhdHVtKGMsIHhkKQorICogICBpcyB1c2VkIHRvIG1vdmUgeGRhdHVtIGludG8gbmV3IG5vZGUuCisgKiBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJfcmVmKGMsIHJlZikKKyAqICAgaXMgdXNlZCB0byBtb3ZlIHhyZWYgaW50byBuZXcgbm9kZS4KKyAqIGpmZnMyX3ZlcmlmeV94YXR0cihjKQorICogICBpcyB1c2VkIHRvIGNhbGwgZG9fdmVyaWZ5X3hhdHRyX2RhdHVtKCkgYmVmb3JlIGdhcmJhZ2UgY29sbGVjdGluZy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitpbnQgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKQoreworCXVpbnQzMl90IHRvdGxlbiwgbGVuZ3RoLCBvbGRfb2ZzOworCWludCByYyA9IC1FSU5WQUw7CisKKwlkb3duX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCUJVR19PTigheGQtPm5vZGUpOworCisJb2xkX29mcyA9IHJlZl9vZmZzZXQoeGQtPm5vZGUpOworCXRvdGxlbiA9IHJlZl90b3RsZW4oYywgYy0+Z2NibG9jaywgeGQtPm5vZGUpOworCWlmICh0b3RsZW4gPCBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194YXR0cikpCisJCWdvdG8gb3V0OworCisJaWYgKCF4ZC0+eG5hbWUpIHsKKwkJcmMgPSBsb2FkX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwkJaWYgKHVubGlrZWx5KHJjID4gMCkpIHsKKwkJCWRlbGV0ZV94YXR0cl9kYXR1bV9ub2RlKGMsIHhkKTsKKwkJCXJjID0gMDsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKHVubGlrZWx5KHJjIDwgMCkpCisJCQlnb3RvIG91dDsKKwl9CisJcmMgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHRvdGxlbiwgJmxlbmd0aCwgSkZGUzJfU1VNTUFSWV9YQVRUUl9TSVpFKTsKKwlpZiAocmMgfHwgbGVuZ3RoIDwgdG90bGVuKSB7CisJCUpGRlMyX1dBUk5JTkcoImpmZnMyX3Jlc2VydmVfc3BhY2UoKT0lZCwgcmVxdWVzdD0ldVxuIiwgcmMsIHRvdGxlbik7CisJCXJjID0gcmMgPyByYyA6IC1FQkFERkQ7CisJCWdvdG8gb3V0OworCX0KKwlyYyA9IHNhdmVfeGF0dHJfZGF0dW0oYywgeGQpOworCWlmICghcmMpCisJCWRiZ194YXR0cigieGRhdHVtICh4aWQ9JXUsIHZlcnNpb249JXUpIEdDJ2VkIGZyb20gJSMwOHggdG8gJTA4eFxuIiwKKwkJCSAgeGQtPnhpZCwgeGQtPnZlcnNpb24sIG9sZF9vZnMsIHJlZl9vZmZzZXQoeGQtPm5vZGUpKTsKKyBvdXQ6CisJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJcmV0dXJuIHJjOworfQorCisKK2ludCBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJfcmVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYpCit7CisJdWludDMyX3QgdG90bGVuLCBsZW5ndGgsIG9sZF9vZnM7CisJaW50IHJjID0gLUVJTlZBTDsKKworCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJQlVHX09OKCFyZWYtPm5vZGUpOworCisJb2xkX29mcyA9IHJlZl9vZmZzZXQocmVmLT5ub2RlKTsKKwl0b3RsZW4gPSByZWZfdG90bGVuKGMsIGMtPmdjYmxvY2ssIHJlZi0+bm9kZSk7CisJaWYgKHRvdGxlbiAhPSBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194cmVmKSkKKwkJZ290byBvdXQ7CisKKwlyYyA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgdG90bGVuLCAmbGVuZ3RoLCBKRkZTMl9TVU1NQVJZX1hSRUZfU0laRSk7CisJaWYgKHJjIHx8IGxlbmd0aCA8IHRvdGxlbikgeworCQlKRkZTMl9XQVJOSU5HKCIlczogamZmczJfcmVzZXJ2ZV9zcGFjZSgpID0gJWQsIHJlcXVlc3QgPSAldVxuIiwKKwkJCSAgICAgIF9fRlVOQ1RJT05fXywgcmMsIHRvdGxlbik7CisJCXJjID0gcmMgPyByYyA6IC1FQkFERkQ7CisJCWdvdG8gb3V0OworCX0KKwlyYyA9IHNhdmVfeGF0dHJfcmVmKGMsIHJlZik7CisJaWYgKCFyYykKKwkJZGJnX3hhdHRyKCJ4cmVmIChpbm89JXUsIHhpZD0ldSkgR0MnZWQgZnJvbSAlIzA4eCB0byAlMDh4XG4iLAorCQkJICByZWYtPmljLT5pbm8sIHJlZi0+eGQtPnhpZCwgb2xkX29mcywgcmVmX29mZnNldChyZWYtPm5vZGUpKTsKKyBvdXQ6CisJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJcmV0dXJuIHJjOworfQorCitpbnQgamZmczJfdmVyaWZ5X3hhdHRyKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQoreworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQsICpfeGQ7CisJaW50IHJjOworCisJZG93bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeGQsIF94ZCwgJmMtPnhhdHRyX3VuY2hlY2tlZCwgeGluZGV4KSB7CisJCXJjID0gZG9fdmVyaWZ5X3hhdHRyX2RhdHVtKGMsIHhkKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWxpc3RfZGVsX2luaXQoJnhkLT54aW5kZXgpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAocmMgPiAwKSB7CisJCQlsaXN0X2RlbF9pbml0KCZ4ZC0+eGluZGV4KTsKKwkJCWRlbGV0ZV94YXR0cl9kYXR1bV9ub2RlKGMsIHhkKTsKKwkJfQorCX0KKwl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKworCXJldHVybiBsaXN0X2VtcHR5KCZjLT54YXR0cl91bmNoZWNrZWQpID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9mcy9qZmZzMi94YXR0ci5oIGIvZnMvamZmczIveGF0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzE5OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvamZmczIveGF0dHIuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2ICBORUMgQ29ycG9yYXRpb24KKyAqCisgKiBDcmVhdGVkIGJ5IEthaUdhaSBLb2hlaSA8a2FpZ2FpQGFrLmpwLm5lYy5jb20+CisgKgorICogRm9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmaWxlICdMSUNFTkNFJyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAqCisgKi8KKyNpZm5kZWYgX0pGRlMyX0ZTX1hBVFRSX0hfCisjZGVmaW5lIF9KRkZTMl9GU19YQVRUUl9IXworCisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNkZWZpbmUgSkZGUzJfWEZMQUdTX0hPVAkoMHgwMSkJLyogVGhpcyBkYXR1bSBpcyBIT1QgKi8KKyNkZWZpbmUgSkZGUzJfWEZMQUdTX0JJTkQJKDB4MDIpCS8qIFRoaXMgZGF0dW0gaXMgbm90IHJlY2xhaW1lZCAqLworCitzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0KK3sKKwl2b2lkICphbHdheXNfbnVsbDsKKwlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpub2RlOworCXVpbnQ4X3QgY2xhc3M7CisJdWludDhfdCBmbGFnczsKKwl1aW50MTZfdCB4cHJlZml4OwkJCS8qIHNlZSBKRkZTMl9YQVRUUl9QUkVGSVhfKiAqLworCisJc3RydWN0IGxpc3RfaGVhZCB4aW5kZXg7CS8qIGNoYWluZWQgZnJvbSBjLT54YXR0cmluZGV4W25dICovCisJdWludDMyX3QgcmVmY250OwkJLyogIyBvZiB4YXR0cl9yZWYgcmVmZXJzIHRoaXMgKi8KKwl1aW50MzJfdCB4aWQ7CisJdWludDMyX3QgdmVyc2lvbjsKKworCXVpbnQzMl90IGRhdGFfY3JjOworCXVpbnQzMl90IGhhc2hrZXk7CisJY2hhciAqeG5hbWU7CQkvKiBYQVRUUiBuYW1lIHdpdGhvdXQgcHJlZml4ICovCisJdWludDMyX3QgbmFtZV9sZW47CS8qIGxlbmd0aCBvZiB4bmFtZSAqLworCWNoYXIgKnh2YWx1ZTsJCS8qIFhBVFRSIHZhbHVlICovCisJdWludDMyX3QgdmFsdWVfbGVuOwkvKiBsZW5ndGggb2YgeHZhbHVlICovCit9OworCitzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGU7CitzdHJ1Y3QgamZmczJfeGF0dHJfcmVmCit7CisJdm9pZCAqYWx3YXlzX251bGw7CisJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqbm9kZTsKKwl1aW50OF90IGNsYXNzOworCXVpbnQ4X3QgZmxhZ3M7CQkvKiBDdXJyZW50bHkgdW51c2VkICovCisJdTE2IHVudXNlZDsKKworCXVuaW9uIHsKKwkJc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYzsJLyogcmVmZXJlbmNlIHRvIGpmZnMyX2lub2RlX2NhY2hlICovCisJCXVpbnQzMl90IGlubzsJCQkvKiBvbmx5IHVzZWQgaW4gc2Nhbm5pbmcvYnVpbGRpbmcgICovCisJfTsKKwl1bmlvbiB7CisJCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CS8qIHJlZmVyZW5jZSB0byBqZmZzMl94YXR0cl9kYXR1bSAqLworCQl1aW50MzJfdCB4aWQ7CQkJLyogb25seSB1c2VkIGluIHNjY2FubmluZy9idWlsZGluZyAqLworCX07CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqbmV4dDsJCS8qIGNoYWluZWQgZnJvbSBpYy0+eHJlZl9saXN0ICovCit9OworCisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCisKK2V4dGVybiB2b2lkIGpmZnMyX2luaXRfeGF0dHJfc3Vic3lzdGVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKK2V4dGVybiB2b2lkIGpmZnMyX2J1aWxkX3hhdHRyX3N1YnN5c3RlbShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CitleHRlcm4gdm9pZCBqZmZzMl9jbGVhcl94YXR0cl9zdWJzeXN0ZW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOworCitleHRlcm4gc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICpqZmZzMl9zZXR1cF94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgeGlkLCB1aW50MzJfdCB2ZXJzaW9uKTsKKworZXh0ZXJuIHZvaWQgamZmczJfeGF0dHJfZGVsZXRlX2lub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKTsKK2V4dGVybiB2b2lkIGpmZnMyX3hhdHRyX2ZyZWVfaW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMpOworCitleHRlcm4gaW50IGpmZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCk7CitleHRlcm4gaW50IGpmZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0cl9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZik7CitleHRlcm4gaW50IGpmZnMyX3ZlcmlmeV94YXR0cihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CisKK2V4dGVybiBpbnQgZG9famZmczJfZ2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHhwcmVmaXgsIGNvbnN0IGNoYXIgKnhuYW1lLAorCQkJICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQgZG9famZmczJfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHhwcmVmaXgsIGNvbnN0IGNoYXIgKnhuYW1lLAorCQkJICAgICBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgKmpmZnMyX3hhdHRyX2hhbmRsZXJzW107CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfdXNlcl94YXR0cl9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGpmZnMyX3RydXN0ZWRfeGF0dHJfaGFuZGxlcjsKKworZXh0ZXJuIHNzaXplX3QgamZmczJfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBzaXplX3QpOworI2RlZmluZSBqZmZzMl9nZXR4YXR0cgkJZ2VuZXJpY19nZXR4YXR0cgorI2RlZmluZSBqZmZzMl9zZXR4YXR0cgkJZ2VuZXJpY19zZXR4YXR0cgorI2RlZmluZSBqZmZzMl9yZW1vdmV4YXR0cglnZW5lcmljX3JlbW92ZXhhdHRyCisKKyNlbHNlCisKKyNkZWZpbmUgamZmczJfaW5pdF94YXR0cl9zdWJzeXN0ZW0oYykKKyNkZWZpbmUgamZmczJfYnVpbGRfeGF0dHJfc3Vic3lzdGVtKGMpCisjZGVmaW5lIGpmZnMyX2NsZWFyX3hhdHRyX3N1YnN5c3RlbShjKQorCisjZGVmaW5lIGpmZnMyX3hhdHRyX2RlbGV0ZV9pbm9kZShjLCBpYykKKyNkZWZpbmUgamZmczJfeGF0dHJfZnJlZV9pbm9kZShjLCBpYykKKyNkZWZpbmUgamZmczJfdmVyaWZ5X3hhdHRyKGMpCQkJKDEpCisKKyNkZWZpbmUgamZmczJfeGF0dHJfaGFuZGxlcnMJTlVMTAorI2RlZmluZSBqZmZzMl9saXN0eGF0dHIJCU5VTEwKKyNkZWZpbmUgamZmczJfZ2V0eGF0dHIJCU5VTEwKKyNkZWZpbmUgamZmczJfc2V0eGF0dHIJCU5VTEwKKyNkZWZpbmUgamZmczJfcmVtb3ZleGF0dHIJTlVMTAorCisjZW5kaWYgLyogQ09ORklHX0pGRlMyX0ZTX1hBVFRSICovCisKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFkKK2V4dGVybiBpbnQgamZmczJfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcik7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfc2VjdXJpdHlfeGF0dHJfaGFuZGxlcjsKKyNlbHNlCisjZGVmaW5lIGpmZnMyX2luaXRfc2VjdXJpdHkoaW5vZGUsZGlyKQkoMCkKKyNlbmRpZiAvKiBDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFkgKi8KKworI2VuZGlmIC8qIF9KRkZTMl9GU19YQVRUUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZnMvamZmczIveGF0dHJfdHJ1c3RlZC5jIGIvZnMvamZmczIveGF0dHJfdHJ1c3RlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDQ2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qZmZzMi94YXR0cl90cnVzdGVkLmMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2ICBORUMgQ29ycG9yYXRpb24KKyAqCisgKiBDcmVhdGVkIGJ5IEthaUdhaSBLb2hlaSA8a2FpZ2FpQGFrLmpwLm5lYy5jb20+CisgKgorICogRm9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmaWxlICdMSUNFTkNFJyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSAibm9kZWxpc3QuaCIKKworc3RhdGljIGludCBqZmZzMl90cnVzdGVkX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCWlmICghc3RyY21wKG5hbWUsICIiKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGRvX2pmZnMyX2dldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJFRklYX1RSVVNURUQsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfdHJ1c3RlZF9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkJICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCWlmICghc3RyY21wKG5hbWUsICIiKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGRvX2pmZnMyX3NldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJFRklYX1RSVVNURUQsIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOworfQorCitzdGF0aWMgc2l6ZV90IGpmZnMyX3RydXN0ZWRfbGlzdHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQoreworCXNpemVfdCByZXRsZW4gPSBYQVRUUl9UUlVTVEVEX1BSRUZJWF9MRU4gKyBuYW1lX2xlbiArIDE7CisKKwlpZiAobGlzdCAmJiByZXRsZW48PWxpc3Rfc2l6ZSkgeworCQlzdHJjcHkobGlzdCwgWEFUVFJfVFJVU1RFRF9QUkVGSVgpOworCQlzdHJjcHkobGlzdCArIFhBVFRSX1RSVVNURURfUFJFRklYX0xFTiwgbmFtZSk7CisJfQorCisJcmV0dXJuIHJldGxlbjsKK30KKworc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfdHJ1c3RlZF94YXR0cl9oYW5kbGVyID0geworCS5wcmVmaXggPSBYQVRUUl9UUlVTVEVEX1BSRUZJWCwKKwkubGlzdCA9IGpmZnMyX3RydXN0ZWRfbGlzdHhhdHRyLAorCS5zZXQgPSBqZmZzMl90cnVzdGVkX3NldHhhdHRyLAorCS5nZXQgPSBqZmZzMl90cnVzdGVkX2dldHhhdHRyCit9OwpkaWZmIC0tZ2l0IGEvZnMvamZmczIveGF0dHJfdXNlci5jIGIvZnMvamZmczIveGF0dHJfdXNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOGU5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qZmZzMi94YXR0cl91c2VyLmMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2ICBORUMgQ29ycG9yYXRpb24KKyAqCisgKiBDcmVhdGVkIGJ5IEthaUdhaSBLb2hlaSA8a2FpZ2FpQGFrLmpwLm5lYy5jb20+CisgKgorICogRm9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmaWxlICdMSUNFTkNFJyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSAibm9kZWxpc3QuaCIKKworc3RhdGljIGludCBqZmZzMl91c2VyX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAiIikpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBkb19qZmZzMl9nZXR4YXR0cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9VU0VSLCBuYW1lLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGpmZnMyX3VzZXJfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJaWYgKCFzdHJjbXAobmFtZSwgIiIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZG9famZmczJfc2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfVVNFUiwgbmFtZSwgYnVmZmVyLCBzaXplLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzaXplX3QgamZmczJfdXNlcl9saXN0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCit7CisJc2l6ZV90IHJldGxlbiA9IFhBVFRSX1VTRVJfUFJFRklYX0xFTiArIG5hbWVfbGVuICsgMTsKKworCWlmIChsaXN0ICYmIHJldGxlbiA8PSBsaXN0X3NpemUpIHsKKwkJc3RyY3B5KGxpc3QsIFhBVFRSX1VTRVJfUFJFRklYKTsKKwkJc3RyY3B5KGxpc3QgKyBYQVRUUl9VU0VSX1BSRUZJWF9MRU4sIG5hbWUpOworCX0KKworCXJldHVybiByZXRsZW47Cit9CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIGpmZnMyX3VzZXJfeGF0dHJfaGFuZGxlciA9IHsKKwkucHJlZml4ID0gWEFUVFJfVVNFUl9QUkVGSVgsCisJLmxpc3QgPSBqZmZzMl91c2VyX2xpc3R4YXR0ciwKKwkuc2V0ID0gamZmczJfdXNlcl9zZXR4YXR0ciwKKwkuZ2V0ID0gamZmczJfdXNlcl9nZXR4YXR0cgorfTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IGQ2ZTJlZTIuLjE4NGZlNGFjIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTExMjcsNyArMTEyNyw3IEBACiAJaWYgKGxpa2VseShyZXR2YWwgPT0gMCkpIHsKIAkJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQgJiYgbmQgJiYgbmQtPmRlbnRyeSAmJgogCQkJCW5kLT5kZW50cnktPmRfaW5vZGUpKQotCQlhdWRpdF9pbm9kZShuYW1lLCBuZC0+ZGVudHJ5LT5kX2lub2RlLCBmbGFncyk7CisJCWF1ZGl0X2lub2RlKG5hbWUsIG5kLT5kZW50cnktPmRfaW5vZGUpOwogCX0KIG91dF9mYWlsOgogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggMzE3YjdjNy4uNGYxNzhhYyAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtNjMzLDcgKzYzMyw3IEBACiAJZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKLQlhdWRpdF9pbm9kZShOVUxMLCBpbm9kZSwgMCk7CisJYXVkaXRfaW5vZGUoTlVMTCwgaW5vZGUpOwogCiAJZXJyID0gLUVST0ZTOwogCWlmIChJU19SRE9OTFkoaW5vZGUpKQpAQCAtNzg2LDcgKzc4Niw3IEBACiAJaWYgKGZpbGUpIHsKIAkJc3RydWN0IGRlbnRyeSAqIGRlbnRyeTsKIAkJZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7Ci0JCWF1ZGl0X2lub2RlKE5VTEwsIGRlbnRyeS0+ZF9pbm9kZSwgMCk7CisJCWF1ZGl0X2lub2RlKE5VTEwsIGRlbnRyeS0+ZF9pbm9kZSk7CiAJCWVycm9yID0gY2hvd25fY29tbW9uKGRlbnRyeSwgdXNlciwgZ3JvdXApOwogCQlmcHV0KGZpbGUpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNmNjNzdkYy4uNmFmZmY3MiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTEwMTksOCArMTAxOSw4IEBACiAJaWYgKGN1cnJlbnQgIT0gdGFzaykKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWlmIChjb3VudCA+IFBBR0VfU0laRSkKLQkJY291bnQgPSBQQUdFX1NJWkU7CisJaWYgKGNvdW50ID49IFBBR0VfU0laRSkKKwkJY291bnQgPSBQQUdFX1NJWkUgLSAxOwogCiAJaWYgKCpwcG9zICE9IDApIHsKIAkJLyogTm8gcGFydGlhbCB3cml0ZXMuICovCkBAIC0xMDMzLDYgKzEwMzMsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcihwYWdlLCBidWYsIGNvdW50KSkKIAkJZ290byBvdXRfZnJlZV9wYWdlOwogCisJcGFnZVtjb3VudF0gPSAnXDAnOwogCWxvZ2ludWlkID0gc2ltcGxlX3N0cnRvdWwocGFnZSwgJnRtcCwgMTApOwogCWlmICh0bXAgPT0gcGFnZSkgewogCQlsZW5ndGggPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZnMveGF0dHIuYyBiL2ZzL3hhdHRyLmMKaW5kZXggZTQxNjE5MC4uYzMyZjE1YiAxMDA2NDQKLS0tIGEvZnMveGF0dHIuYworKysgYi9mcy94YXR0ci5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAlpZiAoIWYpCiAJCXJldHVybiBlcnJvcjsKIAlkZW50cnkgPSBmLT5mX2RlbnRyeTsKLQlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnktPmRfaW5vZGUsIDApOworCWF1ZGl0X2lub2RlKE5VTEwsIGRlbnRyeS0+ZF9pbm9kZSk7CiAJZXJyb3IgPSBzZXR4YXR0cihkZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CiAJZnB1dChmKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC00NjksNyArNDY5LDcgQEAKIAlpZiAoIWYpCiAJCXJldHVybiBlcnJvcjsKIAlkZW50cnkgPSBmLT5mX2RlbnRyeTsKLQlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnktPmRfaW5vZGUsIDApOworCWF1ZGl0X2lub2RlKE5VTEwsIGRlbnRyeS0+ZF9pbm9kZSk7CiAJZXJyb3IgPSByZW1vdmV4YXR0cihkZW50cnksIG5hbWUpOwogCWZwdXQoZik7CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKaW5kZXggMmU2ZDU0NS4uM2M2YTYyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCkBAIC00OSw3ICs0OSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCmluZGV4IGJhZGYwMjcuLmVmN2Q4M2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9fQUNQSV9QUk9DRVNTT1JfSAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vYWNwaS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oCmluZGV4IDNmODg3MTUuLjRiNmVmN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQUxQSEFfQklUT1BTX0gKICNkZWZpbmUgX0FMUEhBX0JJVE9QU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZS5oCmluZGV4IGU2ZDRkMTYuLmYxOTllNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGUuaApAQCAtNCw3ICs0LDYgQEAKICNpZm5kZWYgX19BUkNIX0FMUEhBX0NBQ0hFX0gKICNkZWZpbmUgX19BUkNIX0FMUEhBX0NBQ0hFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBCeXRlcyBwZXIgTDEgKGRhdGEpIGNhY2hlIGxpbmUuICovCiAjaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfR0VORVJJQykgfHwgZGVmaW5lZChDT05GSUdfQUxQSEFfRVY2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGVmbHVzaC5oCmluZGV4IDNmYzZlZjcuLjgwNTY0MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZWZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BTFBIQV9DQUNIRUZMVVNIX0gKICNkZWZpbmUgX0FMUEhBX0NBQ0hFRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogLyogQ2FjaGVzIGFyZW4ndCBicmFpbi1kZWFkIG9uIHRoZSBBbHBoYS4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfY2lhLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX2NpYS5oCmluZGV4IDNhNzBkNjguLjllMDUxNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfY2lhLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9jaWEuaApAQCAtNCw3ICs0LDYgQEAKIC8qIERlZmluZSB0byBleHBlcmltZW50IHdpdGggZml0dGluZyBldmVyeXRoaW5nIGludG8gb25lIDUxMk1CIEhBRSB3aW5kb3cuICAqLwogI2RlZmluZSBDSUFfT05FX0hBRV9XSU5ET1cgMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90Mi5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90Mi5oCmluZGV4IDVjMWM0MDMuLmRiYTcwYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfdDIuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3QyLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQUxQSEFfVDJfX0hfXwogI2RlZmluZSBfX0FMUEhBX1QyX19IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9kbWEtbWFwcGluZy5oCmluZGV4IDYyZDBkNjYuLmI5ZmY0ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvZG1hLW1hcHBpbmcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX0RNQV9NQVBQSU5HX0gKICNkZWZpbmUgX0FMUEhBX0RNQV9NQVBQSU5HX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BDSQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9kbWEuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2RtYS5oCmluZGV4IDY4M2FmYWEuLjg3Y2ZkYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2RtYS5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaWZuZGVmIF9BU01fRE1BX0gKICNkZWZpbmUgX0FTTV9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9mbG9wcHkuaAppbmRleCAyODlhMDBkLi5lMTc3ZDQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9mbG9wcHkuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9mbG9wcHkuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfX0FTTV9BTFBIQV9GTE9QUFlfSAogI2RlZmluZSBfX0FTTV9BTFBIQV9GTE9QUFlfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgZmRfaW5iKHBvcnQpCQkJaW5iX3AocG9ydCkKICNkZWZpbmUgZmRfb3V0Yih2YWx1ZSxwb3J0KQkJb3V0Yl9wKHZhbHVlLHBvcnQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9oYXJkaXJxLmgKaW5kZXggN2JiNmEzNi4uZDk1M2UyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2hhcmRpcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX0hBUkRJUlFfSAogI2RlZmluZSBfQUxQSEFfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9od19pcnEuaAppbmRleCBhMzEwYjllLi5jYTlkNDNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9od19pcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX0hXX0lSUV9ICiAjZGVmaW5lIF9BTFBIQV9IV19JUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHt9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2lkZS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvaWRlLmgKaW5kZXggNjEyNmFmZS4uMmE1Y2MwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaWRlLmgKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0RFRkFVTFRTCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2lvLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9pby5oCmluZGV4IDNlYmJlZWUuLmY1YWU5OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaW8uaApAQCAtMyw3ICszLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2lycS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvaXJxLmgKaW5kZXggNTY2ZGI3Mi4uZjZkZTAzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaXJxLmgKQEAgLTgsNyArOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmICAgZGVmaW5lZChDT05GSUdfQUxQSEFfR0VORVJJQykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tYWxwaGEva21hcF90eXBlcy5oCmluZGV4IDNkMTBjZDMuLjNlNjczNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2ttYXBfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9rbWFwX3R5cGVzLmgKQEAgLTMsNyArMyw2IEBACiAKIC8qIER1bW15IGhlYWRlciBqdXN0IHRvIGRlZmluZSBrbV90eXBlLiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQogIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9tYWNodmVjLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9tYWNodmVjLmgKaW5kZXggZWNlMTY2YS4uYWNlZDIyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvbWFjaHZlYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL21hY2h2ZWMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BTFBIQV9NQUNIVkVDX0gKICNkZWZpbmUgX19BTFBIQV9NQUNIVkVDX0ggMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9tbXVfY29udGV4dC5oCmluZGV4IDBjMDE3ZmMuLmZlMjQ5ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvbW11X2NvbnRleHQuaApAQCAtNyw3ICs3LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiwgTGludXMgVG9ydmFsZHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL21tem9uZS5oCmluZGV4IDE5MmQ4MGMuLjY0ZDBhYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL21tem9uZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL21tem9uZS5oCkBAIC01LDcgKzUsNiBAQAogI2lmbmRlZiBfQVNNX01NWk9ORV9IXwogI2RlZmluZSBfQVNNX01NWk9ORV9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiBzdHJ1Y3QgYm9vdG1lbV9kYXRhX3Q7IC8qIHN0dXBpZCBmb3J3YXJkIGRlY2wuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wYWdlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9wYWdlLmgKaW5kZXggNjFiY2Y3MC4uOGM3Y2Q1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX1BBR0VfSAogI2RlZmluZSBfQUxQSEFfUEFHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFsLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvcGFyYW0uaAppbmRleCAzZWQwYjNiLi4yMTRlNzk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3BhcmFtLmgKQEAgLTUsNyArNSw2IEBACiAgICBoYXJkd2FyZSBpZ25vcmVzIHJlcHJvZ3JhbW1pbmcuICBXZSBhbHNvIG5lZWQgdXNlcmxhbmQgYnV5LWluIHRvIHRoZSAKICAgIGNoYW5nZSBpbiBIWiwgc2luY2UgdGhpcyBpcyB2aXNpYmxlIGluIHRoZSB3YWl0NCByZXNvdXJjZXMgZXRjLiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIEhaCiAjIGlmbmRlZiBDT05GSUdfQUxQSEFfUkFXSElERQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvcGdhbGxvYy5oCmluZGV4IDMwODQ3NTYuLjQ3MTg2NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wZ2FsbG9jLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BTFBIQV9QR0FMTE9DX0gKICNkZWZpbmUgX0FMUEhBX1BHQUxMT0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oCmluZGV4IGE5ODVjZDIuLjkzZWFhNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wZ3RhYmxlLmgKQEAgLTEwLDcgKzEwLDYgQEAKICAqIFRoaXMgaG9wZWZ1bGx5IHdvcmtzIHdpdGggYW55IHN0YW5kYXJkIEFscGhhIHBhZ2Utc2l6ZSwgYXMgZGVmaW5lZAogICogaW4gPGFzbS9wYWdlLmg+IChjdXJyZW50bHkgODE5MikuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NlcmlhbC5oCmluZGV4IDdlNGIyOTguLjlkMjYzZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3NlcmlhbC5oCkBAIC0yLDcgKzIsNiBAQAogICogaW5jbHVkZS9hc20tYWxwaGEvc2VyaWFsLmgKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zbXAuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NtcC5oCmluZGV4IGUxNDMyMTAuLmExYTFlY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3NtcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TTVBfSAogI2RlZmluZSBfX0FTTV9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zcGlubG9jay5oCmluZGV4IDgxOTdjNjkuLjBjMjk0YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc3BpbmxvY2suaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX1NQSU5MT0NLX0gKICNkZWZpbmUgX0FMUEhBX1NQSU5MT0NLX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zeXN0ZW0uaAppbmRleCBmM2I3YjFhLi4wM2U5YzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BTFBIQV9TWVNURU1fSAogI2RlZmluZSBfX0FMUEhBX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFsLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vYmFycmllci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFscGhhL3RsYmZsdXNoLmgKaW5kZXggOWQ0ODRjMS4uMWNhM2VkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS90bGJmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQUxQSEFfVExCRkxVU0hfSAogI2RlZmluZSBfQUxQSEFfVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaAppbmRleCBlZjI1YjY1Li5iYzZlNmE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaApAQCAtMzgzLDYgKzM4Myw4IEBACiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJCTQ0NQogI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2gJCTQ0NgogCisjaWZkZWYgX19LRVJORUxfXworCiAjZGVmaW5lIE5SX1NZU0NBTExTCQkJNDQ3CiAKICNpZiBkZWZpbmVkKF9fR05VQ19fKQpAQCAtNTY1LDkgKzU2Nyw4IEBACiAJX3N5c2NhbGxfcmV0dXJuKHR5cGUpOwkJCQkJCVwKIH0KIAotI2VuZGlmIC8qIF9fTElCUkFSWV9fICYmIF9fR05VQ19fICovCisjZW5kaWYgLyogX19HTlVDX18gKi8KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CkBAIC01NzgsNyArNTc5LDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTY2MSw0ICs2NjEsNSBAQAogCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSAgYXNtKCIud2Vha1x0IiAjeCAiXG4iICN4ICIgPSBzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FMUEhBX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXBtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXBtLmgKaW5kZXggM2E1MGViNy4uZDA5MTEzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FwbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcG0uaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBBUk1fQVNNX1NBMTEwMF9BUE1fSAogI2RlZmluZSBBUk1fQVNNX1NBMTEwMF9BUE1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYXBtX2Jpb3MuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKaW5kZXggZDgyMDlmOC4uMjRiNTFjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAogI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweGYwMDAwMDAwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvYWNvcm5mYi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2Fjb3JuZmIuaAppbmRleCAzODY3MjMxLi5hZWE2MzMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvYWNvcm5mYi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9hY29ybmZiLmgKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjZGVmaW5lIGFjb3JuZmJfdmFsaWRfcGl4cmF0ZSh2YXIpICh2YXItPnBpeGNsb2NrID49IDM5MzI1ICYmIHZhci0+cGl4Y2xvY2sgPD0gNDAxMTkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2hhcmR3YXJlLmgKaW5kZXggMTM4Njg3MS4uMGZkYmU3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9oYXJkd2FyZS5oCkBAIC0yMiw3ICsyMiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIENMUFM3MTExX1ZJUlRfQkFTRQkweGZmMDAwMDAwCiAjZGVmaW5lIENMUFM3MTExX0JBU0UJCUNMUFM3MTExX1ZJUlRfQkFTRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9tZW1vcnkuaAppbmRleCA2MWQ4NzE3Li5jNmU4ZGNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9tZW1vcnkuaApAQCAtMjAsNyArMjAsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC91bmNvbXByZXNzLmgKaW5kZXggMDcxNTdiNy4uMDNkMjMzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3VuY29tcHJlc3MuaApAQCAtMTcsNyArMTcsNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NscHM3MTExLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2hhcmR3YXJlLmgKaW5kZXggZWM1MWZlOS4uZGFhZDhlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaGFyZHdhcmUuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKICNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KIAogI2lmZGVmIENPTkZJR19BUkNIX0ZPT1RCUklER0UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L21lbW9yeS5oCmluZGV4IDk5MTgxZmYuLmNiZDdhZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaApAQCAtMTksNyArMTksNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfRk9PVEJSSURHRV9BRERJTikKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvdm1hbGxvYy5oCmluZGV4IGQxY2E5NTUuLjAyNTk4MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvdm1hbGxvYy5oCkBAIC02LDcgKzYsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfRk9PVEJSSURHRQogI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoUEFHRV9PRkZTRVQgKyAweDMwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9zbXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivc21wLmgKaW5kZXggZGE2OTgxZS4uYWIyYzc5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3NtcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBBU01BUk1fQVJDSF9TTVBfSAogI2RlZmluZSBBU01BUk1fQVJDSF9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaAppbmRleCBiYzYyZjRiLi5lNDNlYmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L21lbW9yeS5oCkBAIC01LDcgKzUsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdGltZXguaAppbmRleCA0NzJiYWRiLi4xNGNhOGQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdGltZXguaApAQCAtMyw3ICszLDYgQEAKICAqCiAgKiBJT1AzeHggYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSVE4MDMyMSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9JUTMxMjQ0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC91bmNvbXByZXNzLmgKaW5kZXggYzk4ZWI2Mi4uZmJkZDVhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdW5jb21wcmVzcy5oCkBAIC0xLDcgKzEsNiBAQAogLyoKICAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdW5jb21wcmVzcy5oCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9kbWEuaAppbmRleCBiMWEwNzFlLi43ODlmN2Y1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2RtYS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY2xvY2tzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2Nsb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZTAyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2Nsb2Nrcy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY2xvY2tzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmMgU2luZ2VyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIF9fQVNNX0FSQ0hfQ0xPQ0tTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9DTE9DS1NfSAorCit1bnNpZ25lZCBpbnQgZmNsa2ZyZXFfZ2V0ICh2b2lkKTsKK3Vuc2lnbmVkIGludCBoY2xrZnJlcV9nZXQgKHZvaWQpOwordW5zaWduZWQgaW50IHBjbGtmcmVxX2dldCAodm9pZCk7CisKKyNlbmRpZiAgLyogX0FTTV9BUkNIX0NMT0NLU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2NvbnN0YW50cy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9jb25zdGFudHMuaAppbmRleCA1MmMxY2I5Li41MWRlOTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2NvbnN0YW50cy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY29uc3RhbnRzLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9DT05TVEFOVFNfSAogI2RlZmluZSBfX0FTTV9BUkNIX0NPTlNUQU5UU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogQWRkcmVzc2luZyBjb25zdGFudHMgKi8KIApAQCAtMjksOCArMjgsNyBAQAogCiAjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApIHx8IGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQogCi0jIGRlZmluZSBJT0JBUlJJRVJfUEhZUwkJMHhjMDAwMDAwMCAvKiBTdGFydCBvZiBTRFJBTSAqLwotLyojIGRlZmluZSBJT0JBUlJJRVJfUEhZUwkJMHgwMDAwMDAwMCAqLyAvKiBTdGFydCBvZiBmbGFzaCAqLworIyBkZWZpbmUgSU9CQVJSSUVSX1BIWVMJCTB4MTAwMDAwMDAgLyogU2Vjb25kIGJhbmssIGZhc3Rlc3QgdGltaW5nICovCiAjIGRlZmluZSBJT0JBUlJJRVJfVklSVAkJMHhmMDAwMDAwMAogIyBkZWZpbmUgSU9CQVJSSUVSX1NJWkUJCVBBR0VfU0laRQogCkBAIC01Myw2ICs1MSw5IEBACiAjIGRlZmluZSBDUExEMDhfUEhZUwkJQ1BMRFhfUEhZUyAoMHgwOCkKICMgZGVmaW5lIENQTEQwOF9WSVJUCQlDUExEWF9WSVJUICgweDA4KQogIyBkZWZpbmUgQ1BMRDA4X1NJWkUJCVBBR0VfU0laRQorIyBkZWZpbmUgQ1BMRDBBX1BIWVMJCUNQTERYX1BIWVMgKDB4MGEpCisjIGRlZmluZSBDUExEMEFfVklSVAkJQ1BMRFhfVklSVCAoMHgwYSkKKyMgZGVmaW5lIENQTEQwQV9TSVpFCQlQQUdFX1NJWkUKICMgZGVmaW5lIENQTEQwQ19QSFlTCQlDUExEWF9QSFlTICgweDBjKQogIyBkZWZpbmUgQ1BMRDBDX1ZJUlQJCUNQTERYX1ZJUlQgKDB4MGMpCiAjIGRlZmluZSBDUExEMENfU0laRQkJUEFHRV9TSVpFCkBAIC04NCw1ICs4NSw3IEBACiAjZGVmaW5lCVhUQUxfSU4JCQkxNDc0NTYwMAkvKiAxNC43NDU2IE1IeiBjcnlzdGFsICovCiAjZGVmaW5lIFBMTF9DTE9DSwkJKFhUQUxfSU4gKiAyMSkJLyogMzA5IE1IeiBQTEwgY2xvY2sgKi8KICNkZWZpbmUgTUFYX0hDTEtfS0haCQkxMDAwMDAJCS8qIEhDTEsgbWF4IGxpbWl0IH4xMDBNSHogKi8KKyNkZWZpbmUgSENMSwkJCSg5OTk5MzYwMCkKKy8vI2RlZmluZSBIQ0xLCQkJKDExOTgwODAwMCkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQ09OU1RBTlRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2RtYS5oCmluZGV4IDE1NDkyZTMuLmE4Y2JkMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9kbWEuaApAQCAtMSw5ICsxLDg2IEBACiAvKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2RtYS5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMyBDb2FzdGFsIEVudmlyb25tZW50YWwgU3lzdGVtcworICogIENvcHlyaWdodCAoQykgMjAwNSBNYXJjIFNpbmdlcgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICovCisKK3R5cGVkZWYgZW51bSB7CisJRE1BX00yTTAJPSAwLAorCURNQV9NMk0xCT0gMSwKKwlETUFfTTJQMAk9IDIsCS8qIFR4ICovCisJRE1BX00yUDEJPSAzLAkvKiBSeCAqLworCURNQV9NMlAyCT0gNCwJLyogVHggKi8KKwlETUFfTTJQMwk9IDUsCS8qIFJ4ICovCisJRE1BX00yUDQJPSA2LAkvKiBUeCAtIEFDOTcgKi8KKwlETUFfTTJQNQk9IDcsCS8qIFJ4IC0gQUM5NyAqLworCURNQV9NMlA2CT0gOCwJLyogVHggKi8KKwlETUFfTTJQNwk9IDksCS8qIFJ4ICovCit9IGRtYV9kZXZpY2VfdDsKKworI2RlZmluZSBETUFfTEVOR1RIX01BWAkJKCg2NCoxMDI0KSAtIDQpIC8qIGJ5dGVzICovCisKKyNkZWZpbmUgRE1BQ19HQ0EJCV9fUkVHKERNQUNfUEhZUyArIDB4MmI4MCkKKyNkZWZpbmUgRE1BQ19HSVIJCV9fUkVHKERNQUNfUEhZUyArIDB4MmJjMCkKKworI2RlZmluZSBETUFDX0dJUl9NTUkxCQkoMTw8MTEpCisjZGVmaW5lIERNQUNfR0lSX01NSTAJCSgxPDwxMCkKKyNkZWZpbmUgRE1BQ19HSVJfTVBJOAkJKDE8PDkpCisjZGVmaW5lIERNQUNfR0lSX01QSTkJCSgxPDw4KQorI2RlZmluZSBETUFDX0dJUl9NUEk2CQkoMTw8NykKKyNkZWZpbmUgRE1BQ19HSVJfTVBJNwkJKDE8PDYpCisjZGVmaW5lIERNQUNfR0lSX01QSTQJCSgxPDw1KQorI2RlZmluZSBETUFDX0dJUl9NUEk1CQkoMTw8NCkKKyNkZWZpbmUgRE1BQ19HSVJfTVBJMgkJKDE8PDMpCisjZGVmaW5lIERNQUNfR0lSX01QSTMJCSgxPDwyKQorI2RlZmluZSBETUFDX0dJUl9NUEkwCQkoMTw8MSkKKyNkZWZpbmUgRE1BQ19HSVJfTVBJMQkJKDE8PDApCisKKyNkZWZpbmUgRE1BQ19NMlAwCQkweDAwMDAKKyNkZWZpbmUgRE1BQ19NMlAxCQkweDAwNDAKKyNkZWZpbmUgRE1BQ19NMlAyCQkweDAwODAKKyNkZWZpbmUgRE1BQ19NMlAzCQkweDAwYzAKKyNkZWZpbmUgRE1BQ19NMlA0CQkweDAyNDAKKyNkZWZpbmUgRE1BQ19NMlA1CQkweDAyMDAKKyNkZWZpbmUgRE1BQ19NMlA2CQkweDAyYzAKKyNkZWZpbmUgRE1BQ19NMlA3CQkweDAyODAKKyNkZWZpbmUgRE1BQ19NMlA4CQkweDAzNDAKKyNkZWZpbmUgRE1BQ19NMlA5CQkweDAzMDAKKyNkZWZpbmUgRE1BQ19NMk0wCQkweDAxMDAKKyNkZWZpbmUgRE1BQ19NMk0xCQkweDAxNDAKKworI2RlZmluZSBETUFDX1BfUENPTlRST0woYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwMCkKKyNkZWZpbmUgRE1BQ19QX1BJTlRFUlJVUFQoYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwNCkKKyNkZWZpbmUgRE1BQ19QX1BQQUxMT0MoYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwOCkKKyNkZWZpbmUgRE1BQ19QX1BTVEFUVVMoYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwYykKKyNkZWZpbmUgRE1BQ19QX1JFTUFJTihjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDE0KQorI2RlZmluZSBETUFDX1BfTUFYQ05UMChjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDIwKQorI2RlZmluZSBETUFDX1BfQkFTRTAoYykJCV9fUkVHKERNQUNfUEhZUyArIChjKSArIDB4MjQpCisjZGVmaW5lIERNQUNfUF9DVVJSRU5UMChjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDI4KQorI2RlZmluZSBETUFDX1BfTUFYQ05UMShjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDMwKQorI2RlZmluZSBETUFDX1BfQkFTRTEoYykJCV9fUkVHKERNQUNfUEhZUyArIChjKSArIDB4MzQpCisjZGVmaW5lIERNQUNfUF9DVVJSRU5UMShjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDM4KQorCisjZGVmaW5lIERNQUNfUENPTlRST0xfRU5BQkxFCSgxPDw0KQorCisjZGVmaW5lIERNQUNfUE9SVF9VU0IJCTAKKyNkZWZpbmUgRE1BQ19QT1JUX1NETU1DCQkxCisjZGVmaW5lIERNQUNfUE9SVF9BQzk3XzEJMgorI2RlZmluZSBETUFDX1BPUlRfQUM5N18yCTMKKyNkZWZpbmUgRE1BQ19QT1JUX0FDOTdfMwk0CisjZGVmaW5lIERNQUNfUE9SVF9VQVJUMQkJNgorI2RlZmluZSBETUFDX1BPUlRfVUFSVDIJCTcKKyNkZWZpbmUgRE1BQ19QT1JUX1VBUlQzCQk4CisKKyNkZWZpbmUgRE1BQ19QU1RBVFVTX0NVUlJTVEFURV9TSElGVAk0CisjZGVmaW5lIERNQUNfUFNUQVRVU19DVVJSU1RBVEVfTUFTSwkweDMKKworI2RlZmluZSBETUFDX1BTVEFUVVNfTkVYVEJVRgkgKDE8PDYpCisjZGVmaW5lIERNQUNfUFNUQVRVU19TVEFMTFJJTlQJICgxPDwwKQorCisjZGVmaW5lIERNQUNfSU5UX0NIRQkJICgxPDwzKQorI2RlZmluZSBETUFDX0lOVF9ORkIJCSAoMTw8MSkKKyNkZWZpbmUgRE1BQ19JTlRfU1RBTEwJCSAoMTw8MCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZW50cnktbWFjcm8uUwppbmRleCBhMmY2N2MwLi45ZmM3ZjQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9lbnRyeS1tYWNyby5TCkBAIC0xMCwxMSArMTAsNzMgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CiAKLSMgaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkgJiYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKLSMgIGVycm9yICJMSDdBNDAwIGFuZCBMSDdBNDA0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCi0jIGVuZGlmCisvKiBJbiBvcmRlciB0byBhbGxvdyB0aGVyZSB0byBiZSBzdXBwb3J0IGZvciBib3RoIG9mIHRoZSBwcm9jZXNzb3IKKyAgIGNsYXNzZXMgYXQgdGhlIHNhbWUgdGltZSwgd2UgbWFrZSBhIGhhY2sgaGVyZSB0aGF0IGlzbid0IHZlcnkKKyAgIHByZXR0eS4gIEF0IHN0YXJ0dXAsIHRoZSBsaW5rIHBvaW50ZWQgdG8gd2l0aCB0aGUKKyAgIGJyYW5jaF9pcnFfbGg3YTQwMCBzeW1ib2wgaXMgcmVwbGFjZWQgd2l0aCBhIE5PUCB3aGVuIHRoZSBDUFUgaXMKKyAgIGRldGVjdGVkIGFzIGEgbGg3YTQwNC4KIAotIyBpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDAwKQorICAgKioqIEZJWE1FOiB3ZSBzaG91bGQgY2xlYW4gdGhpcyB1cCBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lCisJICAgICAgaW1wbGVtZW50YXRpb24gZm9yIGVhY2ggQ1BVJ3MgZGVzaWduLgorCisqLworCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkgJiYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKKworCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKK2JyYW5jaF9pcnFfbGg3YTQwMDogYiAxMDAwZgorCitAIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMSDdBNDA0IGdldF9pcnFucl9hbmRfYmFzZS4KKworCQltb3YJXGlycW5yLCAjMAkJCUAgVklDMSBpcnEgYmFzZQorCQltb3YJXGJhc2UsICNpb19wMnYoMHg4MDAwMDAwMCkJQCBBUEIgcmVnaXN0ZXJzCisJCWFkZAlcYmFzZSwgXGJhc2UsICMweDgwMDAKKwkJbGRyCVx0bXAsIFtcYmFzZSwgIzB4MDAzMF0JCUAgVklDMV9WRUNUQUREUgorCQl0c3QJXHRtcCwgI1ZBX1ZFQ1RPUkVECQlAIERpcmVjdCB2ZWN0b3JlZAorCQlibmUJMTAwMmYKKwkJdHN0CVx0bXAsICNWQV9WSUMxREVGQVVMVAkJQCBEZWZhdWx0IHZlY3RvcmVkIFZJQzEKKwkJbGRybmUJXGlycXN0YXQsIFtcYmFzZSwgIzBdCQlAIFZJQzFfSVJRU1RBVFVTCisJCWJuZQkxMDAxZgorCQlhZGQJXGJhc2UsIFxiYXNlLCAjKDB4YTAwMCAtIDB4ODAwMCkKKwkJbGRyCVx0bXAsIFtcYmFzZSwgIzB4MDAzMF0JCUAgVklDMl9WRUNUQUREUgorCQl0c3QJXHRtcCwgI1ZBX1ZFQ1RPUkVECQlAIERpcmVjdCB2ZWN0b3JlZAorCQlibmUJMTAwMmYKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMwXQkJQCBWSUMyX0lSUVNUQVRVUworCQltb3YJXGlycW5yLCAjMzIJCQlAIFZJQzIgaXJxIGJhc2UKKworMTAwMToJCW1vdnMJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzEJQCBTaGlmdCBpbnRvIGNhcnJ5CisJCWJjcwkxMDA4ZgkJCQlAIEJpdCBzZXQ7IGlycSBmb3VuZAorCQlhZGQJXGlycW5yLCBcaXJxbnIsICMxCisJCWJuZQkxMDAxYgkJCQlAIFVudGlsIG5vIGJpdHMKKwkJYgkxMDA5ZgkJCQlAIE5vdGhpbmc/ICBIbW0uCisxMDAyOgkJYW5kCVxpcnFuciwgXHRtcCwgIzB4M2YJCUAgTWFzayBmb3IgdmFsaWQgYml0cworMTAwODoJCW1vdnMJXGlycXN0YXQsICMxCQkJQCBGb3JjZSAhWgorCQlzdHIJXHRtcCwgW1xiYXNlLCAjMHgwMDMwXQkJQCBDbGVhciB2ZWN0b3IKKwkJYgkxMDA5ZgorCitAIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMSDdBNDAwIGdldF9pcnFucl9hbmRfYmFzZS4KKworMTAwMDoJCW1vdglcaXJxbnIsICMwCisJCW1vdglcYmFzZSwgI2lvX3AydigweDgwMDAwMDAwKQlAIEFQQiByZWdpc3RlcnMKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMweDUwMF0JQCBQSUMgSU5UU1IKKworMTAwMToJCW1vdnMJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzEJQCBTaGlmdCBpbnRvIGNhcnJ5CisJCWJjcwkxMDA4ZgkJCQlAIEJpdCBzZXQ7IGlycSBmb3VuZAorCQlhZGQJXGlycW5yLCBcaXJxbnIsICMxCisJCWJuZQkxMDAxYgkJCQlAIFVudGlsIG5vIGJpdHMKKwkJYgkxMDA5ZgkJCQlAIE5vdGhpbmc/ICBIbW0uCisxMDA4OgkJbW92cwlcaXJxc3RhdCwgIzEJCQlAIEZvcmNlICFaCisKKzEwMDk6CisgICAgICAgICAgICAgICAuZW5kbQorCisKKworI2VsaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaGFyZHdhcmUuaAppbmRleCBhZWIwN2MxLi5lOWZmNzRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9oYXJkd2FyZS5oCkBAIC0xMyw2ICsxMyw4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgkJLyogQWRkZWQgZm9yIHRoZSBzYWtlIG9mIGFtYmEtY2xjZCBkcml2ZXIgKi8KKwogI2RlZmluZSBpb19wMnYoeCkgKDB4ZjAwMDAwMDAgfCAoKCh4KSAmIDB4ZmZmMDAwMDApID4+IDQpIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQogI2RlZmluZSBpb192MnAoeCkgKCAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZjAwMDApIDw8IDQpIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQogCkBAIC01Myw2ICs1NSw4IEBACiAKICNlbmRpZgogCisjZGVmaW5lIE1BU0tfQU5EX1NFVCh2LG0scykJKHYpID0gKCh2KSZ+KG0pKXwocykKKwogI2luY2x1ZGUgInJlZ2lzdGVycy5oIgogCiAjZW5kaWYgIC8qIF9BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxcy5oCmluZGV4IGY5MWYzZTUuLmFmZThjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxcy5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBGSVFfU1RBUlQJODAKIApAQCAtMTU0LDkgKzE1MywxMCBAQAogI2lmICFkZWZpbmVkIChJUlFfR1BJTzBJTlRSKQogIyBkZWZpbmUgSVJRX0dQSU8wSU5UUglJUlFfR1BJTzBGSVEKICNlbmRpZgotI2RlZmluZSBJUlFfVElDSyAJSVJRX1RJTlRSCisjZGVmaW5lIElSUV9USUNLCUlSUV9USU5UUgogI2RlZmluZSBJUlFfUENDMV9SRFkJSVJRX0dQSU82SU5UUgkvKiBQQ0NhcmQgMSByZWFkeSAqLwogI2RlZmluZSBJUlFfUENDMl9SRFkJSVJRX0dQSU83SU5UUgkvKiBQQ0NhcmQgMiByZWFkeSAqLworI2RlZmluZSBJUlFfVVNCCQlJUlFfVVNCSU5UUgkvKiBVU0IgZGV2aWNlICovCiAKICNpZmRlZiBDT05GSUdfTUFDSF9LRVY3QTQwMAogIyBkZWZpbmUgSVJRX1RTCQlJUlFfR1BJT0ZJUQkvKiBUb3VjaHNjcmVlbiAqLwpAQCAtMTkxLDYgKzE5MSwxMCBAQAogIyBkZWZpbmUgSVJRX0xQRDdBNDAwX1RTCUlSUV9MUEQ3QTQwWF9DUExEICsgMQkvKiBUb3VjaCBzY3JlZW4gKi8KICNlbmRpZgogCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApCisjIGRlZmluZSBJUlFfVE9VQ0gJCUlSUV9MUEQ3QTQwMF9UUworI2VuZGlmCisKICNkZWZpbmUgTlJfSVJRUwkJKE5SX0lSUV9DUFUgKyBOUl9JUlFfQk9BUkQpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9yZWdpc3RlcnMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvcmVnaXN0ZXJzLmgKaW5kZXggMmVkYjIyZS4uYjRmMDliMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9yZWdpc3RlcnMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3JlZ2lzdGVycy5oCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY29uc3RhbnRzLmg+CiAKICNpZm5kZWYgX19BU01fQVJDSF9SRUdJU1RFUlNfSApAQCAtMTgsNyArMTcsNyBAQAogCiAJLyogUGh5c2ljYWwgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzZXMgKi8KIAotI2RlZmluZSBBQzk3X1BIWVMJKDB4ODAwMDAwMDApCS8qIEFDOTcgQ29udHJvbGxlciAqLworI2RlZmluZSBBQzk3Q19QSFlTCSgweDgwMDAwMDAwKQkvKiBBQzk3IENvbnRyb2xsZXIgKi8KICNkZWZpbmUgTU1DX1BIWVMJKDB4ODAwMDAxMDApCS8qIE11bHRpbWVkaWEgQ2FyZCBDb250cm9sbGVyICovCiAjZGVmaW5lIFVTQl9QSFlTCSgweDgwMDAwMjAwKQkvKiBVU0IgQ2xpZW50ICovCiAjZGVmaW5lIFNDSV9QSFlTCSgweDgwMDAwMzAwKQkvKiBTZWN1cmUgQ2FyZCBJbnRlcmZhY2UgKi8KQEAgLTM1LDYgKzM0LDggQEAKICNkZWZpbmUgUlRDX1BIWVMJKDB4ODAwMDBkMDApCS8qIFJlYWwtdGltZSBDbG9jayAqLwogI2RlZmluZSBHUElPX1BIWVMJKDB4ODAwMDBlMDApCS8qIEdlbmVyYWwgUHVycG9zZSBJTyAqLwogI2RlZmluZSBCTUlfUEhZUwkoMHg4MDAwMGYwMCkJLyogQmF0dGVyeSBNb25pdG9yIEludGVyZmFjZSAqLworI2RlZmluZSBIUlRGVENfUEhZUwkoMHg4MDAwMTAwMCkJLyogSGlnaC1yZXMgVEZUIENvbnRyb2xsZXIgKExIN0E0MDApICovCisjZGVmaW5lIEFMSV9QSFlTCSgweDgwMDAxMDAwKQkvKiBBZHZhbmNlZCBMQ0QgSW50ZXJmYWNlIChMSDdBNDA0KSAqLwogI2RlZmluZSBXRFRfUEhZUwkoMHg4MDAwMTQwMCkJLyogV2F0Y2hkb2cgVGltZXIgKi8KICNkZWZpbmUgU01DX1BIWVMJKDB4ODAwMDIwMDApCS8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciAqLwogI2RlZmluZSBTRFJDX1BIWVMJKDB4ODAwMDI0MDApCS8qIFNEUkFNIENvbnRyb2xsZXIgKi8KQEAgLTQzLDYgKzQ0LDcgQEAKIAogCS8qIFBoeXNpY2FsIHJlZ2lzdGVycyBvZiB0aGUgTEg3QTQwNCAqLwogCisjZGVmaW5lIEFEQ19QSFlTCSgweDgwMDAxMzAwKQkvKiBBL0QgJiBUb3VjaHNjcmVlbiBDb250cm9sbGVyICovCiAjZGVmaW5lIFZJQzFfUEhZUwkoMHg4MDAwODAwMCkJLyogVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgMSAqLwogI2RlZmluZSBVU0JIX1BIWVMJKDB4ODAwMDkwMDApCS8qIFVTQiBPSENJIGhvc3QgY29udHJvbGxlciAqLwogI2RlZmluZSBWSUMyX1BIWVMJKDB4ODAwMGEwMDApCS8qIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIDIgKi8KQEAgLTUzLDEwICs1NSwzMiBAQAogCiAJLyogQ2xvY2svU3RhdGUgQ29udHJvbGxlciByZWdpc3RlciAqLwogCisjZGVmaW5lIENTQ19QV1JTUglfX1JFRyhDU0NfUEhZUyArIDB4MDApIC8qIFJlc2V0IHJlZ2lzdGVyICYgSUQgKi8KICNkZWZpbmUgQ1NDX1BXUkNOVAlfX1JFRyhDU0NfUEhZUyArIDB4MDQpIC8qIFBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1NDX0NMS1NFVAlfX1JFRyhDU0NfUEhZUyArIDB4MjApIC8qIENsb2NrIHNwZWVkIGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1NDX1VTQkRSRVNFVAlfX1JFRyhDU0NfUEhZUyArIDB4NGMpIC8qIFVTQiBEZXZpY2UgcmVzZXRzICovCiAKICNkZWZpbmUgQ1NDX1BXUkNOVF9VU0JIX0VOCSgxPDwyOCkJLyogVVNCIEhvc3QgcG93ZXIgZW5hYmxlICovCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMk0xX0VOCSgxPDwyNykKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yTTBfRU4JKDE8PDI2KQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQOF9FTgkoMTw8MjUpCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMlA5X0VOCSgxPDwyNCkKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yUDZfRU4JKDE8PDIzKQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQN19FTgkoMTw8MjIpCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMlA0X0VOCSgxPDwyMSkKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yUDVfRU4JKDE8PDIwKQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQMl9FTgkoMTw8MTkpCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMlAzX0VOCSgxPDwxOCkKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yUDBfRU4JKDE8PDE3KQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQMV9FTgkoMTw8MTYpCiAKKyNkZWZpbmUgQ1NDX1BXUlNSX0NISVBNQU5fU0hJRlQJKDI0KQorI2RlZmluZSBDU0NfUFdSU1JfQ0hJUE1BTl9NQVNLCSgweGZmKQorI2RlZmluZSBDU0NfUFdSU1JfQ0hJUElEX1NISUZUCSgxNikKKyNkZWZpbmUgQ1NDX1BXUlNSX0NISVBJRF9NQVNLCSgweGZmKQorCisjZGVmaW5lIENTQ19VU0JEUkVTRVRfQVBCUkVTRVRSRUcJKDE8PDEpCisjZGVmaW5lIENTQ19VU0JEUkVTRVRfSU9SRVNFVFJFRwkoMTw8MCkKIAogCS8qIEludGVycnVwdCBDb250cm9sbGVyIHJlZ2lzdGVycyAqLwogCkBAIC0xMDksNiArMTMzLDEzIEBACiAjZGVmaW5lIEdQSU9fR1BJT0ZFT0kJX19SRUcoR1BJT19QSFlTICsgMHg1NCkJLyogR1BJTyBFbmQtb2YtSW50ZXJydXB0ICovCiAjZGVmaW5lIEdQSU9fR1BJT0lOVEVOCV9fUkVHKEdQSU9fUEhZUyArIDB4NTgpCS8qIEdQSU8gSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBHUElPX0lOVFNUQVRVUwlfX1JFRyhHUElPX1BIWVMgKyAweDVjKQkvKiBHUElPIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgR1BJT19QSU5NVVgJX19SRUcoR1BJT19QSFlTICsgMHgyYykKKyNkZWZpbmUgR1BJT19QQURECV9fUkVHKEdQSU9fUEhZUyArIDB4MTApCisjZGVmaW5lIEdQSU9fUEFECV9fUkVHKEdQSU9fUEhZUyArIDB4MDApCisjZGVmaW5lIEdQSU9fUENECV9fUkVHKEdQSU9fUEhZUyArIDB4MDgpCisjZGVmaW5lIEdQSU9fUENERAlfX1JFRyhHUElPX1BIWVMgKyAweDE4KQorI2RlZmluZSBHUElPX1BFREQJX19SRUcoR1BJT19QSFlTICsgMHgyNCkKKyNkZWZpbmUgR1BJT19QRUQJX19SRUcoR1BJT19QSFlTICsgMHgyMCkKIAogCiAJLyogU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIHJlZ2lzdGVycyAqLwpAQCAtMTM4LDIwICsxNjksMjEgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApIHx8IGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQotIyBkZWZpbmUgQ1BMRF9DT05UUk9MCQlfX1JFRzgoQ1BMRDAyX1BIWVMpCi0jIGRlZmluZSBDUExEX1NQSV9EQVRBCQlfX1JFRzgoQ1BMRDA2X1BIWVMpCi0jIGRlZmluZSBDUExEX1NQSV9DT05UUk9MCV9fUkVHOChDUExEMDhfUEhZUykKLSMgZGVmaW5lIENQTERfU1BJX0VFUFJPTQlfX1JFRzgoQ1BMRDBBX1BIWVMpCi0jIGRlZmluZSBDUExEX0lOVEVSUlVQVFMJX19SRUc4KENQTEQwQ19QSFlTKSAvKiBJUlEgbWFzay9zdGF0dXMgKi8KLSMgZGVmaW5lIENQTERfQk9PVF9NT0RFCQlfX1JFRzgoQ1BMRDBFX1BIWVMpCi0jIGRlZmluZSBDUExEX0ZMQVNICQlfX1JFRzgoQ1BMRDEwX1BIWVMpCi0jIGRlZmluZSBDUExEX1BPV0VSX01HTVQJX19SRUc4KENQTEQxMl9QSFlTKQotIyBkZWZpbmUgQ1BMRF9SRVZJU0lPTgkJX19SRUc4KENQTEQxNF9QSFlTKQotIyBkZWZpbmUgQ1BMRF9HUElPX0VYVAkJX19SRUc4KENQTEQxNl9QSFlTKQotIyBkZWZpbmUgQ1BMRF9HUElPX0RBVEEJCV9fUkVHOChDUExEMThfUEhZUykKLSMgZGVmaW5lIENQTERfR1BJT19ESVIJCV9fUkVHOChDUExEMUFfUEhZUykKLSNlbmRpZgogCisjIGRlZmluZSBDUExEX0NPTlRST0wJCV9fUkVHMTYoQ1BMRDAyX1BIWVMpCisjIGRlZmluZSBDUExEX1NQSV9EQVRBCQlfX1JFRzE2KENQTEQwNl9QSFlTKQorIyBkZWZpbmUgQ1BMRF9TUElfQ09OVFJPTAlfX1JFRzE2KENQTEQwOF9QSFlTKQorIyBkZWZpbmUgQ1BMRF9TUElfRUVQUk9NCV9fUkVHMTYoQ1BMRDBBX1BIWVMpCisjIGRlZmluZSBDUExEX0lOVEVSUlVQVFMJX19SRUcxNihDUExEMENfUEhZUykgLyogSVJRIG1hc2svc3RhdHVzICovCisjIGRlZmluZSBDUExEX0JPT1RfTU9ERQkJX19SRUcxNihDUExEMEVfUEhZUykKKyMgZGVmaW5lIENQTERfRkxBU0gJCV9fUkVHMTYoQ1BMRDEwX1BIWVMpCisjIGRlZmluZSBDUExEX1BPV0VSX01HTVQJX19SRUcxNihDUExEMTJfUEhZUykKKyMgZGVmaW5lIENQTERfUkVWSVNJT04JCV9fUkVHMTYoQ1BMRDE0X1BIWVMpCisjIGRlZmluZSBDUExEX0dQSU9fRVhUCQlfX1JFRzE2KENQTEQxNl9QSFlTKQorIyBkZWZpbmUgQ1BMRF9HUElPX0RBVEEJCV9fUkVHMTYoQ1BMRDE4X1BIWVMpCisjIGRlZmluZSBDUExEX0dQSU9fRElSCQlfX1JFRzE2KENQTEQxQV9QSFlTKQorCisjZW5kaWYKIAogCS8qIFRpbWVyIHJlZ2lzdGVycyAqLwogCkBAIC0xOTAsNCArMjIyLDMgQEAKIAogCiAjZW5kaWYgIC8qIF9BU01fQVJDSF9SRUdJU1RFUlNfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3NzcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9zc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzJiMWM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9zc3AuaApAQCAtMCwwICsxLDcxIEBACisvKiBzc3AuaAorICAgICAkSWQkCisKKyAgIHdyaXR0ZW4gYnkgTWFyYyBTaW5nZXIKKyAgIDYgRGVjIDIwMDQKKworICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmMgU2luZ2VyCisKKyAgIC0tLS0tLS0tLS0tCisgICBERVNDUklQVElPTgorICAgLS0tLS0tLS0tLS0KKworICAgVGhpcyBTU1AgaGVhZGVyIGlzIGF2YWlsYWJsZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwsIGZvciB0aGlzCisgICBtYWNoaW5lL2FyY2hpdGVjdHVyZSwgYmVjYXVzZSBkcml2ZXJzIHRoYXQgdXNlIGl0IG1heSBiZSBkaXNwZXJzZWQuCisKKyAgIFRoaXMgZmlsZSB3YXMgY2xvbmVkIGZyb20gdGhlIDc5NTJ4IGltcGxlbWVudGF0aW9uLiAgSXQgd291bGQgYmUKKyAgIGJldHRlciB0byBzaGFyZSB0aGVtLCBidXQgd2UncmUgdGFraW5nIGFuIGVhc2llciBhcHByb2FjaCBmb3IgdGhlCisgICB0aW1lIGJlaW5nLgorCisqLworCisjaWYgIWRlZmluZWQgKF9fU1NQX0hfXykKKyMgICAgZGVmaW5lICAgX19TU1BfSF9fCisKKy8qIC0tLS0tIEluY2x1ZGVzICovCisKKy8qIC0tLS0tIFR5cGVzICovCisKK3N0cnVjdCBzc3BfZHJpdmVyIHsKKwlpbnQgICgqaW5pdCkJCSh2b2lkKTsKKwl2b2lkICgqZXhpdCkJCSh2b2lkKTsKKwl2b2lkICgqYWNxdWlyZSkJCSh2b2lkKTsKKwl2b2lkICgqcmVsZWFzZSkJCSh2b2lkKTsKKwlpbnQgICgqY29uZmlndXJlKQkoaW50IGRldmljZSwgaW50IG1vZGUsIGludCBzcGVlZCwKKwkJCQkgaW50IGZyYW1lX3NpemVfd3JpdGUsIGludCBmcmFtZV9zaXplX3JlYWQpOworCXZvaWQgKCpjaGlwX3NlbGVjdCkJKGludCBlbmFibGUpOworCXZvaWQgKCpzZXRfY2FsbGJhY2tzKSAgICh2b2lkKiBoYW5kbGUsCisJCQkJIGlycXJldHVybl90ICgqY2FsbGJhY2tfdHgpKHZvaWQqKSwKKwkJCQkgaXJxcmV0dXJuX3QgKCpjYWxsYmFja19yeCkodm9pZCopKTsKKwl2b2lkICgqZW5hYmxlKQkJKHZvaWQpOworCXZvaWQgKCpkaXNhYmxlKQkJKHZvaWQpOworLy8JaW50ICAoKnNhdmVfc3RhdGUpCSh2b2lkKik7CisvLwl2b2lkICgqcmVzdG9yZV9zdGF0ZSkJKHZvaWQqKTsKKwlpbnQgICgqcmVhZCkJCSh2b2lkKTsKKwlpbnQgICgqd3JpdGUpCQkodTE2IGRhdGEpOworCWludCAgKCp3cml0ZV9yZWFkKQkodTE2IGRhdGEpOworCXZvaWQgKCpmbHVzaCkJCSh2b2lkKTsKKwl2b2lkICgqd3JpdGVfYXN5bmMpCSh2b2lkKiBwdiwgc2l6ZV90IGNiKTsKKwlzaXplX3QgKCp3cml0ZV9wb3MpCSh2b2lkKTsKK307CisKKwkvKiBUaGVzZSBtb2RlcyBhcmUgb25seSBhdmFpbGFibGUgb24gdGhlIExINzk1MjQgKi8KKyNkZWZpbmUgU1NQX01PREVfU1BJCQkoMSkKKyNkZWZpbmUgU1NQX01PREVfU1NJCQkoMikKKyNkZWZpbmUgU1NQX01PREVfTUlDUk9XSVJFCSgzKQorI2RlZmluZSBTU1BfTU9ERV9JMlMJCSg0KQorCisJLyogQ1BMRCBTUEkgZGV2aWNlcyAqLworI2RlZmluZSBERVZJQ0VfRUVQUk9NCTAJLyogQ29uZmlndXJhdGlvbiBlZXByb20gKi8KKyNkZWZpbmUgREVWSUNFX01BQwkxCS8qIE1BQyBlZXByb20gKExQRDc5NTI0KSAqLworI2RlZmluZSBERVZJQ0VfQ09ERUMJMgkvKiBBdWRpbyBjb2RlYyAqLworI2RlZmluZSBERVZJQ0VfVE9VQ0gJMwkvKiBUb3VjaCBzY3JlZW4gKExQRDc5NTIwKSAqLworCisvKiAtLS0tLSBHbG9iYWxzICovCisKKy8qIC0tLS0tIFByb3RvdHlwZXMgKi8KKworLy9leHRlcm4gc3RydWN0IHNzcF9kcml2ZXIgbGg3OTUyMF9pMnNfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBzc3BfZHJpdmVyIGxoN2E0MDBfY3BsZF9zc3BfZHJpdmVyOworCisjZW5kaWYgIC8qIF9fU1NQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3VuY29tcHJlc3MuaAppbmRleCBmODA1MzM0Li4zZDFjZTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3VuY29tcHJlc3MuaApAQCAtMTYsNyArMTYsNyBAQAogI2lmbmRlZiBVQVJUX1JfU1RBVFVTCiAjIGRlZmluZSBVQVJUX1JfU1RBVFVTCSgweDEwKQogI2VuZGlmCi0jZGVmaW5lIG5UeFJkeSAgCSgweDIwKQkvKiBOb3QgVHhSZWFkeSAobGl0ZXJhbGx5IFR4IEZJRk8gZnVsbCkgKi8KKyNkZWZpbmUgblR4UmR5CQkoMHgyMCkJLyogTm90IFR4UmVhZHkgKGxpdGVyYWxseSBUeCBGSUZPIGZ1bGwpICovCiAKIAkvKiBBY2Nlc3MgVUFSVCB3aXRoIHBoeXNpY2FsIGFkZHJlc3NlcyBiZWZvcmUgTU1VIGlzIHNldHVwICovCiAjZGVmaW5lIFVBUlRfU1RBVFVTICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKSAoVUFSVDJfUEhZUyArIFVBUlRfUl9TVEFUVVMpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCmluZGV4IDZkNjI0MGEuLmRmZGJmMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX09NQVBfQk9BUkRfSAogI2RlZmluZSBfT01BUF9CT0FSRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBEaWZmZXJlbnQgcGVyaXBoZXJhbCBpZHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAppbmRleCA3OTA5YjcyLi5jN2Q5ZTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCkBAIC0zNyw3ICszNyw2IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9ICiAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZm5kZWYgX19BU1NFTUJMRVJfXwogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKaW5kZXggNjc5NzBkMS4uYWMyYmZhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oCkBAIC00LDcgKzQsNiBAQAogICovCiAjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKaW5kZXggY2EyYzhiZS4uYWNhMGFkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvY2xvY2suaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWFlMDAzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9jbG9jay5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2Nsb2NrLmgKKyAqCisgKiBDbG9jayBjb250cm9sIGRyaXZlciBmb3IgUE5YNDAwOCAtIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yczogVml0YWx5IFdvb2wsIERtaXRyeSBDaGlnaXJldiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBfX1BOWDQwMDhfQ0xPQ0tfSF9fCisjZGVmaW5lIF9fUE5YNDAwOF9DTE9DS19IX18KKworc3RydWN0IG1vZHVsZTsKK3N0cnVjdCBjbGs7CisKKyNkZWZpbmUgUFdSTUFOX1ZBX0JBU0UJCUlPX0FERFJFU1MoUE5YNDAwOF9QV1JNQU5fQkFTRSkKKyNkZWZpbmUgSENMS0RJVkNUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweDQwKQorI2RlZmluZSBQV1JDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHg0NCkKKyNkZWZpbmUgUExMQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4NDgpCisjZGVmaW5lIE9TQzEzQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4NGMpCisjZGVmaW5lIFNZU0NMS0NUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweDUwKQorI2RlZmluZSBIQ0xLUExMQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4NTgpCisjZGVmaW5lIFVTQkNUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweDY0KQorI2RlZmluZSBTRFJBTUNMS0NUUkxfUkVHCShQV1JNQU5fVkFfQkFTRSArIDB4NjgpCisjZGVmaW5lIE1TQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4ODApCisjZGVmaW5lIEJUQ0xLQ1RSTAkJKFBXUk1BTl9WQV9CQVNFICsgMHg4NCkKKyNkZWZpbmUgRFVNQ0xLQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4OTApCisjZGVmaW5lIEkyQ0NMS0NUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGFjKQorI2RlZmluZSBLRVlDTEtDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhiMCkKKyNkZWZpbmUgVFNDTEtDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhiNCkKKyNkZWZpbmUgUFdNQ0xLQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4YjgpCisjZGVmaW5lIFNQSUNUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGM0KQorI2RlZmluZSBGTEFTSENMS0NUUkxfUkVHCShQV1JNQU5fVkFfQkFTRSArIDB4YzgpCisjZGVmaW5lIFVBUlQzQ0xLX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhkMCkKKyNkZWZpbmUgVUFSVENMS0NUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGU0KQorI2RlZmluZSBETUFDTEtDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhlOCkKKyNkZWZpbmUgQVVUT0NMS19DVFJMCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGVjKQorI2RlZmluZSBKUEVHQ0xLQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4ZmMpCisKKyNkZWZpbmUgQVVESU9DT05GSUdfVkFfQkFTRQlJT19BRERSRVNTKFBOWDQwMDhfQVVESU9DT05GSUdfQkFTRSkKKyNkZWZpbmUgRFNQUExMQ1RSTF9SRUcJCShBVURJT0NPTkZJR19WQV9CQVNFICsgMHg2MCkKKyNkZWZpbmUgRFNQQ0xLQ1RSTF9SRUcJCShBVURJT0NPTkZJR19WQV9CQVNFICsgMHg2NCkKKyNkZWZpbmUgQVVESU9DTEtDVFJMX1JFRwkoQVVESU9DT05GSUdfVkFfQkFTRSArIDB4NjgpCisjZGVmaW5lIEFVRElPUExMQ1RSTF9SRUcJKEFVRElPQ09ORklHX1ZBX0JBU0UgKyAweDZDKQorCisjZGVmaW5lIFVTQl9PVEdfQ0xLQ1RSTF9SRUcJSU9fQUREUkVTUyhQTlg0MDA4X1VTQl9DT05GSUdfQkFTRSArIDB4ZmY0KQorCisjZGVmaW5lIFZGUDlDTEtDVFJMX1JFRwkJSU9fQUREUkVTUyhQTlg0MDA4X0RFQlVHX0JBU0UpCisKKyNkZWZpbmUgQ0xLX1JBVEVfMTNNSFogMTMwMDAKKyNkZWZpbmUgQ0xLX1JBVEVfMU1IWiAxMDAwCisjZGVmaW5lIENMS19SQVRFXzIwOE1IWiAyMDgwMDAKKyNkZWZpbmUgQ0xLX1JBVEVfNDhNSFogNDgwMDAKKyNkZWZpbmUgQ0xLX1JBVEVfMzJLSFogMzIKKworI2RlZmluZSBQTlg0MDA4X1VBUlRfQ0xLIENMS19SQVRFXzEzTUhaICogMTAwMCAvKiBpbiBNSHogKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzODM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDI3IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbW92CVxyeCwgIzB4MDAwOTAwMDAKKwkJYWRkZXEJXHJ4LCBccngsICMweDQwMDAwMDAwCisJCWFkZG5lCVxyeCwgXHJ4LCAjMHhmNDAwMDAwMAorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHJiCVxyZCwgW1xyeCwgIzB4MF0KKwkJLmVuZG0KKworI2RlZmluZSBVQVJUX1NISUZUCTIKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlZTEyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZG1hLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9kbWEuaAorICoKKyAqICBQTlg0MDA4IERNQSBoZWFkZXIgZmlsZQorICoKKyAqICBBdXRob3I6CVZpdGFseSBXb29sCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4gKGMpIDIwMDUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICisKKyNpbmNsdWRlICJwbGF0Zm9ybS5oIgorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhmZmZmZmZmZgorCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJOAorCisjZGVmaW5lIERNQUNfQkFTRQkJSU9fQUREUkVTUyhQTlg0MDA4X0RNQV9DT05GSUdfQkFTRSkKKyNkZWZpbmUgRE1BQ19JTlRfU1RBVAkJKERNQUNfQkFTRSArIDB4MDAwMCkKKyNkZWZpbmUgRE1BQ19JTlRfVENfU1RBVAkoRE1BQ19CQVNFICsgMHgwMDA0KQorI2RlZmluZSBETUFDX0lOVF9UQ19DTEVBUgkoRE1BQ19CQVNFICsgMHgwMDA4KQorI2RlZmluZSBETUFDX0lOVF9FUlJfU1RBVAkoRE1BQ19CQVNFICsgMHgwMDBjKQorI2RlZmluZSBETUFDX0lOVF9FUlJfQ0xFQVIJKERNQUNfQkFTRSArIDB4MDAxMCkKKyNkZWZpbmUgRE1BQ19TT0ZUX1NSRVEJCShETUFDX0JBU0UgKyAweDAwMjQpCisjZGVmaW5lIERNQUNfQ09ORklHCQkoRE1BQ19CQVNFICsgMHgwMDMwKQorI2RlZmluZSBETUFDX0N4X1NSQ19BRERSKGMpCShETUFDX0JBU0UgKyAweDAxMDAgKyAoYykgKiAweDIwKQorI2RlZmluZSBETUFDX0N4X0RFU1RfQUREUihjKQkoRE1BQ19CQVNFICsgMHgwMTA0ICsgKGMpICogMHgyMCkKKyNkZWZpbmUgRE1BQ19DeF9MTEkoYykJCShETUFDX0JBU0UgKyAweDAxMDggKyAoYykgKiAweDIwKQorI2RlZmluZSBETUFDX0N4X0NPTlRST0woYykJKERNQUNfQkFTRSArIDB4MDEwYyArIChjKSAqIDB4MjApCisjZGVmaW5lIERNQUNfQ3hfQ09ORklHKGMpCShETUFDX0JBU0UgKyAweDAxMTAgKyAoYykgKiAweDIwKQorCitlbnVtIHsKKwlXSURUSF9CWVRFID0gMCwKKwlXSURUSF9IV09SRCwKKwlXSURUSF9XT1JECit9OworCitlbnVtIHsKKwlGQ19NRU0yTUVNX0RNQSwKKwlGQ19NRU0yUEVSX0RNQSwKKwlGQ19QRVIyTUVNX0RNQSwKKwlGQ19QRVIyUEVSX0RNQSwKKwlGQ19QRVIyUEVSX0RQRVIsCisJRkNfTUVNMlBFUl9QRVIsCisJRkNfUEVSMk1FTV9QRVIsCisJRkNfUEVSMlBFUl9TUEVSCit9OworCitlbnVtIHsKKwlETUFfSU5UX1VOS05PV04gPSAwLAorCURNQV9FUlJfSU5UID0gMSwKKwlETUFfVENfSU5UID0gMiwKK307CisKK2VudW0geworCURNQV9CVUZGRVJfQUxMT0NBVEVEID0gMSwKKwlETUFfSEFTX0xMID0gMiwKK307CisKK2VudW0geworCVBFUl9DQU1fRE1BXzEgPSAwLAorCVBFUl9OREZfRkxBU0ggPSAxLAorCVBFUl9NQlhfU0xBVkVfRklGTyA9IDIsCisJUEVSX1NQSTJfUkVDX1hNSVQgPSAzLAorCVBFUl9NU19TRF9SWF9YTUlUID0gNCwKKwlQRVJfSFNfVUFSVF8xX1hNSVQgPSA1LAorCVBFUl9IU19VQVJUXzFfUlggPSA2LAorCVBFUl9IU19VQVJUXzJfWE1JVCA9IDcsCisJUEVSX0hTX1VBUlRfMl9SWCA9IDgsCisJUEVSX0hTX1VBUlRfN19YTUlUID0gOSwKKwlQRVJfSFNfVUFSVF83X1JYID0gMTAsCisJUEVSX1NQSTFfUkVDX1hNSVQgPSAxMSwKKwlQRVJfTUxDX05ERl9TUkVDID0gMTIsCisJUEVSX0NBTV9ETUFfMiA9IDEzLAorCVBFUl9QUk5HX0lORklGTyA9IDE0LAorCVBFUl9QUk5HX09VVEZJRk8gPSAxNSwKK307CisKK3N0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsIHsKKwlpbnQgdGNfbWFzazsKKwlpbnQgY2FjaGVhYmxlOworCWludCBidWZmZXJhYmxlOworCWludCBwcml2X21vZGU7CisJaW50IGRpOworCWludCBzaTsKKwlpbnQgZGVzdF9haGIxOworCWludCBzcmNfYWhiMTsKKwlpbnQgZHdpZHRoOworCWludCBzd2lkdGg7CisJaW50IGRic2l6ZTsKKwlpbnQgc2JzaXplOworCWludCB0cl9zaXplOworfTsKKworc3RydWN0IHBueDQwMDhfZG1hX2NoX2NvbmZpZyB7CisJaW50IGhhbHQ7CisJaW50IGFjdGl2ZTsKKwlpbnQgbG9jazsKKwlpbnQgaXRjOworCWludCBpZTsKKwlpbnQgZmxvd19jbnRybDsKKwlpbnQgZGVzdF9wZXI7CisJaW50IHNyY19wZXI7Cit9OworCitzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgeworCXVuc2lnbmVkIGxvbmcgc3JjX2FkZHI7CisJdW5zaWduZWQgbG9uZyBkZXN0X2FkZHI7CisJdTMyIG5leHRfZG1hOworCXVuc2lnbmVkIGxvbmcgY2hfY3RybDsKKwlzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKm5leHQ7CisJaW50IGZsYWdzOworCXZvaWQgKmFsbG9jX2RhdGE7CisJaW50ICgqZnJlZSkgKHZvaWQgKik7Cit9OworCitzdHJ1Y3QgcG54NDAwOF9kbWFfY29uZmlnIHsKKwlpbnQgaXNfbGw7CisJdW5zaWduZWQgbG9uZyBzcmNfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGRlc3RfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGNoX2N0cmw7CisJdW5zaWduZWQgbG9uZyBjaF9jZmc7CisJc3RydWN0IHBueDQwMDhfZG1hX2xsICpsbDsKKwl1MzIgbGxfZG1hOworCWludCBmbGFnczsKKwl2b2lkICphbGxvY19kYXRhOworCWludCAoKmZyZWUpICh2b2lkICopOworfTsKKworZXh0ZXJuIHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqcG54NDAwOF9hbGxvY19sbF9lbnRyeShkbWFfYWRkcl90ICopOworZXh0ZXJuIHZvaWQgcG54NDAwOF9mcmVlX2xsX2VudHJ5KHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqLCBkbWFfYWRkcl90KTsKK2V4dGVybiB2b2lkIHBueDQwMDhfZnJlZV9sbCh1MzIgbGxfZG1hLCBzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKik7CisKK2V4dGVybiBpbnQgcG54NDAwOF9yZXF1ZXN0X2NoYW5uZWwoY2hhciAqLCBpbnQsCisJCQkJICAgdm9pZCAoKikoaW50LCBpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCQkJICAgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHBueDQwMDhfZnJlZV9jaGFubmVsKGludCk7CitleHRlcm4gaW50IHBueDQwMDhfY29uZmlnX2RtYShpbnQsIGludCwgaW50KTsKK2V4dGVybiBpbnQgcG54NDAwOF9kbWFfcGFja19jb250cm9sKGNvbnN0IHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsICosCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gaW50IHBueDQwMDhfZG1hX3BhcnNlX2NvbnRyb2wodW5zaWduZWQgbG9uZywKKwkJCQkgICAgIHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsICopOworZXh0ZXJuIGludCBwbng0MDA4X2RtYV9wYWNrX2NvbmZpZyhjb25zdCBzdHJ1Y3QgcG54NDAwOF9kbWFfY2hfY29uZmlnICosCisJCQkJICAgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiBpbnQgcG54NDAwOF9kbWFfcGFyc2VfY29uZmlnKHVuc2lnbmVkIGxvbmcsCisJCQkJICAgIHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jb25maWcgKik7CitleHRlcm4gaW50IHBueDQwMDhfY29uZmlnX2NoYW5uZWwoaW50LCBzdHJ1Y3QgcG54NDAwOF9kbWFfY29uZmlnICopOworZXh0ZXJuIGludCBwbng0MDA4X2NoYW5uZWxfZ2V0X2NvbmZpZyhpbnQsIHN0cnVjdCBwbng0MDA4X2RtYV9jb25maWcgKik7CitleHRlcm4gaW50IHBueDQwMDhfZG1hX2NoX2VuYWJsZShpbnQpOworZXh0ZXJuIGludCBwbng0MDA4X2RtYV9jaF9kaXNhYmxlKGludCk7CitleHRlcm4gaW50IHBueDQwMDhfZG1hX2NoX2VuYWJsZWQoaW50KTsKK2V4dGVybiB2b2lkIHBueDQwMDhfZG1hX3NwbGl0X2hlYWRfZW50cnkoc3RydWN0IHBueDQwMDhfZG1hX2NvbmZpZyAqLAorCQkJCQkgc3RydWN0IHBueDQwMDhfZG1hX2NoX2N0cmwgKik7CitleHRlcm4gdm9pZCBwbng0MDA4X2RtYV9zcGxpdF9sbF9lbnRyeShzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKiwKKwkJCQkgICAgICAgc3RydWN0IHBueDQwMDhfZG1hX2NoX2N0cmwgKik7CisKKyNlbmRpZgkJCQkvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWMxOThlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9lbnRyeS1tYWNyby5TCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBQTlg0MDA4LWJhc2VkIHBsYXRmb3JtcworICoKKyAqIDIwMDUtMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogQXV0aG9yOiBWaXRhbHkgV29vbCA8dndvb2xAcnUubXZpc3RhLmNvbT4KKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS5oIgorCisjZGVmaW5lIElPX0JBU0UgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIElPX0FERFJFU1MoeCkgICgoKCgoeCkgJiAweGZmMDAwMDAwKSA+PiA0KSB8ICgoeCkgJiAweGZmZmZmKSkgfCBJT19CQVNFKQorCisjZGVmaW5lIElOVFJDX01BU0sJCQkweDAwCisjZGVmaW5lIElOVFJDX1JBV19TVEFUCQkJMHgwNAorI2RlZmluZSBJTlRSQ19TVEFUCQkJMHgwOAorI2RlZmluZSBJTlRSQ19QT0xBUgkJCTB4MEMKKyNkZWZpbmUgSU5UUkNfQUNUX1RZUEUJCQkweDEwCisjZGVmaW5lIElOVFJDX1RZUEUJCQkweDE0CisKKyNkZWZpbmUgU0lDMV9CQVNFX0lOVCAgIDMyCisjZGVmaW5lIFNJQzJfQkFTRV9JTlQgICA2NAorCisJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKy8qIGRlY29kZSB0aGUgTUlDIGludGVycnVwdCBudW1iZXJzICovCisJCWxkcglcYmFzZSwgPUlPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UpCisJCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjSU5UUkNfU1RBVF0KKworCQljbXAJXGlycXN0YXQsIzE8PDE2CisJCW1vdmhzCVxpcnFuciwjMTYKKwkJbW92bG8JXGlycW5yLCMwCisJCW1vdmhzCVxpcnFzdGF0LFxpcnFzdGF0LGxzciMxNgorCQljbXAJXGlycXN0YXQsIzE8PDgKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjOAorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjOAorCQljbXAJXGlycXN0YXQsIzE8PDQKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjNAorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjNAorCQljbXAJXGlycXN0YXQsIzE8PDIKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjMgorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjMgorCQljbXAJXGlycXN0YXQsIzE8PDEKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjMQorCisvKiB3YXMgdGhlcmUgYW4gaW50ZXJydXB0ID8gaWYgbm90IHRoZW4gZHJvcCBvdXQgd2l0aCBFUSBzdGF0dXMgKi8KKwkJdGVxCVxpcnFzdGF0LCMwCisJCWJlcQkxMDAzZgorCisvKiBhbmQgbm93IGNoZWNrIGZvciBleHRlbmRlZCBJUlEgcmVhc29ucyAqLworCQljbXAJXGlycW5yLCMxCisJCWJscwkxMDAzZgorCQljbXAJXGlycW5yLCMzMAorCQlibG8JMTAwMmYKKworLyogSVJRIDMxLDMwICA6IEhpZ2ggcHJpb3JpdHkgY2FzY2FkZSBJUlEgaGFuZGxlICovCisvKiByZWFkIHRoZSBjb3JyZWN0IFNJQyAqLworLyogZGVjb2Rpbmcgc3RhdHVzIGFmdGVyIGNvbXBhcmUgOiBlcSBpcyAzMCAoU0lDMSkgLCBuZSBpcyAzMSAoU0lDMikgKi8KKy8qIHNldCB0aGUgYmFzZSBJUlEgbnVtYmVyICovCisJCWxkcmVxCVxiYXNlLCA9SU9fQUREUkVTUyhQTlg0MDA4X0lOVENUUkxTSUMxX0JBU0UpCisJCW1vdmVxICBcaXJxbnIsI1NJQzFfQkFTRV9JTlQKKwkJbGRybmUJXGJhc2UsID1JT19BRERSRVNTKFBOWDQwMDhfSU5UQ1RSTFNJQzJfQkFTRSkKKwkJbW92bmUgICBcaXJxbnIsI1NJQzJfQkFTRV9JTlQKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICNJTlRSQ19TVEFUXQorCQlsZHIJXHRtcCwJICBbXGJhc2UsICNJTlRSQ19UWVBFXQorLyogYW5kIHdpdGggaW52ZXJ0ZWQgbWFzayA6IGxvdyBwcmlvcml0eSBpbnRlcnJ1cHRzICAqLworCQlhbmQJXGlycXN0YXQsXGlycXN0YXQsXHRtcAorCQliCTEwMDRmCisKKzEwMDM6CisvKiBJUlEgMSwwICA6IExvdyBwcmlvcml0eSBjYXNjYWRlIElSUSBoYW5kbGUgKi8KKy8qIHJlYWQgdGhlIGNvcnJlY3QgU0lDICovCisvKiBkZWNvZGluZyBzdGF0dXMgYWZ0ZXIgY29tcGFyZSA6IGVxIGlzIDEgKFNJQzIpICwgbmUgaXMgMCAoU0lDMSkqLworLyogcmVhZCB0aGUgY29ycmVjdCBTSUMgKi8KKy8qIHNldCB0aGUgYmFzZSBJUlEgbnVtYmVyICAqLworCQlsZHJuZQlcYmFzZSwgPUlPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMU0lDMV9CQVNFKQorCQltb3ZuZSAgIFxpcnFuciwjU0lDMV9CQVNFX0lOVAorCQlsZHJlcQlcYmFzZSwgPUlPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMU0lDMl9CQVNFKQorCQltb3ZlcSAgIFxpcnFuciwjU0lDMl9CQVNFX0lOVAorCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgI0lOVFJDX1NUQVRdCisJCWxkcglcdG1wLAkgIFtcYmFzZSwgI0lOVFJDX1RZUEVdCisvKiBhbmQgd2l0aCBpbnZlcnRlZCBtYXNrIDogbG93IHByaW9yaXR5IGludGVycnVwdHMgICovCisJCWJpYwlcaXJxc3RhdCxcaXJxc3RhdCxcdG1wCisKKzEwMDQ6CisKKwkJY21wCVxpcnFzdGF0LCMxPDwxNgorCQlhZGRocwlcaXJxbnIsXGlycW5yLCMxNgorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjMTYKKwkJY21wCVxpcnFzdGF0LCMxPDw4CisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzgKKwkJbW92aHMJXGlycXN0YXQsXGlycXN0YXQsbHNyIzgKKwkJY21wCVxpcnFzdGF0LCMxPDw0CisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzQKKwkJbW92aHMJXGlycXN0YXQsXGlycXN0YXQsbHNyIzQKKwkJY21wCVxpcnFzdGF0LCMxPDwyCisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzIKKwkJbW92aHMJXGlycXN0YXQsXGlycXN0YXQsbHNyIzIKKwkJY21wCVxpcnFzdGF0LCMxPDwxCisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzEKKworCisvKiBpcyBpcnFzdGF0IG5vdCB6ZXJvICovCisKKzEwMDI6CisvKiB3ZSBhc3NlcnQgdGhhdCBpcnFzdGF0IGlzIG5vdCBlcXVhbCB0byB6ZXJvIGFuZCByZXR1cm4gbmUgc3RhdHVzIGlmIHRydWUqLworCQl0ZXEJXGlycXN0YXQsIzAKKzEwMDM6CisJCS5lbmRtCisKKworCQkubWFjcm8JaXJxX3ByaW9fdGFibGUKKwkJLmVuZG0KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2dwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTVhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2dwaW8uaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZ3Bpby5oCisgKgorICogUE5YNDAwOCBHUElPIGRyaXZlciAtIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yOiBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIEJhc2VkIG9uIHJlZmVyZW5jZSBjb2RlIGJ5IEl3byBNZXJnbGVyIGFuZCBaLlRhYmFhbG91dGUgZnJvbSBQaGlsaXBzOgorICogQ29weXJpZ2h0IChjKSAyMDA1IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTi5WLgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfUE5YNDAwOF9HUElPX0hfCisjZGVmaW5lIF9QTlg0MDA4X0dQSU9fSF8KKworCisvKiBCbG9jayBudW1iZXJzICovCisjZGVmaW5lIEdQSU9fSU4JCSgwKQorI2RlZmluZSBHUElPX09VVAkJKDB4MTAwKQorI2RlZmluZSBHUElPX0JJRAkJKDB4MjAwKQorI2RlZmluZSBHUElPX1JBTQkJKDB4MzAwKQorI2RlZmluZSBHUElPX01VWAkJKDB4NDAwKQorCisjZGVmaW5lIEdQSU9fVFlQRV9NQVNLKEspICgoSykgJiAweDcwMCkKKworLyogSU5QVVQgR1BJT3MgKi8KKy8qIEdQSSAqLworI2RlZmluZSBHUElfMDAJCShHUElPX0lOIHwgMCkKKyNkZWZpbmUgR1BJXzAxCQkoR1BJT19JTiB8IDEpCisjZGVmaW5lIEdQSV8wMiAgIAkoR1BJT19JTiB8IDIpCisjZGVmaW5lIEdQSV8wMyAJIAkoR1BJT19JTiB8IDMpCisjZGVmaW5lIEdQSV8wNCAgIAkoR1BJT19JTiB8IDQpCisjZGVmaW5lIEdQSV8wNSAgIAkoR1BJT19JTiB8IDUpCisjZGVmaW5lIEdQSV8wNiAgIAkoR1BJT19JTiB8IDYpCisjZGVmaW5lIEdQSV8wNyAgIAkoR1BJT19JTiB8IDcpCisjZGVmaW5lIEdQSV8wOCAgIAkoR1BJT19JTiB8IDgpCisjZGVmaW5lIEdQSV8wOSAgIAkoR1BJT19JTiB8IDkpCisjZGVmaW5lIFUxX1JYIAkJKEdQSU9fSU4gfCAxNSkKKyNkZWZpbmUgVTJfSFRDUyAJKEdQSU9fSU4gfCAxNikKKyNkZWZpbmUgVTJfUlgJIAkoR1BJT19JTiB8IDE3KQorI2RlZmluZSBVM19SWAkJKEdQSU9fSU4gfCAxOCkKKyNkZWZpbmUgVTRfUlgJCShHUElPX0lOIHwgMTkpCisjZGVmaW5lIFU1X1JYCQkoR1BJT19JTiB8IDIwKQorI2RlZmluZSBVNl9JUlJYIAkoR1BJT19JTiB8IDIxKQorI2RlZmluZSBVN19IQ1RTIAkoR1BJT19JTiB8IDIyKQorI2RlZmluZSBVN19SWAkJKEdQSU9fSU4gfCAyMykKKy8qIE1JU0MgSU4gKi8KKyNkZWZpbmUgU1BJMV9EQVRJTgkoR1BJT19JTiB8IDI1KQorI2RlZmluZSBESVNQX1NZTkMJKEdQSU9fSU4gfCAyNikKKyNkZWZpbmUgU1BJMl9EQVRJTgkoR1BJT19JTiB8IDI3KQorI2RlZmluZSBHUElfMTEgIAkoR1BJT19JTiB8IDI4KQorCisjZGVmaW5lIEdQSU9fSU5fTUFTSyAgIDB4MWVmZjgzZmYKKworLyogT1VUUFVUIEdQSU9zICovCisvKiBHUE8gKi8KKyNkZWZpbmUgR1BPXzAwCQkoR1BJT19PVVQgfCAwKQorI2RlZmluZSBHUE9fMDEgICAJKEdQSU9fT1VUIHwgMSkKKyNkZWZpbmUgR1BPXzAyICAgCShHUElPX09VVCB8IDIpCisjZGVmaW5lIEdQT18wMyAJIAkoR1BJT19PVVQgfCAzKQorI2RlZmluZSBHUE9fMDQgICAJKEdQSU9fT1VUIHwgNCkKKyNkZWZpbmUgR1BPXzA1ICAgCShHUElPX09VVCB8IDUpCisjZGVmaW5lIEdQT18wNiAgIAkoR1BJT19PVVQgfCA2KQorI2RlZmluZSBHUE9fMDcgICAJKEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgR1BPXzA4CQkoR1BJT19PVVQgfCA4KQorI2RlZmluZSBHUE9fMDkgICAJKEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgR1BPXzEwICAgCShHUElPX09VVCB8IDEwKQorI2RlZmluZSBHUE9fMTEgCSAJKEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIEdQT18xMiAgIAkoR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgR1BPXzEzICAgCShHUElPX09VVCB8IDEzKQorI2RlZmluZSBHUE9fMTQgICAJKEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIEdQT18xNSAgIAkoR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgR1BPXzE2ICAJKEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIEdQT18xNyAJIAkoR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgR1BPXzE4ICAgCShHUElPX09VVCB8IDE4KQorI2RlZmluZSBHUE9fMTkgICAJKEdQSU9fT1VUIHwgMTkpCisjZGVmaW5lIEdQT18yMCAgIAkoR1BJT19PVVQgfCAyMCkKKyNkZWZpbmUgR1BPXzIxICAgCShHUElPX09VVCB8IDIxKQorI2RlZmluZSBHUE9fMjIgICAJKEdQSU9fT1VUIHwgMjIpCisjZGVmaW5lIEdQT18yMyAgIAkoR1BJT19PVVQgfCAyMykKKworI2RlZmluZSBHUElPX09VVF9NQVNLICAgMHhmZmZmZmYKKworLyogQklESVJFQ1RJT05BTCBHUElPcyAqLworLyogUkFNIHBpbnMgKi8KKyNkZWZpbmUgUkFNX0QxOQkJKEdQSU9fUkFNIHwgMCkKKyNkZWZpbmUgUkFNX0QyMCAgCShHUElPX1JBTSB8IDEpCisjZGVmaW5lIFJBTV9EMjEgIAkoR1BJT19SQU0gfCAyKQorI2RlZmluZSBSQU1fRDIyIAkoR1BJT19SQU0gfCAzKQorI2RlZmluZSBSQU1fRDIzICAJKEdQSU9fUkFNIHwgNCkKKyNkZWZpbmUgUkFNX0QyNCAgCShHUElPX1JBTSB8IDUpCisjZGVmaW5lIFJBTV9EMjUgIAkoR1BJT19SQU0gfCA2KQorI2RlZmluZSBSQU1fRDI2ICAJKEdQSU9fUkFNIHwgNykKKyNkZWZpbmUgUkFNX0QyNwkJKEdQSU9fUkFNIHwgOCkKKyNkZWZpbmUgUkFNX0QyOCAgCShHUElPX1JBTSB8IDkpCisjZGVmaW5lIFJBTV9EMjkgIAkoR1BJT19SQU0gfCAxMCkKKyNkZWZpbmUgUkFNX0QzMCAJKEdQSU9fUkFNIHwgMTEpCisjZGVmaW5lIFJBTV9EMzEgIAkoR1BJT19SQU0gfCAxMikKKworI2RlZmluZSBHUElPX1JBTV9NQVNLICAgMHgxZmZmCisKKy8qIEkvTyBwaW5zICovCisjZGVmaW5lIEdQSU9fMDAgIAkoR1BJT19CSUQgfCAyNSkKKyNkZWZpbmUgR1BJT18wMSAJKEdQSU9fQklEIHwgMjYpCisjZGVmaW5lIEdQSU9fMDIgIAkoR1BJT19CSUQgfCAyNykKKyNkZWZpbmUgR1BJT18wMyAgCShHUElPX0JJRCB8IDI4KQorI2RlZmluZSBHUElPXzA0IAkoR1BJT19CSUQgfCAyOSkKKyNkZWZpbmUgR1BJT18wNSAgCShHUElPX0JJRCB8IDMwKQorCisjZGVmaW5lIEdQSU9fQklEX01BU0sgICAweDdlMDAwMDAwCisKKy8qIE5vbi1HUElPIG11bHRpcGxleGVkIFBJT3MuIEZvciBtdWx0aXBsZXhpbmcgd2l0aCBHUElPLCBwbGVhc2UgdXNlIEdQSU8gbWFjcm9zICovCisjZGVmaW5lIEdQSU9fU0RSQU1fU0VMIAkoR1BJT19NVVggfCAzKQorCisjZGVmaW5lIEdQSU9fTVVYX01BU0sgICAweDgKKworLyogRXh0cmFjdGlvbi9hc3NlbWJseSBtYWNyb3MgKi8KKyNkZWZpbmUgR1BJT19CSVRfTUFTSyhLKSAoKEspICYgMHgxRikKKyNkZWZpbmUgR1BJT19CSVQoSykgKDEgPDwgR1BJT19CSVRfTUFTSyhLKSkKKyNkZWZpbmUgR1BJT19JU01VWChLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fTVVYKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX01VWF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU1JBTShLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fUkFNKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX1JBTV9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU0JJRChLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fQklEKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX0JJRF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU09VVChLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fT1VUKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX09VVF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU0lOKEspICAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fSU4pICYmIChHUElPX0JJVChLKSAmIEdQSU9fSU5fTUFTSykpCisKK2V4dGVybiBpbnQgcG54NDAwOF9ncGlvX3JlZ2lzdGVyX3Bpbih1bnNpZ25lZCBzaG9ydCBwaW4pOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fdW5yZWdpc3Rlcl9waW4odW5zaWduZWQgc2hvcnQgcGluKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBueDQwMDhfZ3Bpb19yZWFkX3Bpbih1bnNpZ25lZCBzaG9ydCBwaW4pOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fd3JpdGVfcGluKHVuc2lnbmVkIHNob3J0IHBpbiwgaW50IG91dHB1dCk7CitleHRlcm4gaW50IHBueDQwMDhfZ3Bpb19zZXRfcGluX2RpcmVjdGlvbih1bnNpZ25lZCBzaG9ydCBwaW4sIGludCBvdXRwdXQpOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fcmVhZF9waW5fZGlyZWN0aW9uKHVuc2lnbmVkIHNob3J0IHBpbik7CitleHRlcm4gaW50IHBueDQwMDhfZ3Bpb19zZXRfcGluX211eCh1bnNpZ25lZCBzaG9ydCBwaW4sIGludCBvdXRwdXQpOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fcmVhZF9waW5fbXV4KHVuc2lnbmVkIHNob3J0IHBpbik7CisKKyNlbmRpZgkJCQkvKiBfUE5YNDAwOF9HUElPX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0MTAzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaGFyZHdhcmUuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgorCisvKiBTdGFydCBvZiB2aXJ0dWFsIGFkZHJlc3NlcyBmb3IgSU8gZGV2aWNlcyAqLworI2RlZmluZSBJT19CQVNFICAgICAgICAgMHhGMDAwMDAwMAorCisvKiBUaGlzIG1hY3JvIHJlbGllcyBvbiBmYWN0IHRoYXQgZm9yIGFsbCBIVyBpL28gYWRkcmVzc2VzIGJpdHMgMjAtMjMgYXJlIDAgKi8KKyNkZWZpbmUgSU9fQUREUkVTUyh4KSAgKCgoKCh4KSAmIDB4ZmYwMDAwMDApID4+IDQpIHwgKCh4KSAmIDB4ZmZmZmYpKSB8IElPX0JBU0UpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZWU0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lvLmgKQEAgLTAsMCArMSwyMSBAQAorCisvKgorICogIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaW8uaAorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxjaGlnaXJldkBydS5tdmlzdGEuY29tPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKyNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYmZmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycS5oCisgKgorICogUE5YNDAwOCBJUlEgY29udHJvbGxlciBkcml2ZXIgLSBoZWFkZXIgZmlsZQorICogdGhpcyBvbmUgaXMgdXNlZCBpbiBlbnRyeS1hcm52LlMgYXMgd2VsbCBzbyBpdCBjYW5ub3QgY29udGFpbiBDIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICogQ29weXJpZ2h0IChjKSAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX1BOWDQwMDhfSVJRX0hfXworI2RlZmluZSBfX1BOWDQwMDhfSVJRX0hfXworCisjZGVmaW5lIE1JQ19WQV9CQVNFICAgICAgICAgICAgIElPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UpCisjZGVmaW5lIFNJQzFfVkFfQkFTRSAgICAgICAgICAgIElPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMU0lDMV9CQVNFKQorI2RlZmluZSBTSUMyX1ZBX0JBU0UgICAgICAgICAgICBJT19BRERSRVNTKFBOWDQwMDhfSU5UQ1RSTFNJQzJfQkFTRSkKKworLyogTWFudWFsOiBDaGFwdGVyIDIwLCBwYWdlIDE5NSAqLworCisjZGVmaW5lIElOVENfQklUKGlycSkgKDE8PCAoKGlycSkgJiAweDFGKSkKKworI2RlZmluZSBJTlRDX0VSKGlycSkgICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDAgKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX1JTUihpcnEpICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDQgKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX1NSKGlycSkgICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDggKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX0FQUihpcnEpICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweEMgKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX0FUUihpcnEpICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDEwICsgKCgoaXJxKSYoMHgzPDw1KSk8PDkpKSkKKyNkZWZpbmUgSU5UQ19JVFIoaXJxKSAgIElPX0FERFJFU1MoKFBOWDQwMDhfSU5UQ1RSTE1JQ19CQVNFICsgMHgxNCArICgoKGlycSkmKDB4Mzw8NSkpPDw5KSkpCisKKyNkZWZpbmUgU1RBUlRfSU5UX1JFR19CSVQoaXJxKSAoMTw8KChpcnEpJjB4MUYpKQorCisjZGVmaW5lIFNUQVJUX0lOVF9FUl9SRUcoaXJxKSAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9QV1JNQU5fQkFTRSArIDB4MjAgKyAoKChpcnEpJigweDE8PDUpKT4+MSkpKQorI2RlZmluZSBTVEFSVF9JTlRfUlNSX1JFRyhpcnEpICAgIElPX0FERFJFU1MoKFBOWDQwMDhfUFdSTUFOX0JBU0UgKyAweDI0ICsgKCgoaXJxKSYoMHgxPDw1KSk+PjEpKSkKKyNkZWZpbmUgU1RBUlRfSU5UX1NSX1JFRyhpcnEpICAgICBJT19BRERSRVNTKChQTlg0MDA4X1BXUk1BTl9CQVNFICsgMHgyOCArICgoKGlycSkmKDB4MTw8NSkpPj4xKSkpCisjZGVmaW5lIFNUQVJUX0lOVF9BUFJfUkVHKGlycSkgICAgSU9fQUREUkVTUygoUE5YNDAwOF9QV1JNQU5fQkFTRSArIDB4MkMgKyAoKChpcnEpJigweDE8PDUpKT4+MSkpKQorCitleHRlcm4gdm9pZCBfX2luaXQgcG54NDAwOF9pbml0X2lycSh2b2lkKTsKKworI2VuZGlmIC8qIF9fUE5YNDAwOF9JUlFfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZWM3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycXMuaApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaXJxcy5oCisgKgorICogUE5YNDAwOCBJUlEgY29udHJvbGxlciBkcml2ZXIgLSBoZWFkZXIgZmlsZQorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIF9fUE5YNDAwOF9JUlFTX2hfXworI2RlZmluZSBfX1BOWDQwMDhfSVJRU19oX18KKworI2RlZmluZSBOUl9JUlFTICAgICAgICAgOTYKKworLypNYW51YWw6IHRhYmxlIDI1OSwgcGFnZSAxOTkqLworCisvKlNVQjIgSW50ZXJydXB0IFJvdXRpbmcgKFNJQzIpKi8KKworI2RlZmluZSBTSUMyX0JBU0VfSU5UICAgNjQKKworI2RlZmluZSBDTEtfU1dJVENIX0FSTV9JTlQgOTUJLyptYW51YWw6IENsa3N3aXRjaCBBUk0gICovCisjZGVmaW5lIENMS19TV0lUQ0hfRFNQX0lOVCA5NAkvKm1hbnVhbDogQ2xrU3dpdGNoIERTUCAgKi8KKyNkZWZpbmUgQ0xLX1NXSVRDSF9BVURfSU5UIDkzCS8qbWFudWFsOiBDbGtzd2l0Y2ggQVVEICAqLworI2RlZmluZSBHUElfMDZfSU5UICAgICAgICAgOTIKKyNkZWZpbmUgR1BJXzA1X0lOVCAgICAgICAgIDkxCisjZGVmaW5lIEdQSV8wNF9JTlQgICAgICAgICA5MAorI2RlZmluZSBHUElfMDNfSU5UICAgICAgICAgODkKKyNkZWZpbmUgR1BJXzAyX0lOVCAgICAgICAgIDg4CisjZGVmaW5lIEdQSV8wMV9JTlQgICAgICAgICA4NworI2RlZmluZSBHUElfMDBfSU5UICAgICAgICAgODYKKyNkZWZpbmUgQlRfQ0xLUkVRX0lOVCAgICAgIDg1CisjZGVmaW5lIFNQSTFfREFUSU5fSU5UICAgICA4NAorI2RlZmluZSBVNV9SWF9JTlQgICAgICAgICAgODMKKyNkZWZpbmUgU0RJT19JTlRfTiAgICAgICAgIDgyCisjZGVmaW5lIENBTV9IU19JTlQgICAgICAgICA4MQorI2RlZmluZSBDQU1fVlNfSU5UICAgICAgICAgODAKKyNkZWZpbmUgR1BJXzA3X0lOVCAgICAgICAgIDc5CisjZGVmaW5lIERJU1BfU1lOQ19JTlQgICAgICA3OAorI2RlZmluZSBEU1BfSU5UOCAgICAgICAgICAgNzcKKyNkZWZpbmUgVTdfSENUU19JTlQgICAgICAgIDc2CisjZGVmaW5lIEdQSV8xMF9JTlQgICAgICAgICA3NQorI2RlZmluZSBHUElfMDlfSU5UICAgICAgICAgNzQKKyNkZWZpbmUgR1BJXzA4X0lOVCAgICAgICAgIDczCisjZGVmaW5lIERTUF9JTlQ3ICAgICAgICAgICA3MgorI2RlZmluZSBVMl9IQ1RTX0lOVCAgICAgICAgNzEKKyNkZWZpbmUgU1BJMl9EQVRJTl9JTlQgICAgIDcwCisjZGVmaW5lIEdQSU9fMDVfSU5UICAgICAgICA2OQorI2RlZmluZSBHUElPXzA0X0lOVCAgICAgICAgNjgKKyNkZWZpbmUgR1BJT18wM19JTlQgICAgICAgIDY3CisjZGVmaW5lIEdQSU9fMDJfSU5UICAgICAgICA2NgorI2RlZmluZSBHUElPXzAxX0lOVCAgICAgICAgNjUKKyNkZWZpbmUgR1BJT18wMF9JTlQgICAgICAgIDY0CisKKy8qTWFudWFsOiB0YWJsZSAyNTgsIHBhZ2UgMTk4Ki8KKworLypTVUIxIEludGVycnVwdCBSb3V0aW5nIChTSUMxKSovCisKKyNkZWZpbmUgU0lDMV9CQVNFX0lOVCAgIDMyCisKKyNkZWZpbmUgVVNCX0kyQ19JTlQgICAgICAgIDYzCisjZGVmaW5lIFVTQl9ERVZfSFBfSU5UICAgICA2MgorI2RlZmluZSBVU0JfREVWX0xQX0lOVCAgICAgNjEKKyNkZWZpbmUgVVNCX0RFVl9ETUFfSU5UICAgIDYwCisjZGVmaW5lIFVTQl9IT1NUX0lOVCAgICAgICA1OQorI2RlZmluZSBVU0JfT1RHX0FUWF9JTlRfTiAgNTgKKyNkZWZpbmUgVVNCX09UR19USU1FUl9JTlQgIDU3CisjZGVmaW5lIFNXX0lOVCAgICAgICAgICAgICA1NgorI2RlZmluZSBTUEkxX0lOVCAgICAgICAgICAgNTUKKyNkZWZpbmUgS0VZX0lSUSAgICAgICAgICAgIDU0CisjZGVmaW5lIERTUF9NX0lOVCAgICAgICAgICA1MworI2RlZmluZSBSVENfSU5UICAgICAgICAgICAgNTIKKyNkZWZpbmUgSTJDXzFfSU5UICAgICAgICAgIDUxCisjZGVmaW5lIEkyQ18yX0lOVCAgICAgICAgICA1MAorI2RlZmluZSBQTEwxX0xPQ0tfSU5UICAgICAgNDkKKyNkZWZpbmUgUExMMl9MT0NLX0lOVCAgICAgIDQ4CisjZGVmaW5lIFBMTDNfTE9DS19JTlQgICAgICA0NworI2RlZmluZSBQTEw0X0xPQ0tfSU5UICAgICAgNDYKKyNkZWZpbmUgUExMNV9MT0NLX0lOVCAgICAgIDQ1CisjZGVmaW5lIFNQSTJfSU5UICAgICAgICAgICA0NAorI2RlZmluZSBEU1BfSU5UMSAgICAgICAgICAgNDMKKyNkZWZpbmUgRFNQX0lOVDIgICAgICAgICAgIDQyCisjZGVmaW5lIERTUF9URE1fSU5UMiAgICAgICA0MQorI2RlZmluZSBUU19BVVhfSU5UICAgICAgICAgNDAKKyNkZWZpbmUgVFNfSVJRICAgICAgICAgICAgIDM5CisjZGVmaW5lIFRTX1BfSU5UICAgICAgICAgICAzOAorI2RlZmluZSBVT1VUMV9UT19QQURfSU5UICAgMzcKKyNkZWZpbmUgR1BJXzExX0lOVCAgICAgICAgIDM2CisjZGVmaW5lIERTUF9JTlQ0ICAgICAgICAgICAzNQorI2RlZmluZSBKVEFHX0NPTU1fUlhfSU5UICAgMzQKKyNkZWZpbmUgSlRBR19DT01NX1RYX0lOVCAgIDMzCisjZGVmaW5lIERTUF9JTlQzICAgICAgICAgICAzMgorCisvKk1hbnVhbDogdGFibGUgMjU3LCBwYWdlIDE5NyovCisKKy8qTUFJTiBJbnRlcnJ1cHQgUm91dGluZyovCisKKyNkZWZpbmUgTUFJTl9CQVNFX0lOVCAgIDAKKworI2RlZmluZSBTVUIyX0ZJUV9OICAgICAgICAgMzEJLyphY3RpdmUgbG93ICovCisjZGVmaW5lIFNVQjFfRklRX04gICAgICAgICAzMAkvKmFjdGl2ZSBsb3cgKi8KKyNkZWZpbmUgSlBFR19JTlQgICAgICAgICAgIDI5CisjZGVmaW5lIERNQV9JTlQgICAgICAgICAgICAyOAorI2RlZmluZSBNU1RJTUVSX0lOVCAgICAgICAgMjcKKyNkZWZpbmUgSUlSMV9JTlQgICAgICAgICAgIDI2CisjZGVmaW5lIElJUjJfSU5UICAgICAgICAgICAyNQorI2RlZmluZSBJSVI3X0lOVCAgICAgICAgICAgMjQKKyNkZWZpbmUgRFNQX1RETV9JTlQwICAgICAgIDIzCisjZGVmaW5lIERTUF9URE1fSU5UMSAgICAgICAyMgorI2RlZmluZSBEU1BfUF9JTlQgICAgICAgICAgMjEKKyNkZWZpbmUgRFNQX0lOVDAgICAgICAgICAgIDIwCisjZGVmaW5lIERVTV9JTlQgICAgICAgICAgICAxOQorI2RlZmluZSBVT1VUMF9UT19QQURfSU5UICAgMTgKKyNkZWZpbmUgTVA0X0VOQ19JTlQgICAgICAgIDE3CisjZGVmaW5lIE1QNF9ERUNfSU5UICAgICAgICAxNgorI2RlZmluZSBTRDBfSU5UICAgICAgICAgICAgMTUKKyNkZWZpbmUgTUJYX0lOVCAgICAgICAgICAgIDE0CisjZGVmaW5lIFNEMV9JTlQgICAgICAgICAgICAxMworI2RlZmluZSBNU19JTlRfTiAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfSU5UICAgICAgICAgIDExIC8qTkFORCovCisjZGVmaW5lIElJUjZfSU5UICAgICAgICAgICAxMAorI2RlZmluZSBJSVI1X0lOVCAgICAgICAgICAgOQorI2RlZmluZSBJSVI0X0lOVCAgICAgICAgICAgOAorI2RlZmluZSBJSVIzX0lOVCAgICAgICAgICAgNworI2RlZmluZSBXQVRDSF9JTlQgICAgICAgICAgNgorI2RlZmluZSBIU1RJTUVSX0lOVCAgICAgICAgNQorI2RlZmluZSBBUkNIX1RJTUVSX0lSUSAgICAgSFNUSU1FUl9JTlQKKyNkZWZpbmUgQ0FNX0lOVCAgICAgICAgICAgIDQKKyNkZWZpbmUgUFJOR19JTlQgICAgICAgICAgIDMKKyNkZWZpbmUgQ1JZUFRPX0lOVCAgICAgICAgIDIKKyNkZWZpbmUgU1VCMl9JUlFfTiAgICAgICAgIDEJLyphY3RpdmUgbG93ICovCisjZGVmaW5lIFNVQjFfSVJRX04gICAgICAgICAwCS8qYWN0aXZlIGxvdyAqLworCisjZGVmaW5lIFBOWDQwMDhfSVJRX1RZUEVTIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypJUlEgIydzOiAqLyAgICAgICAgIFwKK0lSUVRfTE9XLCAgSVJRVF9MT1csICBJUlFUX0xPVywgIElSUVRfSElHSCwgLyogIDAsIDEsIDIsIDMgKi8gICAgIFwKK0lSUVRfTE9XLCAgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogIDQsIDUsIDYsIDcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogIDgsIDksMTAsMTEgKi8gICAgIFwKK0lSUVRfTE9XLCAgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMTIsMTMsMTQsMTUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMTYsMTcsMTgsMTkgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMjAsMjEsMjIsMjMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMjQsMjUsMjYsMjcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0xPVywgIElSUVRfTE9XLCAgLyogMjgsMjksMzAsMzEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9MT1csICBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMzIsMzMsMzQsMzUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0ZBTExJTkcsIElSUVRfSElHSCwgLyogMzYsMzcsMzgsMzkgKi8gIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNDAsNDEsNDIsNDMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNDQsNDUsNDYsNDcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0xPVywgIElSUVRfTE9XLCAgLyogNDgsNDksNTAsNTEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNTIsNTMsNTQsNTUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0xPVywgIElSUVRfSElHSCwgLyogNTYsNTcsNTgsNTkgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNjAsNjEsNjIsNjMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNjQsNjUsNjYsNjcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNjgsNjksNzAsNzEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNzIsNzMsNzQsNzUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNzYsNzcsNzgsNzkgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogODAsODEsODIsODMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogODQsODUsODYsODcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogODgsODksOTAsOTEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogOTIsOTMsOTQsOTUgKi8gICAgIFwKK30KKworLyogU3RhcnQgRW5hYmxlIFBpbiBJbnRlcnJ1cHRzIC0gdGFibGUgNTggcGFnZSA2NiAqLworCisjZGVmaW5lIFNFX1BJTl9CQVNFX0lOVCAgIDMyCisKKyNkZWZpbmUgU0VfVTdfUlhfSU5UICAgICAgICAgICAgNjMKKyNkZWZpbmUgU0VfVTdfSENUU19JTlQgICAgICAgICAgNjIKKyNkZWZpbmUgU0VfQlRfQ0xLUkVRX0lOVCAgICAgICAgNjEKKyNkZWZpbmUgU0VfVTZfSVJSWF9JTlQgICAgICAgICAgNjAKKy8qNTkgdW51c2VkKi8KKyNkZWZpbmUgU0VfVTVfUlhfSU5UICAgICAgICAgICAgNTgKKyNkZWZpbmUgU0VfR1BJXzExX0lOVCAgICAgICAgICAgNTcKKyNkZWZpbmUgU0VfVTNfUlhfSU5UICAgICAgICAgICAgNTYKKyNkZWZpbmUgU0VfVTJfSENUU19JTlQgICAgICAgICAgNTUKKyNkZWZpbmUgU0VfVTJfUlhfSU5UICAgICAgICAgICAgNTQKKyNkZWZpbmUgU0VfVTFfUlhfSU5UICAgICAgICAgICAgNTMKKyNkZWZpbmUgU0VfRElTUF9TWU5DX0lOVCAgICAgICAgNTIKKy8qNTEgdW51c2VkKi8KKyNkZWZpbmUgU0VfU0RJT19JTlRfTiAgICAgICAgICAgNTAKKyNkZWZpbmUgU0VfTVNESU9fU1RBUlRfSU5UICAgICAgNDkKKyNkZWZpbmUgU0VfR1BJXzA2X0lOVCAgICAgICAgICAgNDgKKyNkZWZpbmUgU0VfR1BJXzA1X0lOVCAgICAgICAgICAgNDcKKyNkZWZpbmUgU0VfR1BJXzA0X0lOVCAgICAgICAgICAgNDYKKyNkZWZpbmUgU0VfR1BJXzAzX0lOVCAgICAgICAgICAgNDUKKyNkZWZpbmUgU0VfR1BJXzAyX0lOVCAgICAgICAgICAgNDQKKyNkZWZpbmUgU0VfR1BJXzAxX0lOVCAgICAgICAgICAgNDMKKyNkZWZpbmUgU0VfR1BJXzAwX0lOVCAgICAgICAgICAgNDIKKyNkZWZpbmUgU0VfU1lTQ0xLRU5fUElOX0lOVCAgICAgNDEKKyNkZWZpbmUgU0VfU1BJMV9EQVRBSU5fSU5UICAgICAgNDAKKyNkZWZpbmUgU0VfR1BJXzA3X0lOVCAgICAgICAgICAgMzkKKyNkZWZpbmUgU0VfU1BJMl9EQVRBSU5fSU5UICAgICAgMzgKKyNkZWZpbmUgU0VfR1BJXzEwX0lOVCAgICAgICAgICAgMzcKKyNkZWZpbmUgU0VfR1BJXzA5X0lOVCAgICAgICAgICAgMzYKKyNkZWZpbmUgU0VfR1BJXzA4X0lOVCAgICAgICAgICAgMzUKKy8qMzQtMzIgdW51c2VkKi8KKworLyogU3RhcnQgRW5hYmxlIEludGVybmFsIEludGVycnVwdHMgLSB0YWJsZSA1NyBwYWdlIDY1ICovCisKKyNkZWZpbmUgU0VfSU5UX0JBU0VfSU5UICAgMAorCisjZGVmaW5lIFNFX1RTX0lSUSAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIFNFX1RTX1BfSU5UICAgICAgICAgICAgIDMwCisjZGVmaW5lIFNFX1RTX0FVWF9JTlQgICAgICAgICAgIDI5CisvKjI3LTI4IHVudXNlZCovCisjZGVmaW5lIFNFX1VTQl9BSEJfTkVFRF9DTEtfSU5UIDI2CisjZGVmaW5lIFNFX01TVElNRVJfSU5UICAgICAgICAgIDI1CisjZGVmaW5lIFNFX1JUQ19JTlQgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFNFX1VTQl9ORUVEX0NMS19JTlQgICAgIDIzCisjZGVmaW5lIFNFX1VTQl9JTlQgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFNFX1VTQl9JMkNfSU5UICAgICAgICAgIDIxCisjZGVmaW5lIFNFX1VTQl9PVEdfVElNRVJfSU5UICAgIDIwCisKKyNlbmRpZiAvKiBfX1BOWDQwMDhfSVJRU19oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODI2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L21lbW9yeS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L21lbW9yeS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMKKyAqIENvcHlyaWdodCAoYykgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUICAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpICgoeCkgLSBQQUdFX09GRlNFVCArIFBIWVNfT0ZGU0VUKQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpICgoeCkgKyBQQUdFX09GRlNFVCAtIFBIWVNfT0ZGU0VUKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWQ1ZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wYXJhbS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wYXJhbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIEhaIDEwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWEzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3BsYXRmb3JtLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcGxhdGZyb20uaAorICoKKyAqIFBOWDQwMDggQmFzZSBhZGRyZXNzZXMgLSBoZWFkZXIgZmlsZQorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiBCYXNlZCBvbiByZWZlcmVuY2UgY29kZSByZWNlaXZlZCBmcm9tIFBoaWxpcHM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUExBVEZPUk1fSF9fCisjZGVmaW5lIF9fQVNNX0FSQ0hfUExBVEZPUk1fSF9fCisKKyNkZWZpbmUgUE5YNDAwOF9JUkFNX0JBU0UJCTB4MDgwMDAwMDAKKyNkZWZpbmUgUE5YNDAwOF9JUkFNX1NJWkUJCTB4MDAwMTAwMDAKKyNkZWZpbmUgUE5YNDAwOF9ZVVZfU0xBVkVfQkFTRQkJMHgxMDAwMDAwMAorI2RlZmluZSBQTlg0MDA4X0RVTV9TTEFWRV9CQVNFCQkweDE4MDAwMDAwCisjZGVmaW5lIFBOWDQwMDhfTkRGX0ZMQVNIX0JBU0UJCTB4MjAwMjAwMDAKKyNkZWZpbmUgUE5YNDAwOF9TUEkxX0JBU0UJCTB4MjAwODgwMDAKKyNkZWZpbmUgUE5YNDAwOF9TUEkyX0JBU0UJCTB4MjAwOTAwMDAKKyNkZWZpbmUgUE5YNDAwOF9TRF9DT05GSUdfQkFTRQkJMHgyMDA5ODAwMAorI2RlZmluZSBQTlg0MDA4X0ZMQVNIX0RBVEEJCTB4MjAwQjAwMDAKKyNkZWZpbmUgUE5YNDAwOF9NTENfRkxBU0hfQkFTRQkJMHgyMDBCODAwMAorI2RlZmluZSBQTlg0MDA4X0pQRUdfQ09ORklHX0JBU0UJMHgzMDBBMDAwMAorI2RlZmluZSBQTlg0MDA4X0RNQV9DT05GSUdfQkFTRQkJMHgzMTAwMDAwMAorI2RlZmluZSBQTlg0MDA4X1VTQl9DT05GSUdfQkFTRQkJMHgzMTAyMDAwMAorI2RlZmluZSBQTlg0MDA4X1NEUkFNX0NGR19CQVNFCQkweDMxMDgwMDAwCisjZGVmaW5lIFBOWDQwMDhfQUhCMkZBQl9CQVNFCQkweDQwMDAwMDAwCisjZGVmaW5lIFBOWDQwMDhfUFdSTUFOX0JBU0UJCTB4NDAwMDQwMDAKKyNkZWZpbmUgUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UJCTB4NDAwMDgwMDAKKyNkZWZpbmUgUE5YNDAwOF9JTlRDVFJMU0lDMV9CQVNFCTB4NDAwMEMwMDAKKyNkZWZpbmUgUE5YNDAwOF9JTlRDVFJMU0lDMl9CQVNFCTB4NDAwMTAwMDAKKyNkZWZpbmUgUE5YNDAwOF9IU1VBUlQxX0JBU0UJCTB4NDAwMTQwMDAKKyNkZWZpbmUgUE5YNDAwOF9IU1VBUlQyX0JBU0UJCTB4NDAwMTgwMDAKKyNkZWZpbmUgUE5YNDAwOF9IU1VBUlQ3X0JBU0UJCTB4NDAwMUMwMDAKKyNkZWZpbmUgUE5YNDAwOF9SVENfQkFTRQkJMHg0MDAyNDAwMAorI2RlZmluZSBQTlg0MDA4X1BJT19CQVNFCQkweDQwMDI4MDAwCisjZGVmaW5lIFBOWDQwMDhfTVNUSU1FUl9CQVNFCQkweDQwMDM0MDAwCisjZGVmaW5lIFBOWDQwMDhfSFNUSU1FUl9CQVNFCQkweDQwMDM4MDAwCisjZGVmaW5lIFBOWDQwMDhfV0RPR19CQVNFCQkweDQwMDNDMDAwCisjZGVmaW5lIFBOWDQwMDhfREVCVUdfQkFTRQkJMHg0MDA0MDAwMAorI2RlZmluZSBQTlg0MDA4X1RPVUNIMV9CQVNFCQkweDQwMDQ4MDAwCisjZGVmaW5lIFBOWDQwMDhfS0VZU0NBTl9CQVNFCQkweDQwMDUwMDAwCisjZGVmaW5lIFBOWDQwMDhfVUFSVENUUkxfQkFTRQkJMHg0MDA1NDAwMAorI2RlZmluZSBQTlg0MDA4X1BXTV9CQVNFCQkweDQwMDVDMDAwCisjZGVmaW5lIFBOWDQwMDhfVUFSVDNfQkFTRQkJMHg0MDA4MDAwMAorI2RlZmluZSBQTlg0MDA4X1VBUlQ0X0JBU0UJCTB4NDAwODgwMDAKKyNkZWZpbmUgUE5YNDAwOF9VQVJUNV9CQVNFCQkweDQwMDkwMDAwCisjZGVmaW5lIFBOWDQwMDhfVUFSVDZfQkFTRQkJMHg0MDA5ODAwMAorI2RlZmluZSBQTlg0MDA4X0kyQzFfQkFTRQkJMHg0MDBBMDAwMAorI2RlZmluZSBQTlg0MDA4X0kyQzJfQkFTRQkJMHg0MDBBODAwMAorI2RlZmluZSBQTlg0MDA4X01BR0lDR0FURV9CQVNFCQkweDQwMEIwMDAwCisjZGVmaW5lIFBOWDQwMDhfRFVNQ09ORl9CQVNFCQkweDQwMEI4MDAwCisjZGVmaW5lIFBOWDQwMDhfRFVNX01BSU5DRkdfQkFTRSAgICAgICAJMHg0MDBCQzAwMAorI2RlZmluZSBQTlg0MDA4X0RTUF9CQVNFCQkweDQwMEMwMDAwCisjZGVmaW5lIFBOWDQwMDhfUFJPRkNPVU5URVJfQkFTRQkweDQwMEM4MDAwCisjZGVmaW5lIFBOWDQwMDhfQ1JZUFRPX0JBU0UJCTB4NDAwRDAwMDAKKyNkZWZpbmUgUE5YNDAwOF9DQU1JRkNPTkZfQkFTRQkJMHg0MDBEODAwMAorI2RlZmluZSBQTlg0MDA4X1lVVjJSR0JfQkFTRQkJMHg0MDBFMDAwMAorI2RlZmluZSBQTlg0MDA4X0FVRElPQ09ORklHX0JBU0UJMHg0MDBFODAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcG0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjYwNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wbS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3BtLmgKKyAqCisgKiBQTlg0MDA4IFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXNzIC0gaGVhZGVyIGZpbGUKKyAqCisgKiBBdXRob3JzOiBWaXRhbHkgV29vbCwgRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9QTlg0MDA4X1BNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9QTlg0MDA4X1BNX0gKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisjaW5jbHVkZSAiaXJxLmgiCisjaW5jbHVkZSAiaXJxcy5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKK2V4dGVybiB2b2lkIHBueDQwMDhfcG1faWRsZSh2b2lkKTsKK2V4dGVybiB2b2lkIHBueDQwMDhfcG1fc3VzcGVuZCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcG54NDAwOF9jcHVfc3VzcGVuZF9zejsKK2V4dGVybiB2b2lkIHBueDQwMDhfY3B1X3N1c3BlbmQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IHBueDQwMDhfY3B1X3N0YW5kYnlfc3o7CitleHRlcm4gdm9pZCBwbng0MDA4X2NwdV9zdGFuZGJ5KHZvaWQpOworCitleHRlcm4gaW50IHBueDQwMDhfc3RhcnR1cF9wbGwoc3RydWN0IGNsayAqKTsKK2V4dGVybiBpbnQgcG54NDAwOF9zaHV0ZG93bl9wbGwoc3RydWN0IGNsayAqKTsKKworc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X2ludF91bWFzayh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNUQVJUX0lOVF9FUl9SRUcoaXJxKSkgfAorCQkgICAgIFNUQVJUX0lOVF9SRUdfQklUKGlycSksIFNUQVJUX0lOVF9FUl9SRUcoaXJxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9pbnRfbWFzayh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNUQVJUX0lOVF9FUl9SRUcoaXJxKSkgJgorCQkgICAgIH5TVEFSVF9JTlRfUkVHX0JJVChpcnEpLCBTVEFSVF9JTlRfRVJfUkVHKGlycSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaW50X2Fjayh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKFNUQVJUX0lOVF9SRUdfQklUKGlycSksIFNUQVJUX0lOVF9SU1JfUkVHKGlycSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaW50X3NldF9mYWxsaW5nX2VkZ2UodTggaXJxKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTVEFSVF9JTlRfQVBSX1JFRyhpcnEpKSAmCisJCSAgICAgflNUQVJUX0lOVF9SRUdfQklUKGlycSksIFNUQVJUX0lOVF9BUFJfUkVHKGlycSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaW50X3NldF9yaXNpbmdfZWRnZSh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNUQVJUX0lOVF9BUFJfUkVHKGlycSkpIHwKKwkJICAgICBTVEFSVF9JTlRfUkVHX0JJVChpcnEpLCBTVEFSVF9JTlRfQVBSX1JFRyhpcnEpKTsKK30KKworI2VuZGlmCQkJCS8qIEFTU0VNQkxFUiAqLworI2VuZGlmCQkJCS8qIF9fQVNNX0FSQ0hfUE5YNDAwOF9QTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTNkYTcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9zeXN0ZW0uaApAQCAtMCwwICsxLDM4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9zeXN0ZW0uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBQaGlsaXBzIFNlbWljb25kdWN0b3JzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisKK3N0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwljcHVfcmVzZXQoMCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDcwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3RpbWV4LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvdGltZXguaAorICoKKyAqIFBOWDQwMDggdGltZXJzIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yOiBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX1BOWDQwMDhfVElNRVhfSAorI2RlZmluZSBfX1BOWDQwMDhfVElNRVhfSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMDAwMDAwCisKKyNkZWZpbmUgVElDS1MyVVNFQ1MoeCkJKHgpCisKKy8qIE1pbGxpU2Vjb25kIFRpbWVyIC0gQ2hhcHRlciAyMSBQYWdlIDIwMiAqLworCisjZGVmaW5lIE1TVElNX0lOVCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDApKQorI2RlZmluZSBNU1RJTV9DVFJMICAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHg0KSkKKyNkZWZpbmUgTVNUSU1fQ09VTlRFUiBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4OCkpCisjZGVmaW5lIE1TVElNX01DVFJMICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDE0KSkKKyNkZWZpbmUgTVNUSU1fTUFUQ0gwICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MTgpKQorI2RlZmluZSBNU1RJTV9NQVRDSDEgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgxYykpCisKKy8qIEhpZ2ggU3BlZWQgVGltZXIgLSBDaHBhdGVyIDIyLCBQYWdlIDIwNSAqLworCisjZGVmaW5lIEhTVElNX0lOVCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDApKQorI2RlZmluZSBIU1RJTV9DVFJMICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHg0KSkKKyNkZWZpbmUgSFNUSU1fQ09VTlRFUiBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4OCkpCisjZGVmaW5lIEhTVElNX1BNQVRDSCAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweEMpKQorI2RlZmluZSBIU1RJTV9QQ09VTlQgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxMCkpCisjZGVmaW5lIEhTVElNX01DVFJMICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDE0KSkKKyNkZWZpbmUgSFNUSU1fTUFUQ0gwICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MTgpKQorI2RlZmluZSBIU1RJTV9NQVRDSDEgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxYykpCisjZGVmaW5lIEhTVElNX01BVENIMiAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDIwKSkKKyNkZWZpbmUgSFNUSU1fQ0NSICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MjgpKQorI2RlZmluZSBIU1RJTV9DUjAgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgyQykpCisjZGVmaW5lIEhTVElNX0NSMSAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDMwKSkKKworLyogSU1QT1JUQU5UOiBib3RoIHRpbWVycyBhcmUgVVBDT1VOVElORyAqLworCisvKiB4U1RJTV9NQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVIwX0lOVCAgICAgICAgMQorI2RlZmluZSBSRVNFVF9DT1VOVDAgICAoMTw8MSkKKyNkZWZpbmUgU1RPUF9DT1VOVDAgICAgKDE8PDIpCisjZGVmaW5lIE1SMV9JTlQgICAgICAgICgxPDwzKQorI2RlZmluZSBSRVNFVF9DT1VOVDEgICAoMTw8NCkKKyNkZWZpbmUgU1RPUF9DT1VOVDEgICAgKDE8PDUpCisjZGVmaW5lIE1SMl9JTlQgICAgICAgICgxPDw2KQorI2RlZmluZSBSRVNFVF9DT1VOVDIgICAoMTw8NykKKyNkZWZpbmUgU1RPUF9DT1VOVDIgICAgKDE8PDgpCisKKy8qIHhTVElNX0NUUkwgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIENPVU5UX0VOQUIgICAgIDEKKyNkZWZpbmUgUkVTRVRfQ09VTlQgICAgKDE8PDEpCisjZGVmaW5lIERFQlVHX0VOICAgICAgICgxPDwyKQorCisvKiB4U1RJTV9JTlQgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIE1BVENIMF9JTlQgICAgIDEKKyNkZWZpbmUgTUFUQ0gxX0lOVCAgICAgKDE8PDEpCisjZGVmaW5lIE1BVENIMl9JTlQgICAgICgxPDwyKQorI2RlZmluZSBSVENfVElDSzAgICAgICAoMTw8NCkKKyNkZWZpbmUgUlRDX1RJQ0sxICAgICAgKDE8PDUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE0ZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3VuY29tcHJlc3MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIFVBUlQ1X0JBU0UgMHg0MDA5MDAwMAorCisjZGVmaW5lIFVBUlQ1X0RSICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFVBUlQ1X0JBU0UpKQorI2RlZmluZSBVQVJUNV9GUiAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChVQVJUNV9CQVNFICsgMTgpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHB1dGMoY2hhciBjKQoreworCXdoaWxlIChVQVJUNV9GUiAmICgxIDw8IDUpKQorCQliYXJyaWVyKCk7CisKKwlVQVJUNV9EUiA9IGM7Cit9CisKKy8qCisgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCit7Cit9CisKKy8qCisgKiBub3RoaW5nIHRvIGRvCisgKi8KKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwZDkyNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3ZtYWxsb2MuaAorICoKKyAqIEF1dGhvcjogVml0YWx5IFdvb2wgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDYgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworLyoKKyAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKi8KKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pZHAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pZHAuaAppbmRleCBlN2VmNDk3Li5iNjk1MjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaWRwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lkcC5oCkBAIC0xNSw3ICsxNSw2IEBACiAgKiAgICAgICAgICAgICBDaGFuZ2VzIGZvciAyLjYga2VybmVsLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIE5vdGU6IHRoaXMgZmlsZSBtdXN0IGJlIHNhZmUgdG8gaW5jbHVkZSBpbiBhc3NlbWJseSBmaWxlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnFzLmgKaW5kZXggNjdhZjIzOC4uZjNiYzcwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxcy5oCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUFhBMjd4CiAjZGVmaW5lIFBYQV9JUlFfU0tJUAkwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oCmluZGV4IGM4ZjUzYTcuLjY2NTBkNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9fUFhBX1JFR1NfSAogI2RlZmluZSBfX1BYQV9SRUdTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogUFhBIENoaXAgc2VsZWN0cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdGltZXguaAppbmRleCBhYTEyNWVjLi4yNDczYmI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdGltZXguaApAQCAtMTAsNyArMTAsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfUFhBMjV4KQogLyogUFhBMjUwLzIxMCB0aW1lciBiYXNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9zbXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3NtcC5oCmluZGV4IGZjODc3ODMuLjUxNTgxOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3NtcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBBU01BUk1fQVJDSF9TTVBfSAogI2RlZmluZSBBU01BUk1fQVJDSF9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oCmluZGV4IGIwMTFlMTQuLjcyOTY0ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kbWEuaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0ggX19GSUxFX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgImhhcmR3YXJlLmgiCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWFwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oCmluZGV4IGMzODBkMjYuLjVlNGM4YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWFwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaApAQCAtMTI2LDkgKzEyNiwxOCBAQAogI2RlZmluZSBTM0MyNFhYX1NaX0lJUwkgICBTWl8xTQogCiAvKiBHUElPIHBvcnRzICovCi0jZGVmaW5lIFMzQzI0WFhfVkFfR1BJTwkgICBTM0MyNDEwX0FERFIoMHgwMEUwMDAwMCkKKworLyogdGhlIGNhbGN1bGF0aW9uIGZvciB0aGUgVkEgb2YgdGhpcyBtdXN0IGVuc3VyZSB0aGF0CisgKiBpdCBpcyB0aGUgc2FtZSBkaXN0YW5jZSBhcGFydCBmcm9tIHRoZSBVQVJUIGluIHRoZQorICogcGhzeWljYWwgYWRkcmVzcyBzcGFjZSwgYXMgdGhlIGluaXRpYWwgbWFwcGluZyBmb3IgdGhlIElPCisgKiBpcyBkb25lIGFzIGEgMToxIG1hcGluZy4gVGhpcyBwdXRzIGl0IChjdXJyZW50bHkpIGF0CisgKiAweEY2ODAwMDAwLCB3aGljaCBpcyBub3QgaW4gdGhlIHdheSBvZiBhbnkgY3VycmVudCBtYXBwaW5nCisgKiBieSB0aGUgYmFzZSBzeXN0ZW0uCisqLworCiAjZGVmaW5lIFMzQzI0MDBfUEFfR1BJTwkgICAoMHgxNTYwMDAwMCkKICNkZWZpbmUgUzNDMjQxMF9QQV9HUElPCSAgICgweDU2MDAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1ZBX0dQSU8JICAgKChTM0MyNDEwX1BBX0dQSU8gLSBTM0MyNFhYX1BBX1VBUlQpICsgUzNDMjRYWF9WQV9VQVJUKQogI2RlZmluZSBTM0MyNFhYX1NaX0dQSU8JICAgU1pfMU0KIAogLyogUlRDICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1jbG9jay5oCmluZGV4IDM0MzYwNzAuLjZjOTJmYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1jbG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1jbG9jay5oCkBAIC0xMTQsNyArMTE0LDcgQEAKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCi0jaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQwCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQyKQogCiAvKiBleHRyYSByZWdpc3RlcnMgKi8KICNkZWZpbmUgUzNDMjQ0MF9DQU1ESVZOCSAgICBTM0MyNDEwX0NMS1JFRygweDE4KQpAQCAtMTM2LDcgKzEzNiw5IEBACiAjZGVmaW5lIFMzQzI0NDBfQ0FNRElWTl9IQ0xLNF9IQUxGICAgKDE8PDkpCiAjZGVmaW5lIFMzQzI0NDBfQ0FNRElWTl9EVlNFTiAgICAgICAgKDE8PDEyKQogCi0jZW5kaWYgLyogQ09ORklHX0NQVV9TM0MyNDQwICovCisjZGVmaW5lIFMzQzI0NDJfQ0FNRElWTl9DQU1DTEtfRElWMyAgKDE8PDUpCisKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1MzQzI0NDAgb3IgQ09ORklHX0NQVV9TM0MyNDQyICovCiAKIAogI2VuZGlmIC8qIF9fQVNNX0FSTV9SRUdTX0NMT0NLICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaAppbmRleCBkMjU3NDA4Li41ZjEwMzM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmgKQEAgLTQ1MCwxMiArNDUwLDE0IEBACiAjZGVmaW5lIFMzQzI0MTBfR1BEMF9PVVRQCSgweDAxIDw8IDApCiAjZGVmaW5lIFMzQzI0MTBfR1BEMF9WRDgJKDB4MDIgPDwgMCkKICNkZWZpbmUgUzNDMjQwMF9HUEQwX1ZGUkFNRQkoMHgwMiA8PCAwKQorI2RlZmluZSBTM0MyNDQyX0dQRDBfblNQSUNTMQkoMHgwMyA8PCAwKQogCiAjZGVmaW5lIFMzQzI0MTBfR1BEMSAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgMSkKICNkZWZpbmUgUzNDMjQxMF9HUEQxX0lOUAkoMHgwMCA8PCAyKQogI2RlZmluZSBTM0MyNDEwX0dQRDFfT1VUUAkoMHgwMSA8PCAyKQogI2RlZmluZSBTM0MyNDEwX0dQRDFfVkQ5CSgweDAyIDw8IDIpCiAjZGVmaW5lIFMzQzI0MDBfR1BEMV9WTQkJKDB4MDIgPDwgMikKKyNkZWZpbmUgUzNDMjQ0Ml9HUEQxX1NQSUNMSzEJKDB4MDMgPDwgMikKIAogI2RlZmluZSBTM0MyNDEwX0dQRDIgICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0QsIDIpCiAjZGVmaW5lIFMzQzI0MTBfR1BEMl9JTlAJKDB4MDAgPDwgNCkKQEAgLTg1OCw2ICs4NjAsNyBAQAogI2RlZmluZSBTM0MyNDEwX0dQRzEyX09VVFAgICAgKDB4MDEgPDwgMjQpCiAjZGVmaW5lIFMzQzI0MTBfR1BHMTJfRUlOVDIwICAoMHgwMiA8PCAyNCkKICNkZWZpbmUgUzNDMjQxMF9HUEcxMl9YTU9OICAgICgweDAzIDw8IDI0KQorI2RlZmluZSBTM0MyNDQyX0dQRzEyX25TUElDUzAgKDB4MDMgPDwgMjQpCiAKICNkZWZpbmUgUzNDMjQxMF9HUEcxMyAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRywgMTMpCiAjZGVmaW5lIFMzQzI0MTBfR1BHMTNfSU5QICAgICAoMHgwMCA8PCAyNikKQEAgLTk0Myw2ICs5NDYsNyBAQAogI2RlZmluZSBTM0MyNDEwX0dQSDlfSU5QICAgICAgKDB4MDAgPDwgMTgpCiAjZGVmaW5lIFMzQzI0MTBfR1BIOV9PVVRQICAgICAoMHgwMSA8PCAxOCkKICNkZWZpbmUgUzNDMjQxMF9HUEg5X0NMS09VVDAgICgweDAyIDw8IDE4KQorI2RlZmluZSBTM0MyNDQyX0dQSDlfblNQSUNTMCAgKDB4MDMgPDwgMTgpCiAKICNkZWZpbmUgUzNDMjQxMF9HUEgxMCAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LSCwgMTApCiAjZGVmaW5lIFMzQzI0MTBfR1BIMTBfSU5QICAgICAoMHgwMCA8PCAyMCkKQEAgLTEwNTEsNiArMTA1NSw3IEBACiAjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzFfSURNQVNLCSAgICgweGZmZmYwMDAwKQogI2RlZmluZSBTM0MyNDEwX0dTVEFUVVMxXzI0MTAJICAgKDB4MzI0MTAwMDApCiAjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzFfMjQ0MAkgICAoMHgzMjQ0MDAwMCkKKyNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMV8yNDQyCSAgICgweDMyNDQwYWFhKQogCiAjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzJfV1RSRVNFVCAgICgxPDwyKQogI2RlZmluZSBTM0MyNDEwX0dTVEFUVVMyX09GRlJFU0VUICAoMTw8MSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91bmNvbXByZXNzLmgKaW5kZXggYTZmNmEwZS4uOGUxNTJhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91bmNvbXByZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91bmNvbXByZXNzLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKICNkZWZpbmUgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBkZWZpbmVzIGZvciBVQVJUIHJlZ2lzdGVycyAqLwogI2luY2x1ZGUgImFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmgiCkBAIC04Miw3ICs4MSw4IEBACiAJCXdoaWxlICgxKSB7CiAJCQlsZXZlbCA9IHVhcnRfcmQoUzNDMjQxMF9VRlNUQVQpOwogCi0JCQlpZiAoY3B1aWQgPT0gUzNDMjQxMF9HU1RBVFVTMV8yNDQwKSB7CisJCQlpZiAoY3B1aWQgPT0gUzNDMjQxMF9HU1RBVFVTMV8yNDQwIHx8CisJCQkgICAgY3B1aWQgPT0gUzNDMjQxMF9HU1RBVFVTMV8yNDQyKSB7CiAJCQkJbGV2ZWwgJj0gUzNDMjQ0MF9VRlNUQVRfVFhNQVNLOwogCQkJCWxldmVsID4+PSBTM0MyNDQwX1VGU1RBVF9UWFNISUZUOwogCQkJfSBlbHNlIHsKQEAgLTEzMCw3ICsxMzAsNyBAQAogewogCV9fcmF3X3dyaXRlbChXRE9HX0NPVU5ULCBTM0MyNDEwX1dUREFUKTsKIAlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVENOVCk7Ci0JX19yYXdfd3JpdGVsKFMzQzI0MTBfV1RDT05fRU5BQkxFIHwgUzNDMjQxMF9XVENPTl9ESVYxMjggfCBTM0MyNDEwX1dUQ09OX1JTVEVOIHwgUzNDMjQxMF9XVENPTl9QUkVTQ0FMRSgweDQwKSwgUzNDMjQxMF9XVENPTik7CisJX19yYXdfd3JpdGVsKFMzQzI0MTBfV1RDT05fRU5BQkxFIHwgUzNDMjQxMF9XVENPTl9ESVYxMjggfCBTM0MyNDEwX1dUQ09OX1JTVEVOIHwgUzNDMjQxMF9XVENPTl9QUkVTQ0FMRSgweDgwKSwgUzNDMjQxMF9XVENPTik7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYXNzYWJldC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2Fzc2FiZXQuaAppbmRleCAxZjU5YjM2Li5kNmExYmI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYXNzYWJldC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9hc3NhYmV0LmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9BU1NBQkVUX0gKICNkZWZpbmUgX19BU01fQVJDSF9BU1NBQkVUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBSZWdpc3RlciBmbGFncyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvY2VyZi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NlcmYuaAppbmRleCAzNTZkNWJhLi45YTE5YzNkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NlcmYuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvY2VyZi5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9JTkNMVURFX0NFUkZfSF8KICNkZWZpbmUgX0lOQ0xVREVfQ0VSRl9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgQ0VSRl9FVEhfSU8JCQkweGYwMDAwMDAwCiAjZGVmaW5lIENFUkZfRVRIX0lSUSBJUlFfR1BJTzI2CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvY29sbGllLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvY29sbGllLmgKaW5kZXggZDQ5ZTVmZi4uMTRhMzQ0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NvbGxpZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9jb2xsaWUuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0NPTExJRV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfQ09MTElFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIENPTExJRV9TQ1BfQ0hBUkdFX09OCVNDT09QX0dQQ1JfUEExMQogI2RlZmluZSBDT0xMSUVfU0NQX0RJQUdfQk9PVDEJU0NPT1BfR1BDUl9QQTEyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZG1hLmgKaW5kZXggMDI1NzVkNy4uNmI3OTE3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kbWEuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImhhcmR3YXJlLmgiCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaGFyZHdhcmUuaAppbmRleCBlZTAwOGE1Li4xYWJkN2NmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaGFyZHdhcmUuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKICNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBVTkNBQ0hFQUJMRV9BRERSCTB4ZmEwNTAwMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lkZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lkZS5oCmluZGV4IDIxNTM1MzguLjk4YjEwYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaWRlLmgKQEAgLTksNyArOSw2IEBACiAgKiAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lycXMuaAppbmRleCBlYWJkM2JlLi5kNzk0MDY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pcnFzLmgKQEAgLTcsNyArNyw2IEBACiAgKgogICogMjAwMS8xMS8xNAlSTUsJQ2xlYW5lZCB1cCBhbmQgc3RhbmRhcmRpc2VkIGEgbG90IG9mIHRoZSBJUlFzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUJSVJRX0dQSU8wCQkwCiAjZGVmaW5lCUlSUV9HUElPMQkJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCmluZGV4IGEyOWZhYzEuLjFmZjE3MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvbWVtb3J5LmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvc3lzdGVtLmgKaW5kZXggMGYwNjEyZi4uYWVmOTFlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9zeXN0ZW0uaApAQCAtMyw3ICszLDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTkgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hdG9taWMuaAppbmRleCAzZDcyODNkLi40YjBjZTNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2F0b21pYy5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BVE9NSUNfSAogI2RlZmluZSBfX0FTTV9BUk1fQVRPTUlDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKIHR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYnVnLmggYi9pbmNsdWRlL2FzbS1hcm0vYnVnLmgKaW5kZXggNWFiODIxNi4uN2ZiMDIxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9idWcuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0FTTUFSTV9CVUdfSAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1hcm0vY2FjaGVmbHVzaC5oCmluZGV4IDc0NmJlNTYuLmZlMGM3NDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNQVJNX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfQVNNQVJNX0NBQ0hFRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vY3B1LmggYi9pbmNsdWRlL2FzbS1hcm0vY3B1LmgKaW5kZXggNzUxYmM3NC4uNzE1NDI2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2NwdS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jcHUuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fQ1BVX0gKICNkZWZpbmUgX19BU01fQVJNX0NQVV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KIAogc3RydWN0IGNwdWluZm9fYXJtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmgKaW5kZXggNjNjYTc0MS4uNTVlYjRkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPiAvKiBuZWVkIHN0cnVjdCBwYWdlICovCiAKICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9kbWEuaAppbmRleCA0OWMwMWUyLi45ZjJjNTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2RtYS5oCkBAIC0zLDcgKzMsNiBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGludCBkbWFjaF90OwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZWxmLmggYi9pbmNsdWRlL2FzbS1hcm0vZWxmLmgKaW5kZXggMmQ0NGI0Mi4uNzEwNjFjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9lbGYuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01BUk1fRUxGX0gKICNkZWZpbmUgX19BU01BUk1fRUxGX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmggYi9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oCmluZGV4IDUyYmFlMDguLjEzMmMzYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fRlBTVEFURV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9GUFNUQVRFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZ2x1ZS5oIGIvaW5jbHVkZS9hc20tYXJtL2dsdWUuaAppbmRleCAyMjNlMGQ2Li4wY2M1ZDNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZ2x1ZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9nbHVlLmgKQEAgLTE1LDcgKzE1LDYgQEAKICAqLwogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgX19TVERDX18KICNkZWZpbmUgX19fX2dsdWUobmFtZSxmbikJbmFtZSMjZm4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZGlycS5oCmluZGV4IDFjYmIxNzMuLjE4MjMxMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmRpcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2RlYzIxMjg1LmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVjMjEyODUuaAppbmRleCA2Njg1ZTNmLi41NDZmNzA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVjMjEyODUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVjMjEyODUuaApAQCAtMTgsNyArMTgsNiBAQAogI2RlZmluZSBEQzIxMjg1X1BDSV9JTwkJCTB4N2MwMDAwMDAKICNkZWZpbmUgREMyMTI4NV9QQ0lfTUVNCQkJMHg4MDAwMDAwMAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2RlZmluZSBEQzIxMjg1X0lPKHgpCQkoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoQVJNQ1NSX0JBU0UrKHgpKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb21kLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9tZC5oCmluZGV4IDgyZmEyYzIuLjM5NmU1NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb21kLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvbWQuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfX0FTTUFSTV9IQVJEV0FSRV9JT01EX0gKICNkZWZpbmUgX19BU01BUk1fSEFSRFdBUkVfSU9NRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2xlZHMuaCBiL2luY2x1ZGUvYXNtLWFybS9sZWRzLmgKaW5kZXggODhjZTQxMi4uMTIyOTBlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2xlZHMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbGVkcy5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIEFTTV9BUk1fTEVEU19ICiAjZGVmaW5lIEFTTV9BUk1fTEVEU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogdHlwZWRlZiBlbnVtIHsKIAlsZWRfaWRsZV9zdGFydCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NlcmlhbF9hdDkxcm05MjAwLmggYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9zZXJpYWxfYXQ5MXJtOTIwMC5oCmluZGV4IDk4ZjRiMGMuLmEwMjY5ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NlcmlhbF9hdDkxcm05MjAwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvc2VyaWFsX2F0OTFybTkyMDAuaApAQCAtNyw3ICs3LDYgQEAKICAqCiAgKiAgTG93IGxldmVsIG1hY2hpbmUgZGVwZW5kZW50IFVBUlQgZnVuY3Rpb25zLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCB1YXJ0X3BvcnQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NlcmlhbF9zYTExMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NlcmlhbF9zYTExMDAuaAppbmRleCA5MTYyMDE4Li4yMGMyMmJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9zZXJpYWxfc2ExMTAwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvc2VyaWFsX3NhMTEwMC5oCkBAIC03LDcgKzcsNiBAQAogICoKICAqIExvdyBsZXZlbCBtYWNoaW5lIGRlcGVuZGVudCBVQVJUIGZ1bmN0aW9ucy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3QgdWFydF9wb3J0Owogc3RydWN0IHVhcnRfaW5mbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3RpbWUuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3RpbWUuaAppbmRleCA5NmM2ZGI3Li45ZjI4MDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC90aW1lLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvdGltZS5oCkBAIC01MCw2ICs1MCw3IEBACiAjZGVmaW5lIERZTl9USUNLX0VOQUJMRUQJKDEgPDwgMSkKIAogc3RydWN0IGR5bl90aWNrX3RpbWVyIHsKKwlzcGlubG9ja190CWxvY2s7CiAJdW5zaWduZWQgaW50CXN0YXRlOwkJCS8qIEN1cnJlbnQgc3RhdGUgKi8KIAlpbnQJCSgqZW5hYmxlKSh2b2lkKTsJLyogRW5hYmxlcyBkeW5hbWljIHRpY2sgKi8KIAlpbnQJCSgqZGlzYWJsZSkodm9pZCk7CS8qIERpc2FibGVzIGR5bmFtaWMgdGljayAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCmluZGV4IDIwOTI4OTQuLjczMWUzMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKQEAgLTIyLDcgKzIyLDYgQEAKICNkZWZpbmUgVUwoeCkgKHgpCiAjZW5kaWYKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oIGIvaW5jbHVkZS9hc20tYXJtL3BhZ2UuaAppbmRleCBhNDA0ZDJiLi42NmNmZWI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wYWdlLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTUFSTV9QQUdFX0gKICNkZWZpbmUgX0FTTUFSTV9QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwogI2RlZmluZSBQQUdFX1NISUZUCQkxMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BjaS5oIGIvaW5jbHVkZS9hc20tYXJtL3BjaS5oCmluZGV4IGVhZDNjZWQuLmYyMWFiZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGNpLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIEFTTUFSTV9QQ0lfSAogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4gLyogZm9yIFBDSUJJT1NfTUlOXyogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oIGIvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmgKaW5kZXggMTA2MDQ1ZS4uZTkzMTA4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmgKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogV29yayBvdXQgaWYgd2UgbmVlZCBtdWx0aXBsZSBDUFUgc3VwcG9ydApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tYXJtL3B0cmFjZS5oCmluZGV4IDc3YWRiN2YuLjJiZWJlM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcHRyYWNlLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX19BU01fQVJNX1BUUkFDRV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9QVFJBQ0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgUFRSQUNFX0dFVFJFR1MJCTEyCiAjZGVmaW5lIFBUUkFDRV9TRVRSRUdTCQkxMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NtcC5oIGIvaW5jbHVkZS9hc20tYXJtL3NtcC5oCmluZGV4IGZlNDVmN2YuLmY2N2FjY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc21wLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX19BU01fQVJNX1NNUF9ICiAjZGVmaW5lIF9fQVNNX0FSTV9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCmluZGV4IDdjOTU2OGQuLjljNzQ0YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBDUFVfQVJDSF9VTktOT1dOCTAKICNkZWZpbmUgQ1BVX0FSQ0hfQVJNdjMJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKaW5kZXggNzI4OTkyNC4uZDk3ZmM3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTUFSTV9UTEJGTFVTSF9ICiAjZGVmaW5lIF9BU01BUk1fVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgQ09ORklHX01NVQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKaW5kZXggY2JmMzlhNS4uMWU4OTFmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaApAQCAtMTMsOCArMTMsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fVU5JU1REX0gKICNkZWZpbmUgX19BU01fQVJNX1VOSVNURF9ICiAKLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0KICNkZWZpbmUgX19OUl9PQUJJX1NZU0NBTExfQkFTRQkweDkwMDAwMAogCiAjaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQpAQCAtMzc4LDYgKzM3Niw5IEBACiAjdW5kZWYgX19OUl9pcGMKICNlbmRpZgogCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKwogI2RlZmluZSBfX3N5czIoeCkgI3gKICNkZWZpbmUgX19zeXMxKHgpIF9fc3lzMih4KQogCkBAIC01MjYsNyArNTI3LDYgQEAKICAgX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJCQlcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKQEAgLTU0Nyw3ICs1NDcsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAogI2VuZGlmCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtNTcxLDcgKzU3MCw3IEBACiAJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCiAJCQkJc2l6ZV90IHNpZ3NldHNpemUpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC01ODEsNCArNTgwLDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fQVJNX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCmluZGV4IDE1NTJjODYuLjk3ZTk0NGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BVE9NSUNfSAogI2RlZmluZSBfX0FTTV9BUk1fQVRPTUlDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2Vycm9yIFNNUCBpcyBOT1Qgc3VwcG9ydGVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9idWcuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oCmluZGV4IDcxNzdjNzMuLjg1NDVkNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNQVJNX0JVR19ICiAjZGVmaW5lIF9BU01BUk1fQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0JVRwogI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2RtYS5oCmluZGV4IDk5NWUyMjMuLjQzMjZiYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2RtYS5oCkBAIC0zLDcgKzMsNiBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGludCBkbWFjaF90OwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvaGFyZGlycS5oCmluZGV4IDg3YzE5ZDIuLmU3MTc3NDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0hBUkRJUlFfSAogI2RlZmluZSBfX0FTTV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9oYXJkd2FyZS5oCmluZGV4IDgyZmM1NWUuLjgwMWRmMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvaGFyZHdhcmUuaApAQCAtMTYsNyArMTYsNiBAQAogI2lmbmRlZiBfX0FTTV9IQVJEV0FSRV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRXQVJFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9pby5oIGIvaW5jbHVkZS9hc20tYXJtMjYvaW8uaAppbmRleCAwMmY5NGQ4Li4yYWEwMzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2lvLmgKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2xlZHMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2xlZHMuaAppbmRleCA4OGNlNDEyLi4xMjI5MGVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9sZWRzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvbGVkcy5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIEFTTV9BUk1fTEVEU19ICiAjZGVmaW5lIEFTTV9BUk1fTEVEU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogdHlwZWRlZiBlbnVtIHsKIAlsZWRfaWRsZV9zdGFydCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L21hY2gtdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L21hY2gtdHlwZXMuaAppbmRleCBiMzQwNDViLi4wYWVhZWRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9tYWNoLXR5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvbWFjaC10eXBlcy5oCkBAIC02LDcgKzYsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fTUFDSF9UWVBFX0gKICNkZWZpbmUgX19BU01fQVJNX01BQ0hfVFlQRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIGV4dGVybiB1bnNpZ25lZCBpbnQgX19tYWNoaW5lX2FyY2hfdHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3BhZ2UuaAppbmRleCBkM2YyM2FjLi5mYTE5ZGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNQVJNX1BBR0VfSAogI2RlZmluZSBfQVNNQVJNX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvcGd0YWJsZS5oCmluZGV4IGE1OTAyNTAuLjE5YWM5MTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9wZ3RhYmxlLmgKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zZXJpYWwuaAppbmRleCA1ZmM3NDdkLi5kZDg2YTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zZXJpYWwuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfX0FTTV9TRVJJQUxfSAogI2RlZmluZSBfX0FTTV9TRVJJQUxfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zbXAuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NtcC5oCmluZGV4IDVjYTc3MTYuLjM4MzQ5ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3NtcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TTVBfSAogI2RlZmluZSBfX0FTTV9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCiAjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3N5c2lycS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc3lzaXJxLmgKaW5kZXggY2FkMjUwYy4uODFkY2E5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvc3lzaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc3lzaXJxLmgKQEAgLTExLDcgKzExLDYgQEAKICAqICAgMDQtMDQtMTk5OCBQSkIgICAgIE1lcmdlZCBhcmMgYW5kIGE1ayB2ZXJzaW9ucwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfQTVLKQogI2RlZmluZSBJUlFfUFJJTlRFUiAgICAgICAgICAgICAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybTI2L3N5c3RlbS5oCmluZGV4IDcwMjg4NDkuLmQxZjY5ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3N5c3RlbS5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBjb21waWxlciBkaWQgYWN0dWFsbHkgYWxsb2NhdGUgdGhlIHJlZ2lzdGVyIHdlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3VuaXN0ZC5oCmluZGV4IGJlNGMyZmIuLjcwZWI2ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3VuaXN0ZC5oCkBAIC0xNCw4ICsxNCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9VTklTVERfSAogI2RlZmluZSBfX0FTTV9BUk1fVU5JU1REX0gKIAotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLQogI2RlZmluZSBfX05SX1NZU0NBTExfQkFTRQkweDkwMDAwMAogCiAvKgpAQCAtMzEyLDYgKzMxMCw5IEBACiAjZGVmaW5lIF9fQVJNX05SX2NhY2hlZmx1c2gJCShfX0FSTV9OUl9CQVNFKzIpCiAjZGVmaW5lIF9fQVJNX05SX3VzcjI2CQkJKF9fQVJNX05SX0JBU0UrMykKIAorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKICNkZWZpbmUgX19zeXMyKHgpICN4CiAjZGVmaW5lIF9fc3lzMSh4KSBfX3N5czIoeCkKIApAQCAtNDQzLDcgKzQ0NCw2IEBACiAgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKQEAgLTQ2Miw3ICs0NjIsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTQ4Niw3ICs0ODUsNyBAQAogCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtNDk2LDQgKzQ5NSw1IEBACiAgKi8KICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX0FSTV9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9pby5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9pby5oCmluZGV4IGRkMzkxOTguLjExZWY1YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2lvLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU01fQVJDSF9DUklTX0lPX0gKIAogI2luY2x1ZGUgPGFzbS9hcmNoL3N2aW50by5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBFdHJheCBzaGFkb3cgcmVnaXN0ZXJzIC0gd2hpY2ggbGl2ZSBpbiBhcmNoL2NyaXMva2VybmVsL3NoYWRvd3MuYyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvcGFnZS5oCmluZGV4IDQwN2U2ZTYuLjdkODMwN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQ1JJU19BUkNIX1BBR0VfSAogI2RlZmluZSBfQ1JJU19BUkNIX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3N5c3RlbS5oCmluZGV4IDFhYzdiNjMuLjRhOWNkMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fQ1JJU19BUkNIX1NZU1RFTV9ICiAjZGVmaW5lIF9fQVNNX0NSSVNfQVJDSF9TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIHJlYWQgdGhlIENQVSB2ZXJzaW9uIHJlZ2lzdGVyICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaW8uaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaW8uaAppbmRleCAwNDNjOWNlLi41ZWZlNGQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9pby5oCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2h3cmVncy9yZWdfbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaHdyZWdzL3JlZ19yZHdyLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaHdyZWdzL2dpb19kZWZzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIGVudW0gY3Jpc3YzMl9pb19kaXIKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaXJxLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2lycS5oCmluZGV4IGQzNWFhODEuLmVlYjBhODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9pcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9BUkNIX0lSUV9ICiAjZGVmaW5lIF9BU01fQVJDSF9JUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiaHdyZWdzL2ludHJfdmVjdC5oIgogCiAvKiBOdW1iZXIgb2Ygbm9uLWNwdSBpbnRlcnJ1cHRzLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9wYWdlLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3BhZ2UuaAppbmRleCA3NzgyN2JjLi5mYTQ1NGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9DUklTX0FSQ0hfUEFHRV9ICiAjZGVmaW5lIF9BU01fQ1JJU19BUkNIX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3Byb2Nlc3Nvci5oCmluZGV4IDMyYmYyZTUuLjU1NTNiMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9wcm9jZXNzb3IuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9DUklTX0FSQ0hfUFJPQ0VTU09SX0gKICNkZWZpbmUgX0FTTV9DUklTX0FSQ0hfUFJPQ0VTU09SX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBSZXR1cm4gY3VycmVudCBpbnN0cnVjdGlvbiBwb2ludGVyLiAqLwogI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3N5c3RlbS5oCmluZGV4IGEzZDc1ZDUuLmQyMGUyZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9DUklTX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX0FTTV9DUklTX0FSQ0hfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBSZWFkIHRoZSBDUFUgdmVyc2lvbiByZWdpc3Rlci4gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZHZyKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2VzaGxpYmxkLmggYi9pbmNsdWRlL2FzbS1jcmlzL2VzaGxpYmxkLmgKaW5kZXggMmI1NzdjZC4uMTBjZTM2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9lc2hsaWJsZC5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvZXNobGlibGQuaApAQCAtMzIsNyArMzIsNiBAQAogLyogV2UgaGF2ZSBkZXBlbmRlbmNpZXMgYWxsIG92ZXIgdGhlIHBsYWNlIGZvciB0aGUgaG9zdCBzeXN0ZW0KICAgIGZvciB4c2ltIGJlaW5nIGEgbGludXggc3lzdGVtLCBzbyBsZXQncyBub3QgcHJldGVuZCBhbnl0aGluZwogICAgZWxzZSB3aXRoICNpZmRlZjpzIGhlcmUgdW50aWwgZml4ZWQuICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogCiAvKiBNYXliZSBkbyBzYW5pdHkgY2hlY2tpbmcgaWYgZmlsZSBpbnB1dC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvZXRyYXhncGlvLmggYi9pbmNsdWRlL2FzbS1jcmlzL2V0cmF4Z3Bpby5oCmluZGV4IDgwZWUxMGYuLjVkMDAyOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvZXRyYXhncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9ldHJheGdwaW8uaApAQCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBfQVNNX0VUUkFYR1BJT19ICiAjZGVmaW5lIF9BU01fRVRSQVhHUElPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogLyogZXRyYXhncGlvIF9JT0NfVFlQRSwgYml0cyA4IHRvIDE1IGluIGlvY3RsIGNtZCAqLwogI2lmZGVmIENPTkZJR19FVFJBWF9BUkNIX1YxMAogI2RlZmluZSBFVFJBWEdQSU9fSU9DVFlQRSA0MwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9mYXN0dGltZXIuaCBiL2luY2x1ZGUvYXNtLWNyaXMvZmFzdHRpbWVyLmgKaW5kZXggNjk1MjIwMi4uYTNhNzcxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9mYXN0dGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2Zhc3R0aW1lci5oCkBAIC01LDcgKzUsNiBAQAogICogVGhpcyBtYXkgYmUgdXNlZnVsIGluIG90aGVyIE9TIHRoYW4gTGludXggc28gdXNlIDIgc3BhY2UgaW5kZW50YXRpb24uLi4KICAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMiBBeGlzIENvbW11bmljYXRpb25zIEFCCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+IC8qIHN0cnVjdCB0aW1ldmFsICovCiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9wYWdlLmggYi9pbmNsdWRlL2FzbS1jcmlzL3BhZ2UuaAppbmRleCAzNzg3NjMzLi44MTgzMmU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0NSSVNfUEFHRV9ICiAjZGVmaW5lIF9DUklTX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcGFnZS5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9wY2kuaCBiL2luY2x1ZGUvYXNtLWNyaXMvcGNpLmgKaW5kZXggMjA2NGJjMS4uYjJhYzhhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3BjaS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9DUklTX1BDSV9ICiAjZGVmaW5lIF9fQVNNX0NSSVNfUENJX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igc3RydWN0IHBhZ2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wZ3RhYmxlLmgKaW5kZXggNzBhODMyNS4uNWQ3NmMxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wZ3RhYmxlLmgKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wcm9jZXNzb3IuaAppbmRleCA5NjFlMmJjLi41NjhkYTFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcHJvY2Vzc29yLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX19BU01fQ1JJU19QUk9DRVNTT1JfSAogI2RlZmluZSBfX0FTTV9DUklTX1BST0NFU1NPUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3J0Yy5oIGIvaW5jbHVkZS9hc20tY3Jpcy9ydGMuaAppbmRleCA5N2MxMzAzLi5jYjRiZjkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3J0Yy5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcnRjLmgKQEAgLTQsNyArNCw2IEBACiAjZGVmaW5lIF9fUlRDX0hfXwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19FVFJBWF9EUzEzMDIKICAgIC8qIERhbGxhcyBEUzEzMDIgY2xvY2svY2FsZW5kYXIgcmVnaXN0ZXIgbnVtYmVycy4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWNyaXMvdGxiZmx1c2guaAppbmRleCBjNTIyMzgwLi4wNTY5NjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy90bGJmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQ1JJU19UTEJGTFVTSF9ICiAjZGVmaW5lIF9DUklTX1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaAppbmRleCBiYjJkZmU0Li5jMjk1NGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdW5pc3RkLmgKQEAgLTI5NSwxMSArMjk1LDExIEBACiAjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjg3CiAjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODgKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9zeXNjYWxscyAyODkKIAogCi0KLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCkBAIC0zNzksMTIgKzM3OSwxMCBAQAogICogY29tcGxhaW50cy4gIFdlIGRvbid0IHdhbnQgdG8gdXNlIC1mbm8tYnVpbHRpbiwgc28ganVzdCB1c2UgYQogICogZGlmZmVyZW50IG5hbWUgd2hlbiBpbiB0aGUga2VybmVsLgogICovCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfZXhpdCBrZXJuZWxfc3lzY2FsbF9leGl0Ci0jZW5kaWYKIHN0YXRpYyBpbmxpbmUgX3N5c2NhbGwxKGludCxfZXhpdCxpbnQsZXhpdGNvZGUpCiBzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhwaWRfdCx3YWl0cGlkLHBpZF90LHBpZCxpbnQgKix3YWl0X3N0YXQsaW50LG9wdGlvbnMpCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIAogLyoKQEAgLTM5NSw0ICszOTMsNSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX0NSSVNfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1mcnYvYXRvbWljLmgKaW5kZXggNWQ5Zjg0Yi4uOWE0ZmYwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9hdG9taWMuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfQVNNX0FUT01JQ19ICiAjZGVmaW5lIF9BU01fQVRPTUlDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3Nwci1yZWdzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWZydi9iaXRvcHMuaAppbmRleCA2MzQ0ZDA2Li45ODBhZTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2JpdG9wcy5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmIF9BU01fQklUT1BTX0gKICNkZWZpbmUgX0FTTV9CSVRPUFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2J1Zy5oIGIvaW5jbHVkZS9hc20tZnJ2L2J1Zy5oCmluZGV4IDQ1MTcxMmMuLjZiMWI0NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvYnVnLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9CVUdfSAogI2RlZmluZSBfQVNNX0JVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLWZydi9jYWNoZS5oCmluZGV4IGNmNjliNjMuLjI3OTcxNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9jYWNoZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9fQVNNX0NBQ0hFX0gKICNkZWZpbmUgX19BU01fQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCiAjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQkoQ09ORklHX0ZSVl9MMV9DQUNIRV9TSElGVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9kbWEuaCBiL2luY2x1ZGUvYXNtLWZydi9kbWEuaAppbmRleCBkOGY5YTJmLi4xOGQ2YmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2RtYS5oCkBAIC0xNCw3ICsxNCw2IEBACiAKIC8vI2RlZmluZSBETUFfREVCVUcgMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICN1bmRlZiBNQVhfRE1BX0NIQU5ORUxTCQkvKiBkb24ndCB1c2Uga2VybmVsL2RtYS5jICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZWxmLmggYi9pbmNsdWRlL2FzbS1mcnYvZWxmLmgKaW5kZXggN2QyMDk4Zi4uMzg2NTZkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9lbGYuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9FTEZfSAogI2RlZmluZSBfX0FTTV9FTEZfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS91c2VyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9mcHUuaCBiL2luY2x1ZGUvYXNtLWZydi9mcHUuaAppbmRleCBiMTE3OGY4Li5kNzNjNjBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvZnB1LmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2ZwdS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9GUFVfSAogI2RlZmluZSBfX0FTTV9GUFVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBNQVggZmxvYXRpbmcgcG9pbnQgdW5pdCBzdGF0ZSBzaXplIChGU0FWRS9GUkVTVE9SRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1mcnYvaGFyZGlycS5oCmluZGV4IDY4NTEyMzkuLjc1ODFiNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2hhcmRpcnEuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS1mcnYvaGlnaG1lbS5oCmluZGV4IDI5NWY3NGEuLmNmYmY3ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2hpZ2htZW0uaApAQCAtMTcsNyArMTcsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tZW0tbGF5b3V0Lmg+CiAjaW5jbHVkZSA8YXNtL3Nwci1yZWdzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaWRlLmggYi9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKaW5kZXggYWUwMzFlYS4uZjBiZDJjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pZGUuaApAQCAtMTQsNyArMTQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lvLmggYi9pbmNsdWRlL2FzbS1mcnYvaW8uaAppbmRleCAwMTI0N2NiLi5iNTZlYmE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaW8uaApAQCAtMTcsNyArMTcsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdmlydGNvbnZlcnQuaD4KICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaXJxLmggYi9pbmNsdWRlL2FzbS1mcnYvaXJxLmgKaW5kZXggMmMxNmQ4ZC4uNThiNjE5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pcnEuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX0lSUV9IXwogI2RlZmluZSBfQVNNX0lSUV9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiB0aGUgc3lzdGVtIGhhcyBhbiBvbi1DUFUgUElDIGFuZCBhbm90aGVyIFBJQyBvbiB0aGUgRlBHQSBhbmQgb3RoZXIgUElDcyBvbiBvdGhlciBwZXJpcGhlcmFscywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tZnJ2L21tdV9jb250ZXh0LmgKaW5kZXggNGZiOWVhMy4uNzJlZGNhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L21tdV9jb250ZXh0LmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX0FTTV9NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9BU01fTU1VX0NPTlRFWFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWZydi9wYWdlLmgKaW5kZXggZGMwZjdlMC4uMTM0Y2MwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcGFnZS5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL21lbS1sYXlvdXQuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wY2kuaCBiL2luY2x1ZGUvYXNtLWZydi9wY2kuaAppbmRleCA1OThiMGM2Li5mMzVhNDUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3BjaS5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIEFTTV9QQ0lfSAogI2RlZmluZQlBU01fUENJX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1mcnYvcGdhbGxvYy5oCmluZGV4IDFiZDI4ZjQuLmNlOTgyYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3BnYWxsb2MuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfQVNNX1BHQUxMT0NfSAogI2RlZmluZSBfQVNNX1BHQUxMT0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCmluZGV4IGQxYzNiMTguLjdhZjc0ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaApAQCAtMTYsNyArMTYsNiBAQAogI2lmbmRlZiBfQVNNX1BHVEFCTEVfSAogI2RlZmluZSBfQVNNX1BHVEFCTEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL21lbS1sYXlvdXQuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1mcnYvcHJvY2Vzc29yLmgKaW5kZXggNTIyOGMxOC4uMWM0ZGJhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wcm9jZXNzb3IuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX1BST0NFU1NPUl9ICiAjZGVmaW5lIF9BU01fUFJPQ0VTU09SX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tZW0tbGF5b3V0Lmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20tZnJ2L3NlZ21lbnQuaAppbmRleCA2MTIyMmYwLi5lMzYxNmE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc2VnbWVudC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zZWdtZW50LmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX0FTTV9TRUdNRU5UX0gKICNkZWZpbmUgX0FTTV9TRUdNRU5UX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1mcnYvc2VyaWFsLmgKaW5kZXggNjkxN2Q1NS4uZGJiODI1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zZXJpYWwuaApAQCAtNiw3ICs2LDYgQEAKICAqCiAgKiBCYXNlZCBvbiBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2VyaWFsLXJlZ3MuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zbXAuaCBiL2luY2x1ZGUvYXNtLWZydi9zbXAuaAppbmRleCA1Y2E3NzE2Li4zODM0OWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NtcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TTVBfSAogI2RlZmluZSBfX0FTTV9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCiAjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaAppbmRleCAxNzM0ZWQ5Li4zNTE4NjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fU1lTVEVNX0gKICNkZWZpbmUgX0FTTV9TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IC8qIGdldCBjb25maWd1cmF0aW9uIG1hY3JvcyAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tZnJ2L3RsYmZsdXNoLmgKaW5kZXggYmMzNDYyNjIuLmRhM2EzMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi90bGJmbHVzaC5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fVExCRkxVU0hfSAogI2RlZmluZSBfQVNNX1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWZydi90eXBlcy5oCmluZGV4IDI1NjBmNTkuLjFiNmQxOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi90eXBlcy5oCkBAIC00Niw3ICs0Niw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogdHlwZWRlZiBzaWduZWQgY2hhciBzODsKIHR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLWZydi91bmFsaWduZWQuaAppbmRleCBhMGQxOTliLi5kYzhlOWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3VuYWxpZ25lZC5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fVU5BTElHTkVEX0gKICNkZWZpbmUgX0FTTV9VTkFMSUdORURfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBVbmFsaWduZWQgYWNjZXNzZXMgb24gdUNsaW51eCBjYW4ndCBiZSBwZXJmb3JtZWQgaW4gYSBmYXVsdCBoYW5kbGVyIC0gdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmgKaW5kZXggMjY2MmEzZS4uN2MyZTcxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaApAQCAtMzE3LDYgKzMxNyw4IEBACiAjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTMwOAogI2RlZmluZSBfX05SX3Bwb2xsCQkzMDkKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9zeXNjYWxscyAzMTAKIAogLyoKQEAgLTQ3Nyw5ICs0NzksOCBAQAogCXJldHVybiB3YWl0cGlkKC0xLHdhaXRfc3RhdCwwKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogLyogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUiAqLwogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVApAQCAtNTAzLDcgKzUwNCw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECi0jZW5kaWYKIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTUxNSw0ICs1MTUsNSBAQAogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAjZW5kaWYKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3ZpcnRjb252ZXJ0LmggYi9pbmNsdWRlL2FzbS1mcnYvdmlydGNvbnZlcnQuaAppbmRleCBhMjlhMGFlLi41OTc4OGZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvdmlydGNvbnZlcnQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdmlydGNvbnZlcnQuaApAQCAtMTcsNyArMTcsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKICNpZmRlZiBDT05GSUdfTU1VCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaAppbmRleCAxYTU2NWE5Li4wY2Q5NzExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU01fR0VORVJJQ19CVUdfSAogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19CVUcKICNpZm5kZWYgSEFWRV9BUkNIX0JVRwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oCmluZGV4IDFiMzU2MjAuLmI1NDFlNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9BU01fR0VORVJJQ19ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19ETUFfTUFQUElOR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCmluZGV4IGI2NjM1MjAuLmMxNTRiOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fR0VORVJJQ19GQ05UTF9ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19GQ05UTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBvcGVuL2ZjbnRsIC0gT19TWU5DIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gYmxvY2tzIGRldmljZXMgYW5kIG9uIGZpbGVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmgKaW5kZXggOTI5MWMyNC4uYWI0NjkyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWwuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9HRU5FUklDX0xPQ0FMX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX0xPQ0FMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwuaAppbmRleCA5NDE4ZDZlLi5kYWUxZDg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnbmFsLmgKQEAgLTEsMyArMSw4IEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfU0lHTkFMX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19TSUdOQUxfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKwogI2lmbmRlZiBTSUdfQkxPQ0sKICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KICNlbmRpZgpAQCAtMTksMyArMjQsNSBAQAogI2RlZmluZSBTSUdfSUdOCSgoX19mb3JjZSBfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCiAjZGVmaW5lIFNJR19FUlIJKChfX2ZvcmNlIF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KICNlbmRpZgorCisjZW5kaWYgLyogX19BU01fR0VORVJJQ19TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKaW5kZXggY2RkNDE0NS4uODY3ZDkwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9BU01fR0VORVJJQ19fVExCX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX19UTEJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2JpdG9wcy5oCmluZGV4IDU3NGY1N2I2Li5kNzYyOTljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9iaXRvcHMuaApAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAyMDAyLCBZb3NoaW5vcmkgU2F0bwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvZG1hLmggYi9pbmNsdWRlL2FzbS1oODMwMC9kbWEuaAppbmRleCAzNzA4NjgxLi4zZWRiYWFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9kbWEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0g4MzAwX0RNQV9ICiAjZGVmaW5lIF9IODMwMF9ETUFfSCAKICAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFNldCBudW1iZXIgb2YgY2hhbm5lbHMgb2YgRE1BIG9uIENvbGRGaXJlIGZvciBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvZWxmLmggYi9pbmNsdWRlL2FzbS1oODMwMC9lbGYuaAppbmRleCBmNGFmMTU1Li43YmE2YTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9lbGYuaApAQCAtNSw3ICs1LDYgQEAKICAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdXNlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1oODMwMC9oYXJkaXJxLmgKaW5kZXggZTk2MWJmZS4uMThmYTc5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2hhcmRpcnEuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX19IODMwMF9IQVJESVJRX0gKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2lvLmggYi9pbmNsdWRlL2FzbS1oODMwMC9pby5oCmluZGV4IDE3NzNlMzcuLjkxYjc0ODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL2lvLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvaW8uaApAQCAtMyw3ICszLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfSDgzMDA3KSB8fCBkZWZpbmVkKENPTkZJR19IODMwNjgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9rZXlib2FyZC5oIGIvaW5jbHVkZS9hc20taDgzMDAva2V5Ym9hcmQuaAppbmRleCBiMDVkMTEzLi5mYmFkNjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9rZXlib2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2tleWJvYXJkLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9IODMwMF9LRVlCT0FSRF9ICiAjZGVmaW5lIF9IODMwMF9LRVlCT0FSRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogZHVtbXkgaS5lLiBubyByZWFsIGtleWJvYXJkICovCiAjZGVmaW5lIGtiZF9zZXRrZXljb2RlKHguLi4pCSgtRU5PU1lTKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL21tdV9jb250ZXh0LmgKaW5kZXggMjNiNTU1Yi4uODU1NzIxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9tbXVfY29udGV4dC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0g4MzAwX01NVV9DT05URVhUX0gKICNkZWZpbmUgX19IODMwMF9NTVVfQ09OVEVYVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9wYWdlLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wYWdlLmgKaW5kZXggNjQ3MmM5Zi4uZjlmOWQzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0g4MzAwX1BBR0VfSAogI2RlZmluZSBfSDgzMDBfUEFHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcGFnZV9vZmZzZXQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3BhZ2Vfb2Zmc2V0LmgKaW5kZXggOGNjNmUxNy4uZjg3MDY0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvcGFnZV9vZmZzZXQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wYWdlX29mZnNldC5oCkBAIC0xLDQgKzEsMyBAQAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwMDAwMDAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9wYXJhbS5oIGIvaW5jbHVkZS9hc20taDgzMDAvcGFyYW0uaAppbmRleCAxMjZkZGRmLi5jMjU4MDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3BhcmFtLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9IODMwMF9QQVJBTV9ICiAjZGVmaW5lIF9IODMwMF9QQVJBTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBIWgogI2RlZmluZSBIWiAxMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3BndGFibGUuaAppbmRleCBmNmUyOTZmLi44YjdjNjg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvcGd0YWJsZS5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3Byb2Nlc3Nvci5oCmluZGV4IGM2ZjBhNzEwLi5jN2UyZjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wcm9jZXNzb3IuaApAQCAtMTcsNyArMTcsNiBAQAogICovCiAjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgX19sYWJlbF9fIF9sOyBfbDogJiZfbDt9KQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2VtYXBob3JlLWhlbHBlci5oCmluZGV4IDI5ZTBmYmYuLjRmZWEzNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3NlbWFwaG9yZS1oZWxwZXIuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zZW1hcGhvcmUtaGVscGVyLmgKQEAgLTEwLDcgKzEwLDYgQEAKICAqIG02OGsgdmVyc2lvbiBieSBBbmRyZWFzIFNjaHdhYgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc2htLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zaG0uaAppbmRleCBiZWM3NTg1Li5lZDY2MjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9zaG0uaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zaG0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0g4MzAwX1NITV9ICiAjZGVmaW5lIF9IODMwMF9TSE1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGZvcm1hdCBvZiBwYWdlIHRhYmxlIGVudHJpZXMgdGhhdCBjb3JyZXNwb25kIHRvIHNoYXJlZCBtZW1vcnkgcGFnZXMKICAgIGN1cnJlbnRseSBvdXQgaW4gc3dhcCBzcGFjZSAoc2VlIGFsc28gbW0vc3dhcC5jKToKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKaW5kZXggOGU4MWNmNi4uMTM0ZTA5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9IODMwMF9TWVNURU1fSAogI2RlZmluZSBfSDgzMDBfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiAvKiBnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3VuYWxpZ25lZC5oCmluZGV4IDhhOTM5NjEuLmZmYjY3ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3VuYWxpZ25lZC5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3VuYWxpZ25lZC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0g4MzAwX1VOQUxJR05FRF9ICiAjZGVmaW5lIF9fSDgzMDBfVU5BTElHTkVEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBVc2UgbWVtbW92ZSBoZXJlLCBzbyBnY2MgZG9lcyBub3QgaW5zZXJ0IGEgX19idWlsdGluX21lbWNweS4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaAppbmRleCBhZGIwNTE1Li4yMjZkZDU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaApAQCAtMjkyLDYgKzI5Miw4IEBACiAjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjg3CiAjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODgKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9zeXNjYWxscyAyODkKIAogCkBAIC00NjAsNyArNDYyLDYgQEAKICAgX19zeXNjYWxsX3JldHVybih0eXBlLCBfX3Jlcyk7CQkJXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVApAQCAtNDgzLDcgKzQ4NCw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtNTM0LDcgKzUzNCw3IEBACiAJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCiAJCQkJc2l6ZV90IHNpZ3NldHNpemUpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC01NDMsNCArNTQzLDUgQEAKICAgYXNtICgiLndlYWtcdF8iICNuYW1lICJcbiIJCQkJXAogICAgICAgICIuc2V0XHRfIiAjbmFtZSAiLF9zeXNfbmlfc3lzY2FsbCIpOwogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fSDgzMDBfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC92aXJ0Y29udmVydC5oIGIvaW5jbHVkZS9hc20taDgzMDAvdmlydGNvbnZlcnQuaAppbmRleCAzYjM0NGMxLi5lZTdkNWVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC92aXJ0Y29udmVydC5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3ZpcnRjb252ZXJ0LmgKQEAgLTcsNyArNyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oCmluZGV4IDI4ODIzM2YuLmNjOWI5NDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUElDX0gKICNkZWZpbmUgX19BU01fQVBJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKaW5kZXggNGRkY2U1Mi4uNGYwNjFmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FSQ0hfSTM4Nl9BVE9NSUNfXwogI2RlZmluZSBfX0FSQ0hfSTM4Nl9BVE9NSUNfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oCmluZGV4IDA4ZGVhZWUuLjFjNzgwZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaApAQCAtNSw3ICs1LDYgQEAKICAqIENvcHlyaWdodCAxOTkyLCBMaW51cyBUb3J2YWxkcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9idWcuaCBiL2luY2x1ZGUvYXNtLWkzODYvYnVnLmgKaW5kZXggOGY3OWRlMS4uODA2MmNkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2J1Zy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSTM4Nl9CVUdfSAogI2RlZmluZSBfSTM4Nl9CVUdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUZWxsIHRoZSB1c2VyIHRoZXJlIGlzIHNvbWUgcHJvYmxlbS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYnVncy5oIGIvaW5jbHVkZS9hc20taTM4Ni9idWdzLmgKaW5kZXggNTAyMzNlMC4uMmE5ZTRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9idWdzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9idWdzLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqCXZvaWQgY2hlY2tfYnVncyh2b2lkKTsKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtLWkzODYvYnl0ZW9yZGVyLmgKaW5kZXggYTBkNzNmNC4uYTQ1NDcwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9ieXRlb3JkZXIuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2J5dGVvcmRlci5oCkBAIC04LDcgKzgsNiBAQAogCiAvKiBGb3IgYXZvaWRpbmcgYnN3YXAgb24gaTM4NiAqLwogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNlbmRpZgogCiBzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9jYWNoZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9jYWNoZS5oCmluZGV4IGNhMTVjOWMuLjU3YzYyZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2NhY2hlLmgKQEAgLTQsNyArNCw2IEBACiAjaWZuZGVmIF9fQVJDSF9JMzg2X0NBQ0hFX0gKICNkZWZpbmUgX19BUkNIX0kzODZfQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIEwxIGNhY2hlIGxpbmUgc2l6ZSAqLwogI2RlZmluZSBMMV9DQUNIRV9TSElGVAkoQ09ORklHX1g4Nl9MMV9DQUNIRV9TSElGVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZG1hLmggYi9pbmNsdWRlL2FzbS1pMzg2L2RtYS5oCmluZGV4IGYyNGIyYmIuLmQyM2FhYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9kbWEuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX0FTTV9ETUFfSAogI2RlZmluZSBfQVNNX0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkvKiBBbmQgc3BpbmxvY2tzICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLWkzODYvZml4bWFwLmgKaW5kZXggY2ZiMWM2MS4uZjdlMDY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9maXhtYXAuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2ZpeG1hcC5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9BU01fRklYTUFQX0gKICNkZWZpbmUgX0FTTV9GSVhNQVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIHVzZWQgYnkgdm1hbGxvYy5jLCB2c3lzY2FsbC5sZHMuUy4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWkzODYvaGFyZGlycS5oCmluZGV4IGVlNzU0ZDMuLjBlMzU4ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaGFyZGlycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaGlnaG1lbS5oIGIvaW5jbHVkZS9hc20taTM4Ni9oaWdobWVtLmgKaW5kZXggMGZkMzMxMy4uZTlhMzRlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9oaWdobWVtLmgKQEAgLTIwLDcgKzIwLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9ocGV0LmggYi9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaAppbmRleCA3ZjFhOGE2Li5hZjVkNDM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1pMzg2L2h3X2lycS5oCmluZGV4IDYyMjgxNWIuLjk1ZDNmZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9od19pcnEuaApAQCAtMTIsNyArMTIsNiBAQAogICoJPHRvbXNvZnRAaW5mb3JtYXRpay50dS1jaGVtbml0ei5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2lkZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9pZGUuaAppbmRleCA0NTQ0NDAxLi43MzQ2NWQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaWRlLmgKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIE1BWF9IV0lGUwogIyBpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaW8uaCBiL2luY2x1ZGUvYXNtLWkzODYvaW8uaAppbmRleCA3OTY3MGJiLi5iMzcyNGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2lvLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pby5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0lPX0gKICNkZWZpbmUgX0FTTV9JT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvaW9fYXBpYy5oCmluZGV4IGQ5MmUyNTMuLjUwOTJlODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaW9fYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaW9fYXBpYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9JT19BUElDX0gKICNkZWZpbmUgX19BU01fSU9fQVBJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaXJxLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lycS5oCmluZGV4IDUxNjlkN2EuLjMzMTcyNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pcnEuaApAQCAtMTAsNyArMTAsNiBAQAogICoJPHRvbXNvZnRAaW5mb3JtYXRpay50dS1jaGVtbml0ei5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIC8qIGluY2x1ZGUgY29tZXMgZnJvbSBtYWNoaW5lIHNwZWNpZmljIGRpcmVjdG9yeSAqLwogI2luY2x1ZGUgImlycV92ZWN0b3JzLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWkzODYva21hcF90eXBlcy5oCmluZGV4IDY4ODZhMGMuLjgwNmFhZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYva21hcF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYva21hcF90eXBlcy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAogI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQogIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfYXBpYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaAppbmRleCAzZDZkMTI5Li45ZmQwNzMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9hcGljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ19ICiAjZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNkZWZpbmUgZXNyX2Rpc2FibGUgKDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1pMzg2L21tdV9jb250ZXh0LmgKaW5kZXggYmYwODIxOC4uNjJiN2JmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbW11X2NvbnRleHQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19JMzg2X1NDSEVEX0gKICNkZWZpbmUgX19JMzg2X1NDSEVEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L210cnIuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXRyci5oCmluZGV4IDY0Y2Y5MzcuLjVhNDZkZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbXRyci5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbXRyci5oCkBAIC0yMyw3ICsyMyw2IEBACiAjaWZuZGVmIF9MSU5VWF9NVFJSX0gKICNkZWZpbmUgX0xJTlVYX01UUlJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWkzODYvcGFnZS5oCmluZGV4IDMwZjUyYTIuLmUzYTU1MmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGFnZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl9VU0VfM0ROT1cKIApAQCAtMTM3LDkgKzEzNiw5IEBACiAJKChjdXJyZW50LT5wZXJzb25hbGl0eSAmIFJFQURfSU1QTElFU19FWEVDKSA/IFZNX0VYRUMgOiAwICkgfCBcCiAJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYgLyogX0kzODZfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BhcmFtLmgKaW5kZXggMDk1NTgwZi4uNzQ1ZGM1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGFyYW0uaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0FTTWkzODZfUEFSQU1fSAogCiAjaWZkZWYgX19LRVJORUxfXwotIyBpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICMgZGVmaW5lIEhaCQlDT05GSUdfSFoJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLwogIyBkZWZpbmUgVVNFUl9IWgkxMDAJCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCiAjIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wY2kuaCBiL2luY2x1ZGUvYXNtLWkzODYvcGNpLmgKaW5kZXggNzhjODU5ODVhLi42NGI2ZDBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGNpLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9faTM4Nl9QQ0lfSAogI2RlZmluZSBfX2kzODZfUENJX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igc3RydWN0IHBhZ2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgKaW5kZXggMDM4MGMzZC4uNGIxZTYxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9JMzg2X1BHQUxMT0NfSAogI2RlZmluZSBfSTM4Nl9QR0FMTE9DX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4JCS8qIGZvciBzdHJ1Y3QgcGFnZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAppbmRleCA2NzJjM2Y3Li4wOTY5N2ZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0kzODZfUEdUQUJMRV9ICiAjZGVmaW5lIF9JMzg2X1BHVEFCTEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgYXNzdW1lcyBhIHRocmVlLWxldmVsIHBhZ2UgdGFibGUgc2V0dXAuIE9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaAppbmRleCA4MDVmMGRjLi40ZGYzODE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcHJvY2Vzc29yLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zZXJpYWwuaAppbmRleCBlMWVjZmNjLi5iZDY3NDgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmgKQEAgLTIsNyArMiw2IEBACiAgKiBpbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zbXAuaCBiL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKaW5kZXggNjFkM2FiOS4uMTQyZDEwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCkBAIC01LDcgKzUsNiBAQAogICogV2UgbmVlZCB0aGUgQVBJQyBkZWZpbml0aW9ucyBhdXRvbWF0aWNhbGx5IGFzIHBhcnQgb2YgJ3NtcC5oJwogICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmgKaW5kZXggZDc2Yjc2OS4uMDRiYTMwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc3BpbmxvY2suaApAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3J3bG9jay5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1pMzg2L3N0cmluZy5oCmluZGV4IGJiNWY4OGEuLmI5Mjc3MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zdHJpbmcuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0kzODZfU1RSSU5HX0hfCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAvKgogICogT24gYSA0ODYgb3IgUGVudGl1bSwgd2UgYXJlIGJldHRlciBvZmYgbm90IHVzaW5nIHRoZQogICogYnl0ZSBzdHJpbmcgb3BlcmF0aW9ucy4gQnV0IG9uIGEgMzg2IG9yIGEgUFBybyB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCmluZGV4IDE5Y2M3OWMuLjAyNDlmOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU1lTVEVNX0gKICNkZWZpbmUgX19BU01fU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWkzODYvdGhyZWFkX2luZm8uaAppbmRleCAxZjdkNDhjLi44NDIwZWQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90aHJlYWRfaW5mby5oCkBAIC05LDcgKzksNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1pMzg2L3RpbWV4LmgKaW5kZXggMjkyYjVhNi4uZDQzNDk4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdGltZXguaApAQCAtNiw3ICs2LDYgQEAKICNpZm5kZWYgX0FTTWkzODZfVElNRVhfSAogI2RlZmluZSBfQVNNaTM4Nl9USU1FWF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X0VMQU4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWkzODYvdGxiZmx1c2guaAppbmRleCBhYjIxNmUxLi5kNTdjYTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSTM4Nl9UTEJGTFVTSF9ICiAjZGVmaW5lIF9JMzg2X1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3R5cGVzLmggYi9pbmNsdWRlL2FzbS1pMzg2L3R5cGVzLmgKaW5kZXggZTUwYTA4Yi4uNGI0YjI5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdHlwZXMuaApAQCAtMzUsNyArMzUsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHR5cGVkZWYgc2lnbmVkIGNoYXIgczg7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oCmluZGV4IDM3MTQ1N2IuLjFlYzY1NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oCkBAIC00LDcgKzQsNiBAQAogLyoKICAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKaW5kZXggZWI0YjE1Mi4uZGUyY2NjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCkBAIC0zMjMsNiArMzIzLDggQEAKICNkZWZpbmUgX19OUl90ZWUJCTMxNQogI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkzMTYKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9zeXNjYWxscyAzMTcKIAogLyoKQEAgLTQyMiw3ICs0MjQsNiBAQAogX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVApAQCAtNDQ2LDcgKzQ0Nyw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCiAJCQkJc2l6ZV90IHNpZ3NldHNpemUpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC00OTcsNCArNDk3LDUgQEAKICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogI2VuZGlmCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9JMzg2X1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9hc21tYWNyby5oIGIvaW5jbHVkZS9hc20taWE2NC9hc21tYWNyby5oCmluZGV4IGVkZjJjZWIuLmMyMmI0NjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvYXNtbWFjcm8uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2FzbW1hY3JvLmgKQEAgLTYsNyArNiw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIEVOVFJZKG5hbWUpCQkJCVwKIAkuYWxpZ24gMzI7CQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGUuaAppbmRleCBmMGExMDRkLi5lNzQ4MmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9jYWNoZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfQ0FDSEVfSAogI2RlZmluZSBfQVNNX0lBNjRfQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBIZXdsZXR0LVBhY2thcmQgQ28KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLWlhNjQvZGVsYXkuaAppbmRleCBiYmE3MDIwLi5hMzBhNjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2RlbGF5LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9kZWxheS5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgRG9uIER1Z2dlciA8ZG9uLmR1Z2dlckBpbnRlbC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWlhNjQvZG1hLW1hcHBpbmcuaAppbmRleCBkZjY3ZDQwLi45OWE4ZjhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9kbWEtbWFwcGluZy5oCkBAIC01LDcgKzUsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogCiAjZGVmaW5lIGRtYV9hbGxvY19jb2hlcmVudAlwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvZG1hLmggYi9pbmNsdWRlL2FzbS1pYTY0L2RtYS5oCmluZGV4IDNiZTFiNDkuLmRhZDNhNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9kbWEuaApAQCAtNiw3ICs2LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG5lZWQgYnl0ZSBJTyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2VsZi5oIGIvaW5jbHVkZS9hc20taWE2NC9lbGYuaAppbmRleCA0NDZmY2UwLi4yNWY5ODM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmgKQEAgLTgsNyArOCw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaGFyZGlycS5oCmluZGV4IDMzZWY4ZjAuLjE0MGU0OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaGFyZGlycS5oCkBAIC02LDcgKzYsNiBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaWEzMi5oIGIvaW5jbHVkZS9hc20taWE2NC9pYTMyLmgKaW5kZXggZjgwNDRhMS4uNWZmOGQ3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9pYTMyLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9pYTMyLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fSUE2NF9JQTMyX0gKICNkZWZpbmUgX0FTTV9JQTY0X0lBMzJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9pZGUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaWRlLmgKaW5kZXggOTNmNDVjNS4uZTkyODY3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2lkZS5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2ludHJpbnNpY3MuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaW50cmluc2ljcy5oCmluZGV4IDgwODlmOTUuLjNhOTVhYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvaW50cmluc2ljcy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaW50cmluc2ljcy5oCkBAIC05LDcgKzksNiBAQAogICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGluY2x1ZGUgY29tcGlsZXIgc3BlY2lmaWMgaW50cmluc2ljcyAqLwogI2luY2x1ZGUgPGFzbS9pYTY0cmVncy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1pYTY0L2ttYXBfdHlwZXMuaAppbmRleCBiYzc3NzUyLi41ZDE2NThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2ttYXBfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2ttYXBfdHlwZXMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9JQTY0X0tNQVBfVFlQRVNfSAogI2RlZmluZSBfQVNNX0lBNjRfS01BUF9UWVBFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAjIGRlZmluZSBEKG4pIF9fS01fRkVOQ0VfIyNuICwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlYy5oIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKaW5kZXggYTljOTk1YS4uMGRmNzJhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9JQTY0X01BQ0hWRUNfSAogI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uczogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKaW5kZXggNDY1MDFiMC4uODk0YmM0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKQEAgLTcsNyArNyw2IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIEVudHJpZXMgZGVmaW5lZCBzbyBmYXI6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L25vZGVkYXRhLmggYi9pbmNsdWRlL2FzbS1pYTY0L25vZGVkYXRhLmgKaW5kZXggOTk3OGM3Yy4uYTE0MDMxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9ub2RlZGF0YS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbm9kZWRhdGEuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfTk9ERURBVEFfSAogI2RlZmluZSBfQVNNX0lBNjRfTk9ERURBVEFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbnVtYS5oPgogCiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9udW1hLmggYi9pbmNsdWRlL2FzbS1pYTY0L251bWEuaAppbmRleCBkYWU2YWViLi5lNWE4MjYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L251bWEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L251bWEuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfTlVNQV9ICiAjZGVmaW5lIF9BU01fSUE2NF9OVU1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX05VTUEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaAppbmRleCAyMDg3ODI1Li5mNWE5NDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaApAQCAtNyw3ICs3LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wYXJhbS5oIGIvaW5jbHVkZS9hc20taWE2NC9wYXJhbS5oCmluZGV4IDVlMWUwZDIuLjQ5YzYyZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BhcmFtLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLwogCiAjaWZkZWYgX19LRVJORUxfXwotIyBpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JLyogbXVzdG4ndCBpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gb3V0c2lkZSBvZiAjaWZkZWYgX19LRVJORUxfXyAqLwogIyBpZmRlZiBDT05GSUdfSUE2NF9IUF9TSU0KICAgLyoKICAgICogWWVhaCwgc2ltdWxhdGluZyBzdHVmZiBpcyBzbG93LCBzbyBsZXQgdXMgY2F0Y2ggc29tZSBicmVhdGggYmV0d2VlbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGVyY3B1LmgKaW5kZXggMmIxNGRlZS4uYWUzNTdkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BlcmNwdS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjIGRlZmluZSBUSElTX0NQVSh2YXIpCShwZXJfY3B1X18jI3ZhcikgIC8qIHVzZSB0aGlzIHRvIG1hcmsgYWNjZXNzZXMgdG8gcGVyLUNQVSB2YXJpYWJsZXMuLi4gKi8KICNlbHNlIC8qICFfX0FTU0VNQkxZX18gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oCmluZGV4IGYyZjIzMzguLjljYjY4ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIEdvdXRoYW0gUmFvIDxnb3V0aGFtLnJhb0BpbnRlbC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAppbmRleCBjMGY4MTQ0Li5lYWFjMDhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaApAQCAtMTIsNyArMTIsNiBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9tbWFuLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oCmluZGV4IGIzYmQ1OGUuLjI2NWY0ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaApAQCAtMTMsNyArMTMsNiBAQAogICogMDYvMTYvMDAJQS4gTWFsbGljawlhZGRlZCBjc2Qvc3NkL3Rzc2QgZm9yIGlhMzIgc3VwcG9ydAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjaW5jbHVkZSA8YXNtL2tyZWdzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3B0cmFjZS5oIGIvaW5jbHVkZS9hc20taWE2NC9wdHJhY2UuaAppbmRleCA5NDcxY2RjLi40MTVhYmIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmgKQEAgLTU0LDcgKzU0LDYgQEAKICAqIFRoaXMgaXMgYmVjYXVzZSBhci5lYyBpcyBzYXZlZCBhcyBwYXJ0IG9mIGFyLnBmcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaWZuZGVmIEFTTV9PRkZTRVRTX0MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc21wLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCmluZGV4IGEzOTE0MzUuLjcxOWZmMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc21wLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbXAuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfU01QX0gKICNkZWZpbmUgX0FTTV9JQTY0X1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zaW11bGF0b3IuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc2ltdWxhdG9yLmgKaW5kZXggMTZhNDhiNS4uYzNmZDNlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9zaW11bGF0b3IuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NpbXVsYXRvci5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfU05fU0lNVUxBVE9SX0gKICNkZWZpbmUgX0FTTV9JQTY0X1NOX1NJTVVMQVRPUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBTTk1BR0lDIDB4YWVlZWVlZWU4YmFkYmVlZkwKICNkZWZpbmUgSVNfTUVEVVNBKCkJCQkoe2xvbmcgc247IGFzbSgibW92ICUwPWNwdWlkWyUxXSIgOiAiPXIiKHNuKSA6ICJyIigyKSk7IHNuID09IFNOTUFHSUM7fSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fY3B1aWQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fY3B1aWQuaAppbmRleCA3NDlkZWIyLi5hNjc2ZGQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX2NwdWlkLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9jcHVpZC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fSUE2NF9TTl9TTl9DUFVJRF9ICiAjZGVmaW5lIF9BU01fSUE2NF9TTl9TTl9DUFVJRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KICNpbmNsdWRlIDxhc20vc24vcGRhLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaAppbmRleCA1MWFjYTAyLi44Yzg2NWU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2FsLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3NuX2NwdWlkLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24veHBjLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwYy5oCmluZGV4IGFhM2I4YWMuLjg0MDZmMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24veHBjLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi94cGMuaApAQCAtMTUsNyArMTUsNiBAQAogI2RlZmluZSBfQVNNX0lBNjRfU05fWFBDX0gKIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3N0cmluZy5oIGIvaW5jbHVkZS9hc20taWE2NC9zdHJpbmcuaAppbmRleCA0MzUwMmQzLi44NWZkNjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc3RyaW5nLmgKQEAgLTksNyArOSw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiByZW1vdmUgdGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgQS1zdGVwIHdvcmthcm91bmQuLi4gKi8KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJMRU4JMSAvKiBzZWUgYXJjaC9pYTY0L2xpYi9zdHJsZW4uUyAqLwogI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQJMSAvKiBzZWUgYXJjaC9pYTY0L2xpYi9tZW1zZXQuUyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKaW5kZXggMmYzNjIwNS4uNjVkYjQzY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaApAQCAtMTIsNyArMTIsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IEFzaXQgTWFsbGljayA8YXNpdC5rLm1hbGxpY2tAaW50ZWwuY29tPgogICogQ29weXJpZ2h0IChDKSAxOTk5IERvbiBEdWdnZXIgPGRvbi5kdWdnZXJAaW50ZWwuY29tPgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20va3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC90bGIuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdGxiLmgKaW5kZXggODM0MzcwYi4uMjZlZGNiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90bGIuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3RsYi5oCkBAIC0zNyw3ICszNyw2IEBACiAgKgl9CiAgKgl0bGJfZmluaXNoX21tdSh0bGIsIHN0YXJ0LCBlbmQpOwkvLyBmaW5pc2ggdW5tYXAgZm9yIGFkZHJlc3Mgc3BhY2UgTU0KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaAppbmRleCBhMzViMzIzLi5jZjlhY2I5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCkBAIC02LDcgKzYsNiBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCmluZGV4IDcxMDc3NjMuLjYzMmYyZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaApAQCAtMjk0LDcgKzI5NCw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBOUl9zeXNjYWxscwkJCTI3OSAvKiBsZW5ndGggb2Ygc3lzY2FsbCB0YWJsZSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2Fzc2VtYmxlci5oIGIvaW5jbHVkZS9hc20tbTMyci9hc3NlbWJsZXIuaAppbmRleCAxYTFhYTE3Li40NzA0MWQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2Fzc2VtYmxlci5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvYXNzZW1ibGVyLmgKQEAgLTksNyArOSw2IEBACiAgKiBUaGlzIGZpbGUgY29udGFpbnMgTTMyUiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbWFjcm8gZGVmaW5pdGlvbnMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fU1RSCiAjaWZkZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tbTMyci9hdG9taWMuaAppbmRleCAzMTIyZmUxLi5mNWE3ZDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvYXRvbWljLmgKQEAgLTksNyArOSw2IEBACiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDQgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tbTMyci9iaXRvcHMuaAppbmRleCA5MDJhMzY2Li42NmFiNjcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvYml0b3BzLmgKQEAgLTExLDcgKzExLDYgQEAKICAqICAgIENvcHlyaWdodCAoQykgMjAwNCAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tbTMyci9jYWNoZWZsdXNoLmgKaW5kZXggZTU3NDI3Yi4uOGIyNjFiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9jYWNoZWZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTTMyUl9DQUNIRUZMVVNIX0gKICNkZWZpbmUgX0FTTV9NMzJSX0NBQ0hFRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogZXh0ZXJuIHZvaWQgX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tbTMyci9oYXJkaXJxLmgKaW5kZXggNWRhODMwZS4uY2I4YWE3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9oYXJkaXJxLmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9fQVNNX0hBUkRJUlFfSAogI2RlZmluZSBfX0FTTV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9pZGUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvaWRlLmgKaW5kZXggZjdhYTk2OS4uMjE5YTBmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2lkZS5oCkBAIC0xNSw3ICsxNSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBNQVhfSFdJRlMKICMgaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2lycS5oIGIvaW5jbHVkZS9hc20tbTMyci9pcnEuaAppbmRleCBjYTk0Mzk1Li4yZjkzZjQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvaXJxLmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9BU01fTTMyUl9JUlFfSAogI2RlZmluZSBfQVNNX00zMlJfSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVF9BbHBoYSkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9VU1JWKQogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tbTMyci9rbWFwX3R5cGVzLmgKaW5kZXggNzQyOTU5MS4uMDUyNGQ4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9rbWFwX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9rbWFwX3R5cGVzLmgKQEAgLTMsNyArMyw2IEBACiAKIC8qIER1bW15IGhlYWRlciBqdXN0IHRvIGRlZmluZSBrbV90eXBlLiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQogIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL20zMjEwNHV0L20zMjEwNHV0X3BsZC5oIGIvaW5jbHVkZS9hc20tbTMyci9tMzIxMDR1dC9tMzIxMDR1dF9wbGQuaAppbmRleCBhNGVhYzIwLi42YmE0ZGRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL20zMjEwNHV0L20zMjEwNHV0X3BsZC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTA0dXQvbTMyMTA0dXRfcGxkLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX00zMjEwNFVUX00zMjEwNFVUX1BMRF9ICiAjZGVmaW5lIF9NMzIxMDRVVF9NMzIxMDRVVF9QTERfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjEwNFVUKQogI2RlZmluZSBQTERfUExBVF9CQVNFCQkweDAyYzAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X2xhbi5oIGIvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sYW4uaAppbmRleCA1MDU0NWVjLi5jMDUwYjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X2xhbi5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfbGFuLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX00zMjcwMFVUX00zMjcwMFVUX0xBTl9ICiAjZGVmaW5lIF9NMzI3MDBVVF9NMzI3MDBVVF9MQU5fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sY2QuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfbGNkLmgKaW5kZXggZWRlNmM3Ny4uNGRhNGU4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sY2QuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X2xjZC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9NMzI3MDBVVF9NMzI3MDBVVF9MQ0RfSAogI2RlZmluZSBfTTMyNzAwVVRfTTMyNzAwVVRfTENEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfcGxkLmggYi9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oCmluZGV4IGY1ZTQ3OTQuLmYzNWY5MTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfcGxkLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9wbGQuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfTTMyNzAwVVRfTTMyNzAwVVRfUExEX0gKICNkZWZpbmUgX00zMjcwMFVUX00zMjcwMFVUX1BMRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVRfQWxwaGEpCiAjZGVmaW5lIFBMRF9QTEFUX0JBU0UJCTB4MDhjMDAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyci5oIGIvaW5jbHVkZS9hc20tbTMyci9tMzJyLmgKaW5kZXggYjEzM2NhNi4uZGVjZmM1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9tMzJyLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tMzJyLmgKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFJlbmVzYXMgVGVjaG5vbG9neSBDb3JwLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogQ2hpcCB0eXBlICovCiAjaWYgZGVmaW5lZChDT05GSUdfQ0hJUF9YTlVYX01QKSB8fCBkZWZpbmVkKENPTkZJR19DSElQX1hOVVgyX01QKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tbXUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbW11LmgKaW5kZXggOWMwMGViNy4uY2YzZjZkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL21tdS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX00zMlJfTU1VX0gKICNkZWZpbmUgX0FTTV9NMzJSX01NVV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmICFkZWZpbmVkKENPTkZJR19NTVUpCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1tMzJyL21tdV9jb250ZXh0LmgKaW5kZXggMzYzNGM1My4uNTQyMzAyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbW11X2NvbnRleHQuaApAQCAtMyw3ICszLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL20zMnIuaD4KIApAQCAtMTUsNyArMTQsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X2xhbi5oIGIvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X2xhbi5oCmluZGV4IDdhMmE4MzkuLjYxOTQ4MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sYW4uaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfbGFuLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX09QU1BVVF9PUFNQVVRfTEFOX0gKICNkZWZpbmUgX09QU1BVVF9PUFNQVVRfTEFOX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sY2QuaCBiL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sY2QuaAppbmRleCAzYTg4M2UzLi40NGNmZDdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfbGNkLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X2xjZC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9PUFNQVVRfT1BTUFVUX0xDRF9ICiAjZGVmaW5lIF9PUFNQVVRfT1BTUFVUX0xDRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfcGxkLmggYi9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfcGxkLmgKaW5kZXggMjAxOGU2OS4uNDYyOTZmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X3BsZC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9wbGQuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfT1BTUFVUX09QU1BVVF9QTERfSAogI2RlZmluZSBfT1BTUFVUX09QU1BVVF9QTERfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgUExEX1BMQVRfQkFTRQkJMHgxY2MwMDAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcGFnZS5oCmluZGV4IDlkZGJjMDguLjk2ODhiZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX00zMlJfUEFHRV9ICiAjZGVmaW5lIF9BU01fTTMyUl9QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwogI2RlZmluZSBQQUdFX1NISUZUCTEyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcGdhbGxvYy5oCmluZGV4IDZkYTMwOWIuLmUwOWE4NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcGdhbGxvYy5oCkBAIC0zLDcgKzMsNiBAQAogCiAvKiAkSWQkICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUtMmxldmVsLmggYi9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUtMmxldmVsLmgKaW5kZXggODYxNzI3Yy4uYmUwZjE2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLTJsZXZlbC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS0ybGV2ZWwuaApAQCAtMyw3ICszLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogdHJhZGl0aW9uYWwgTTMyUiB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZToKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmgKaW5kZXggNzU3NDBkZS4uMTk4M2I3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmgKQEAgLTIwLDcgKzIwLDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcHJvY2Vzc29yLmgKaW5kZXggMDlmZDE4MS4uMzI3NTViZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3Byb2Nlc3Nvci5oCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4gIC8qIHB0X3JlZ3MgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmgKaW5kZXggNTNjNzkyNC4uYTA3ZmE5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3B0cmFjZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKiAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL20zMnIuaD4JCS8qIE0zMlJfUFNXX0JTTSwgTTMyUl9QU1dfQlBNICovCiAKIC8qIDAgLSAxMyBhcmUgaW50ZWdlciByZWdpc3RlcnMgKGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMpLiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcnRjLmggYi9pbmNsdWRlL2FzbS1tMzJyL3J0Yy5oCmluZGV4IGVjM2NkZjYuLjZiMmI4MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcnRjLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9ydGMuaApAQCAtNCw3ICs0LDYgQEAKICNkZWZpbmUgX19SVENfSF9fCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAgICAvKiBEYWxsYXMgRFMxMzAyIGNsb2NrL2NhbGVuZGFyIHJlZ2lzdGVyIG51bWJlcnMuICovCiAjICBkZWZpbmUgUlRDX1NFQ09ORFMgICAgICAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaAppbmRleCA4MTc1MGVkLi40MWU0NWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2VtYXBob3JlLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NlcmlhbC5oCmluZGV4IDFiZjQ4MGYuLjVhYzI0NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zZXJpYWwuaApAQCAtMyw3ICszLDYgQEAKIAogLyogaW5jbHVkZS9hc20tbTMyci9zZXJpYWwuaCAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgQkFTRV9CQVVECTExNTIwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc2lnY29udGV4dC5oCmluZGV4IDk0MmI4YTMuLjczMDI1YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc2lnY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2lnY29udGV4dC5oCkBAIC0zLDcgKzMsNiBAQAogCiAvKiAkSWQkICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogc3RydWN0IHNpZ2NvbnRleHQgewogCS8qIENQVSByZWdpc3RlcnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc21wLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oCmluZGV4IDExODQyOTMuLjY1MGQyNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaApAQCAtMyw3ICszLDYgQEAKIAogLyogJElkJCAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tbTMyci9zcGlubG9jay5oCmluZGV4IDdkZTdkZWYuLmY5NGMxYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NwaW5sb2NrLmgKQEAgLTksNyArOSw2IEBACiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDQgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JLyogQ09ORklHX0RFQlVHX1NQSU5MT0NLLCBDT05GSUdfU01QICovCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oCmluZGV4IGU1NTAxM2YuLjMzNTY3ZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaApAQCAtMTAsNyArMTAsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci90aW1leC5oIGIvaW5jbHVkZS9hc20tbTMyci90aW1leC5oCmluZGV4IGFiZjEyZTcuLmU4OWJmZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3RpbWV4LmgKQEAgLTksNyArOSw2IEBACiAgKiBtMzJyIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJKENPTkZJR19CVVNfQ0xPQ0sgLyBDT05GSUdfVElNRVJfRElWSURFKQogI2RlZmluZSBDTE9DS19USUNLX0ZBQ1RPUgkyMAkvKiBGYWN0b3Igb2YgYm90aCAxMDAwMDAwIGFuZCBDTE9DS19USUNLX1JBVEUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLW0zMnIvdGxiZmx1c2guaAppbmRleCBiYzdjNDA3Li5hZTQ0OTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci90bGJmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX00zMlJfVExCRkxVU0hfSAogI2RlZmluZSBfQVNNX00zMlJfVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL20zMnIuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKaW5kZXggODE5Y2MyOC4uMjZlOTc4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKQEAgLTExLDcgKzExLDYgQEAKIC8qCiAgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oCmluZGV4IGJlMGViMDEuLmNjMzE3OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaApAQCAtMjk1LDYgKzI5NSw4IEBACiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9zeXNjYWxscyAyODUKIAogLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjQ6IHNlZQpAQCAtNDA1LDcgKzQwNyw2IEBACiBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KQEAgLTQyMSw3ICs0MjIsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVCAvKndpbGwgYmUgdW51c2VkKi8KICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtNDcwLDQgKzQ3MCw1IEBACiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKICNlbmRpZgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fTTMyUl9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmgKaW5kZXggNzMyZDY5Ni4uZDVlZWQ2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2F0b21pYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FSQ0hfTTY4S19BVE9NSUNfXwogI2RlZmluZSBfX0FSQ0hfTTY4S19BVE9NSUNfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CS8qIGxvY2FsX2lycV9YWFgoKSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oIGIvaW5jbHVkZS9hc20tbTY4ay9idWcuaAppbmRleCAwNzJjZTI3Li43YjYwNzc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYnVnLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9NNjhLX0JVR19ICiAjZGVmaW5lIF9NNjhLX0JVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19CVUcKICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tbTY4ay9kbWEtbWFwcGluZy5oCmluZGV4IGIxOTIwYzcuLmRmZmQ1OWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2RtYS1tYXBwaW5nLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9NNjhLX0RNQV9NQVBQSU5HX0gKICNkZWZpbmUgX002OEtfRE1BX01BUFBJTkdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUENJCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZG1hLmggYi9pbmNsdWRlL2FzbS1tNjhrL2RtYS5oCmluZGV4IGQ1MjY2YTguLmQwYzllNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9kbWEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX002OEtfRE1BX0gKICNkZWZpbmUgX002OEtfRE1BX0ggMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGl0J3MgdXNlbGVzcyBvbiB0aGUgbTY4aywgYnV0IHVuZm9ydHVuYXRlbHkgbmVlZGVkIGJ5IHRoZSBuZXcKICAgIGJvb3RtZW0gYWxsb2NhdG9yIChidXQgdGhpcyBzaG91bGQgZG8gaXQgZm9yIHRoaXMpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2R2bWEuaCBiL2luY2x1ZGUvYXNtLW02OGsvZHZtYS5oCmluZGV4IDU5NzhmODcuLmUxMTEyZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZHZtYS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZHZtYS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfX002OEtfRFZNQV9ICiAjZGVmaW5lIF9fTTY4S19EVk1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIERWTUFfUEFHRV9TSElGVAkxMwogI2RlZmluZSBEVk1BX1BBR0VfU0laRQkoMVVMIDw8IERWTUFfUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZWxmLmggYi9pbmNsdWRlL2FzbS1tNjhrL2VsZi5oCmluZGV4IDM4YmY4MzQuLmViNjNiODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9lbGYuaApAQCAtNSw3ICs1LDYgQEAKICAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdXNlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2VudHJ5LmggYi9pbmNsdWRlL2FzbS1tNjhrL2VudHJ5LmgKaW5kZXggMDM5NjQ5NS4uZjhmNmIxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9lbnRyeS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZW50cnkuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19NNjhLX0VOVFJZX0gKICNkZWZpbmUgX19NNjhLX0VOVFJZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZnB1LmggYi9pbmNsdWRlL2FzbS1tNjhrL2ZwdS5oCmluZGV4IDNiY2Y4NTAuLjU5NzAxZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZnB1LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9mcHUuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19NNjhLX0ZQVV9ICiAjZGVmaW5lIF9fTTY4S19GUFVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBNQVggZmxvYXRpbmcgcG9pbnQgdW5pdCBzdGF0ZSBzaXplIChGU0FWRS9GUkVTVE9SRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tbTY4ay9oYXJkaXJxLmgKaW5kZXggNWUxYzU4MjYuLjM5NGVlOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaGFyZGlycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX002OEtfSEFSRElSUV9ICiAjZGVmaW5lIF9fTTY4S19IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9pZGUuaAppbmRleCAzNjExOGZkLi4zNjVmNzZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaWRlLmgKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lvLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lvLmgKaW5kZXggZGNmYWEzNS4uNWUwZmNmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9pby5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaW8uaApAQCAtMjMsNyArMjMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcmF3X2lvLmg+CiAjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lycS5oIGIvaW5jbHVkZS9hc20tbTY4ay9pcnEuaAppbmRleCA5YWMwNDdjLi5iNGY0OGIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9NNjhLX0lSUV9IXwogI2RlZmluZSBfTTY4S19JUlFfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20tbTY4ay9tYzE0NjgxOHJ0Yy5oCmluZGV4IDExNDQyMDkuLjExZmUxMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvbWMxNDY4MThydGMuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21jMTQ2ODE4cnRjLmgKQEAgLTQsNyArNCw2IEBACiAjaWZuZGVmIF9BU01fTUMxNDY4MThSVENfSAogI2RlZmluZSBfQVNNX01DMTQ2ODE4UlRDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0FUQVJJCiAvKiBSVEMgaW4gQXRhcmkgbWFjaGluZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW02OGsvbW11X2NvbnRleHQuaAppbmRleCA2NjExOTFkLi4yMzFkMTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tbXVfY29udGV4dC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX002OEtfTU1VX0NPTlRFWFRfSAogI2RlZmluZSBfX002OEtfTU1VX0NPTlRFWFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21vdG9yb2xhX3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGd0YWJsZS5oCmluZGV4IDE2Mjg3MjMuLjFjY2M3MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGd0YWJsZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTU9UT1JPTEFfUEdUQUJMRV9ICiAjZGVmaW5lIF9NT1RPUk9MQV9QR1RBQkxFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogRGVmaW5pdGlvbnMgZm9yIE1NVSBkZXNjcmlwdG9ycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9vcGVucHJvbS5oIGIvaW5jbHVkZS9hc20tbTY4ay9vcGVucHJvbS5oCmluZGV4IGVmYmZiMGIuLjg2OWFiOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvb3BlbnByb20uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL29wZW5wcm9tLmgKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogRW1waXJpY2FsIGNvbnN0YW50cy4uLiAqLwogI2lmZGVmIENPTkZJR19TVU4zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLW02OGsvcGFnZS5oCmluZGV4IGYyMDZkZmIuLmRiMDE3ZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S19QQUdFX0gKICNkZWZpbmUgX002OEtfUEFHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KICNpZm5kZWYgQ09ORklHX1NVTjMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcGFnZV9vZmZzZXQuaCBiL2luY2x1ZGUvYXNtLW02OGsvcGFnZV9vZmZzZXQuaAppbmRleCA4NmQzYzI4Li4xY2JkYjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3BhZ2Vfb2Zmc2V0LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wYWdlX29mZnNldC5oCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuLiAqLwogI2lmbmRlZiBDT05GSUdfU1VOMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BnYWxsb2MuaAppbmRleCBiNDY4Yjc5Li5hOWNmYjRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BnYWxsb2MuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgTTY4S19QR0FMTE9DX0gKICNkZWZpbmUgTTY4S19QR0FMTE9DX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BndGFibGUuaAppbmRleCBhZGQxMjllLi5mM2FhMDUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BndGFibGUuaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tbTY4ay9wcm9jZXNzb3IuaAppbmRleCA3OTgyMjg1Li4zNTI3OTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcHJvY2Vzc29yLmgKQEAgLTEzLDcgKzEzLDYgQEAKICAqLwogI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IF9fbGFiZWxfXyBfbDsgX2w6ICYmX2w7fSkKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS1oZWxwZXIuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2VtYXBob3JlLWhlbHBlci5oCmluZGV4IDE1MTZhNjQyLi5lZWYzMGJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS1oZWxwZXIuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS1oZWxwZXIuaApAQCAtOSw3ICs5LDYgQEAKICAqIG02OGsgdmVyc2lvbiBieSBBbmRyZWFzIFNjaHdhYgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2VyaWFsLmgKaW5kZXggM2ZlMjlmOC4uMmI5MGQ2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NlcmlhbC5oCkBAIC02LDcgKzYsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmgKaW5kZXggYTg5YWE4NC4uN2ZhY2M5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zZXR1cC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaApAQCAtMjMsNyArMjMsNiBAQAogI2lmbmRlZiBfTTY4S19TRVRVUF9ICiAjZGVmaW5lIF9NNjhLX1NFVFVQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zaG0uaCBiL2luY2x1ZGUvYXNtLW02OGsvc2htLmgKaW5kZXggM2ZhMmYzNi4uZmE1NmVjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zaG0uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NobS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S19TSE1fSAogI2RlZmluZSBfTTY4S19TSE1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGZvcm1hdCBvZiBwYWdlIHRhYmxlIGVudHJpZXMgdGhhdCBjb3JyZXNwb25kIHRvIHNoYXJlZCBtZW1vcnkgcGFnZXMKICAgIGN1cnJlbnRseSBvdXQgaW4gc3dhcCBzcGFjZSAoc2VlIGFsc28gbW0vc3dhcC5jKToKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N5c3RlbS5oCmluZGV4IDY0ZDM0ODEuLmQ2ZGQ4MDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX002OEtfU1lTVEVNX0gKICNkZWZpbmUgX002OEtfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiAvKiBnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLW02OGsvdGxiZmx1c2guaAppbmRleCA4ZTYxY2NmLi4zMTY3ODgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90bGJmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S19UTEJGTFVTSF9ICiAjZGVmaW5lIF9NNjhLX1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIENPTkZJR19TVU4zCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1tNjhrL3VuaXN0ZC5oCmluZGV4IGMyNTU0YmMuLmYyMzZmZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay91bmlzdGQuaApAQCAtMjg1LDYgKzI4NSw4IEBACiAjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgwCiAjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODEKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9zeXNjYWxscwkJMjgyCiAKIC8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTI0OiBzZWUKQEAgLTM4Myw3ICszODUsNiBAQAogX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVApAQCAtNDA2LDcgKzQwNyw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtNDUxLDcgKzQ1MSw3IEBACiAJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCiAJCQkJc2l6ZV90IHNpZ3NldHNpemUpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC00NjEsNCArNDYxLDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay92aXJ0Y29udmVydC5oIGIvaW5jbHVkZS9hc20tbTY4ay92aXJ0Y29udmVydC5oCmluZGV4IDhjNGU4MDMuLjgzYTg3YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvdmlydGNvbnZlcnQuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3ZpcnRjb252ZXJ0LmgKQEAgLTcsNyArNyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYml0b3BzLmgKaW5kZXggMGI2OGNjZC4uZDdmYTdkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9iaXRvcHMuaApAQCAtNSw3ICs1LDYgQEAKICAqIENvcHlyaWdodCAxOTkyLCBMaW51cyBUb3J2YWxkcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIHN3YWIzMiAqLwogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4JCS8qIHNhdmVfZmxhZ3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9jb2xkZmlyZS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NvbGRmaXJlLmgKaW5kZXggNjE5MGY3Ny4uMmZhYmNhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2NvbGRmaXJlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NvbGRmaXJlLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUJY29sZGZpcmVfaAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCURlZmluZSB0aGUgcHJvY2Vzc29yIHN1cHBvcnQgcGVyaXBoZXJhbHMgYmFzZSBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2NvbW1wcm9jLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY29tbXByb2MuaAppbmRleCBlNTIyY2E4Li4wMTYxZWJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY29tbXByb2MuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY29tbXByb2MuaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfX0NQTV8zNjBfXwogI2RlZmluZSBfX0NQTV8zNjBfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIENQTSBDb21tYW5kIHJlZ2lzdGVyIG1hc2tzOiAqLwogI2RlZmluZSBDUE1fQ1JfUlNUCSgodXNob3J0KTB4ODAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2RtYS1tYXBwaW5nLmgKaW5kZXggYTZjNDJiYS4uNTYyMmI4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2RtYS1tYXBwaW5nLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9NNjhLTk9NTVVfRE1BX01BUFBJTkdfSAogI2RlZmluZSBfTTY4S05PTU1VX0RNQV9NQVBQSU5HX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BDSQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZG1hLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZG1hLmgKaW5kZXggNDNlOThjOS4uMzMzODAwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9kbWEuaApAQCAtMyw3ICszLDYgQEAKICAKIC8vI2RlZmluZQlETUFfREVCVUcJMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQ09MREZJUkUKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZWxmLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZWxmLmgKaW5kZXggOTkxOTQ4Ny4uNDBiMWVkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbGYuaApAQCAtNSw3ICs1LDYgQEAKICAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdXNlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZWxpYS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2VsaWEuaAppbmRleCBmMThiOGU5Li5lMDM3ZDRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZWxpYS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbGlhLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUJZWxpYV9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgogCiAjaWZkZWYgQ09ORklHX2VMSUEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbnRyeS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2VudHJ5LmgKaW5kZXggMDZmNWFhNy4uYzI1NTNkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2VudHJ5LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2VudHJ5LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTTY4S05PTU1VX0VOVFJZX0gKICNkZWZpbmUgX19NNjhLTk9NTVVfRU5UUllfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2ZwdS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2ZwdS5oCmluZGV4IDIyNTA4MjkuLmIxNmIyZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9mcHUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZnB1LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTTY4S05PTU1VX0ZQVV9ICiAjZGVmaW5lIF9fTTY4S05PTU1VX0ZQVV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIE1BWCBmbG9hdGluZyBwb2ludCB1bml0IHN0YXRlIHNpemUgKEZTQVZFL0ZSRVNUT1JFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9oYXJkaXJxLmgKaW5kZXggNDc2MTgwZi4uOTgwMDc1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaGFyZGlycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX002OEtfSEFSRElSUV9ICiAjZGVmaW5lIF9fTTY4S19IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9pby5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lvLmgKaW5kZXggZTA4ZjJlZS4uOGRmNGNlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2lvLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lvLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoZXNlIGFyZSBmb3IgSVNBL1BDSSBzaGFyZWQgbWVtb3J5IF9vbmx5XyBhbmQgc2hvdWxkIG5ldmVyIGJlIHVzZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9pcnEuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9pcnEuaAppbmRleCAyMGM0OGVjLi4yYjQwODg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S19JUlFfSF8KICNkZWZpbmUgX002OEtfSVJRX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKICNpZmRlZiBDT05GSUdfQ09MREZJUkUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIwNnNpbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjA2c2ltLmgKaW5kZXggZDFlNzUwOS4uN2UzNTk0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjA2c2ltLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjA2c2ltLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUJbTUyMDZzaW1faAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCURlZmluZSB0aGUgNTIwNiBTSU0gcmVnaXN0ZXIgc2V0IGFkZHJlc3Nlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIweHNpbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjB4c2ltLmgKaW5kZXggNmRjNjI4Ni4uMWRhYzIyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjB4c2ltLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjB4c2ltLmgKQEAgLTExLDcgKzExLDYgQEAKICNkZWZpbmUgbTUyMHhzaW1faAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqICBEZWZpbmUgdGhlIDUyODIgU0lNIHJlZ2lzdGVyIHNldCBhZGRyZXNzZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyM3hzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIzeHNpbS5oCmluZGV4IDkyNmNmYjguLmJmMzk3MzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIzeHNpbS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIzeHNpbS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjZGVmaW5lCW01MjN4c2ltX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKglEZWZpbmUgdGhlIDUyM3ggU0lNIHJlZ2lzdGVyIHNldCBhZGRyZXNzZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyNzJzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI3MnNpbS5oCmluZGV4IGI0MDg3NTMuLjYyMTdlZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI3MnNpbS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI3MnNpbS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lCW01Mjcyc2ltX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKglEZWZpbmUgdGhlIDUyNzIgU0lNIHJlZ2lzdGVyIHNldCBhZGRyZXNzZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyN3hzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI3eHNpbS5oCmluZGV4IGU3ODc4ZDAuLjFmNjNhYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI3eHNpbS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI3eHNpbS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjZGVmaW5lCW01Mjd4c2ltX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKglEZWZpbmUgdGhlIDUyNzAvNTI3MSBTSU0gcmVnaXN0ZXIgc2V0IGFkZHJlc3Nlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI4eHNpbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L201Mjh4c2ltLmgKaW5kZXggNjEwNzc0YS4uMWEzYjFhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L201Mjh4c2ltLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L201Mjh4c2ltLmgKQEAgLTExLDcgKzExLDYgQEAKICNkZWZpbmUJbTUyOHhzaW1faAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCURlZmluZSB0aGUgNTI4MC81MjgyIFNJTSByZWdpc3RlciBzZXQgYWRkcmVzc2VzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZmNhY2hlLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmY2FjaGUuaAppbmRleCA5Y2I0MDE0Li40NWQxYWM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmY2FjaGUuaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZQlfX002OEtOT01NVV9NQ0ZDQUNIRV9ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICoJVGhlIGRpZmZlcmVudCBDb2xkRmlyZSBmYW1pbGllcyBoYXZlIGRpZmZlcmVudCBjYWNoZSBhcnJhbmdtZW50cy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZkbWEuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZkbWEuaAppbmRleCBiOTNmOGJhLi5lYTcyOWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZmRtYS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjZGVmaW5lCW1jZmRtYV9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICoJR2V0IGFkZHJlc3Mgc3BlY2lmaWMgZGVmaW5lcyBmb3IgdGhpcyBDb2xkZmlyZSBtZW1iZXIuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmbWJ1cy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZm1idXMuaAppbmRleCA0NzYyNTg5Li4xM2RmOWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmbWJ1cy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZtYnVzLmgKQEAgLTExLDcgKzExLDYgQEAKIAogI2lmbmRlZiBtY2ZtYnVzX2gKICNkZWZpbmUgbWNmbWJ1c19oCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIAogI2RlZmluZSBNQ0ZNQlVTX0JBU0UJCTB4MjgwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmbmUuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZuZS5oCmluZGV4IGE3MWIxYzguLmM5MjBjY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZuZS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZuZS5oCkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lCW1jZm5lX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKglTdXBwb3J0IGZvciBORTIwMDAgY2xvbmVzIGRldmljZXMgaW4gQ29sZEZpcmUgYmFzZWQgYm9hcmRzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnBjaS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnBjaS5oCmluZGV4IGQ2MjI5MDQuLmYxNTA3ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZwY2kuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmcGNpLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUJbWNmcGNpX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUENJCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZwaXQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZwaXQuaAppbmRleCBhNjg1ZjFiLi4wZDI2NzJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmcGl0LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnBpdC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjZGVmaW5lCW1jZnBpdF9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICoJR2V0IGFkZHJlc3Mgc3BlY2lmaWMgZGVmaW5lcyBmb3IgdGhlIDUyNzAvNTI3MSwgNTI4MC81MjgyLCBhbmQgNTIwOC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZzaW0uaAppbmRleCA4MWQ3NGEzLi45N2EwYzI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmc2ltLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnNpbS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lCW1jZnNpbV9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICoJSW5jbHVkZSA1MjA0LCA1MjA2L2UsIDUyMzUsIDUyNDksIDUyNzAvNTI3MSwgNTI3MiwgNTI4MC81MjgyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnNtYy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnNtYy5oCmluZGV4IDI1ODM5MDAuLjJkN2E0ZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZzbWMuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmc21jLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqCWFsbG93IDggYml0IGFjY2Vzc2VzLiBTbyB0aGlzIGNvZGUgaXMgMTZiaXQgYWNjZXNzIG9ubHkuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjdW5kZWYJb3V0YgogI3VuZGVmCWluYgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnRpbWVyLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmdGltZXIuaAppbmRleCAwZjQ3MTY0Li42OGJmMzNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmdGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmdGltZXIuaApAQCAtMTIsNyArMTIsNiBAQAogI2RlZmluZQltY2Z0aW1lcl9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICoJR2V0IGFkZHJlc3Mgc3BlY2lmaWMgZGVmaW5lcyBmb3IgdGhpcyBDb2xkRmlyZSBtZW1iZXIuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmdWFydC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnVhcnQuaAppbmRleCBiMDE2ZmFkLi44MDQwZTQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmdWFydC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2Z1YXJ0LmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUJbWNmdWFydF9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICoJRGVmaW5lIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlRTIHdpdGhpbiB0aGUgTUJBUiBhZGRyZXNzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmd2RlYnVnLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmd2RlYnVnLmgKaW5kZXggNmNlYWUxMC4uMjdmNzBlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZndkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2Z3ZGVidWcuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBtY2ZkZWJ1Z19oCiAjZGVmaW5lIG1jZmRlYnVnX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBEZWZpbmUgdGhlIGRlYnVnIG1vZHVsZSByZWdpc3RlcnMgKi8KICNkZWZpbmUgTUNGREVCVUdfQ1NSCTB4MAkJCS8qIENvbmZpZ3VyYXRpb24gc3RhdHVzCQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbW11X2NvbnRleHQuaAppbmRleCAxZTA4MGVjLi42YzA3N2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbW11X2NvbnRleHQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19NNjhLTk9NTVVfTU1VX0NPTlRFWFRfSAogI2RlZmluZSBfX002OEtOT01NVV9NTVVfQ09OVEVYVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbmV0dGVsLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbmV0dGVsLmgKaW5kZXggOWJkYTMwNy4uMDI5OWY2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L25ldHRlbC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9uZXR0ZWwuaApAQCAtMTMsNyArMTMsNiBAQAogI2RlZmluZQluZXR0ZWxfaAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZkZWYgQ09ORklHX05FVHRlbApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYWdlLmgKaW5kZXggOTQyZGZiZS4uYTIyYmY1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S05PTU1VX1BBR0VfSAogI2RlZmluZSBfTTY4S05PTU1VX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYWdlX29mZnNldC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhZ2Vfb2Zmc2V0LmgKaW5kZXggMmI0NTY0NS4uOGVkNmQ3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhZ2Vfb2Zmc2V0LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhZ2Vfb2Zmc2V0LmgKQEAgLTEsNSArMSw0IEBACiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLi4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGFyYW0uaAppbmRleCAzZjU3ZDVkLi40Yzk5MDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGFyYW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX002OEtOT01NVV9QQVJBTV9ICiAjZGVmaW5lIF9NNjhLTk9NTVVfUEFSQU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19DTEVPUEFUUkEpCiAjZGVmaW5lCUhaIDEwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGd0YWJsZS5oCmluZGV4IDAwODkzMDUuLjU0OWFkMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3BndGFibGUuaApAQCAtNyw3ICs3LDYgQEAKICAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyLCBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcHJvY2Vzc29yLmgKaW5kZXggYmEzOTNiMS4uMjc4YjAwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wcm9jZXNzb3IuaApAQCAtMTMsNyArMTMsNiBAQAogICovCiAjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgX19sYWJlbF9fIF9sOyBfbDogJiZfbDt9KQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NlbWFwaG9yZS1oZWxwZXIuaAppbmRleCBhNjU4NjQxLi40M2RhN2JjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VtYXBob3JlLWhlbHBlci5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zZW1hcGhvcmUtaGVscGVyLmgKQEAgLTksNyArOSw2IEBACiAgKiBtNjhrIHZlcnNpb24gYnkgQW5kcmVhcyBTY2h3YWIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGVzZSB0d28gX211c3RfIGV4ZWN1dGUgYXRvbWljYWxseSB3cnQgZWFjaCBvdGhlci4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zeXN0ZW0uaAppbmRleCA2MzM4YWZjLi4yYmJlMmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3N5c3RlbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S05PTU1VX1NZU1RFTV9ICiAjZGVmaW5lIF9NNjhLTk9NTVVfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiAvKiBnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vZW50cnkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS91bmFsaWduZWQuaAppbmRleCA4ODc2ZjAzLi44NjllOWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5hbGlnbmVkLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3VuYWxpZ25lZC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX002OEtfVU5BTElHTkVEX0gKICNkZWZpbmUgX19NNjhLX1VOQUxJR05FRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19DT0xERklSRQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5pc3RkLmgKaW5kZXggNTM3Mzk4OC4uMWIyYWJkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS91bmlzdGQuaApAQCAtMjg2LDYgKzI4Niw4IEBACiAjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgwCiAjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODEKICAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgTlJfc3lzY2FsbHMJCTI4MgogCiAvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyMjogc2VlCkBAIC00MzcsNyArNDM5LDYgQEAKICAgcmV0dXJuICh0eXBlKV9fcmVzOwkJCQkJCQkJXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVApAQCAtNDYwLDcgKzQ2MSw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtNTE1LDcgKzUxNSw3IEBACiAJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCiAJCQkJc2l6ZV90IHNpZ3NldHNpemUpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC01MjUsNCArNTI1LDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hLm91dC5oIGIvaW5jbHVkZS9hc20tbWlwcy9hLm91dC5oCmluZGV4IDJiM2RjM2IuLmVmMzNjM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYS5vdXQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2Eub3V0LmgKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hZGRyc3BhY2UuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYWRkcnNwYWNlLmgKaW5kZXggMGNjNmM3MC4uNDVjNzA2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9hZGRyc3BhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fQUREUlNQQUNFX0gKICNkZWZpbmUgX0FTTV9BRERSU1BBQ0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8c3BhY2VzLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2FyYy90eXBlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9hcmMvdHlwZXMuaAppbmRleCBiYmI3MjVjLi5iOWFkY2Q2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FyYy90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYXJjL3R5cGVzLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fQVJDX1RZUEVTX0gKICNkZWZpbmUgX0FTTV9BUkNfVFlQRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQVJDMzIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hc20uaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtLmgKaW5kZXggNGIwOTBmMy4uZTMwMzhhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9hc20uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FzbS5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9fQVNNX0FTTV9ICiAjZGVmaW5lIF9fQVNNX0FTTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgogCiAjaWZuZGVmIENBVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oCmluZGV4IGY1NGFhMTQuLjJjNDJmNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9BU01fQVNNTUFDUk9fSAogI2RlZmluZSBfQVNNX0FTTU1BQ1JPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9oYXphcmRzLmg+CiAKICNpZmRlZiBDT05GSUdfMzJCSVQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1taXBzL2F0b21pYy5oCmluZGV4IDJjOGI4NTMuLjEzZDQ0ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hdG9taWMuaApAQCAtMTcsNyArMTcsNiBAQAogICogPGxpbnV4L3NwaW5sb2NrLmg+IHdlIGhhdmUgdG8gaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4gb3V0c2lkZSB0aGUKICAqIG1haW4gYmlnIHdyYXBwZXIgLi4uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaWZuZGVmIF9BU01fQVRPTUlDX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYmNhY2hlLmggYi9pbmNsdWRlL2FzbS1taXBzL2JjYWNoZS5oCmluZGV4IDQ0NjEwMmIuLjM2NDZhM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYmNhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9iY2FjaGUuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9CQ0FDSEVfSAogI2RlZmluZSBfQVNNX0JDQUNIRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogU29tZSBSNDAwMCAvIFI0NDAwIC8gUjQ2MDAgLyBSNTAwMCBtYWNoaW5lcyBtYXkgaGF2ZSBhIG5vbi1kbWEtY29oZXJlbnQsCiAgICBjaGlwc2V0IGltcGxlbWVudGVkIGNhY2hlcy4gIE9uIG1hY2hpbmVzIHdpdGggb3RoZXIgQ1BVcyB0aGUgQ1BVIGRvZXMgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaAppbmRleCBkMmY0NDQ1Li4wOThjZWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fQklUT1BTX0gKICNkZWZpbmUgX0FTTV9CSVRPUFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYnVnLmggYi9pbmNsdWRlL2FzbS1taXBzL2J1Zy5oCmluZGV4IDg3ZDQ5YTUuLjdiNDczOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9idWcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fQlVHX0gKICNkZWZpbmUgX19BU01fQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0JVRwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYnVncy5oCmluZGV4IGNiMmVhN2MuLjBkN2Y5YzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYnVncy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYnVncy5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfQVNNX0JVR1NfSAogI2RlZmluZSBfQVNNX0JVR1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdS1pbmZvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tbWlwcy9ieXRlb3JkZXIuaAppbmRleCBhZWZjMDJmLi5lZWU4M2NiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2J5dGVvcmRlci5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYnl0ZW9yZGVyLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9BU01fQllURU9SREVSX0gKICNkZWZpbmUgX0FTTV9CWVRFT1JERVJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jYWNoZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZS5oCmluZGV4IDU1ZTE5ZjIuLjM3ZjE3NWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NhY2hlLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fQ0FDSEVfSAogI2RlZmluZSBfQVNNX0NBQ0hFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGttYWxsb2MuaD4KIAogI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvY2hlY2tzdW0uaAppbmRleCBiMDlmODk3Li5hNWU2MDUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jaGVja3N1bS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fQ0hFQ0tTVU1fSAogI2RlZmluZSBfQVNNX0NIRUNLU1VNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmggYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oCmluZGV4IDI1NGUxMWUuLjg4MWNlMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19BU01fQ1BVX0ZFQVRVUkVTX0gKICNkZWZpbmUgX19BU01fQ1BVX0ZFQVRVUkVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9jcHUtaW5mby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oCmluZGV4IDY1NzJhYzcuLmEyZjBjOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWluZm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fQ1BVX0lORk9fSAogI2RlZmluZSBfX0FTTV9DUFVfSU5GT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAogI2lmZGVmIENPTkZJR19TR0lfSVAyNwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjU0NzcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1NDc3LmgKaW5kZXggYTQzODU0OC4uYzVhZjRiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjU0NzcuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTQ3Ny5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9fQVNNX0REQjVYWFhfRERCNTQ3N19ICiAjZGVmaW5lIF9fQVNNX0REQjVYWFhfRERCNTQ3N19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoaXMgY29udGFpbnMgbWFjcm9zIHRoYXQgYXJlIHNwZWNpZmljIHRvIEREQjU0Nzcgb3IgcmVuYW1lZCBmcm9tCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNXh4eC5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjV4eHguaAppbmRleCAyZjFiMTkxLi5lOTdmY2M4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNXh4eC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1eHh4LmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpZm5kZWYgX19BU01fRERCNVhYWF9EREI1WFhYX0gKICNkZWZpbmUgX19BU01fRERCNVhYWF9EREI1WFhYX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlYnVnLmggYi9pbmNsdWRlL2FzbS1taXBzL2RlYnVnLmgKaW5kZXggOTMwZjJiNy4uMWZkNWEyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVidWcuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfQVNNX0RFQlVHX0gKICNkZWZpbmUgX0FTTV9ERUJVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIHJ1bi10aW1lIG1hY3JvcyBmb3IgY2F0Y2hpbmcgc3B1cmlvdXMgZXJyb3JzLiAgRWFibGUgQ09ORklHX1JVTlRJTUVfREVCVUcgaW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVjL3Byb20uaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL3Byb20uaAppbmRleCAxMzg0ZGQwLi5iOWM4MjAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RlYy9wcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvcHJvbS5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9BU01fREVDX1BST01fSAogI2RlZmluZSBfQVNNX0RFQ19QUk9NX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1taXBzL2RlbGF5LmgKaW5kZXggOTI4ZjMwZi4uZWE3NzA1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9kZWxheS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVsYXkuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX0RFTEFZX0gKICNkZWZpbmUgX0FTTV9ERUxBWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kbWEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZG1hLmgKaW5kZXggNmFhZjk5My4uZTg1ODQ5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RtYS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fRE1BX0gKICNkZWZpbmUgX0FTTV9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkJLyogbmVlZCBieXRlIElPICovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JCS8qIEFuZCBzcGlubG9ja3MgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9lbGYuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZWxmLmgKaW5kZXggYmRjOWRlMi4uZWJkNmJmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2VsZi5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfQVNNX0VMRl9ICiAjZGVmaW5lIF9BU01fRUxGX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBFTEYgaGVhZGVyIGVfZmxhZ3MgZGVmaW5lcy4gKi8KIC8qIE1JUFMgYXJjaGl0ZWN0dXJlIGxldmVsLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9mY250bC5oIGIvaW5jbHVkZS9hc20tbWlwcy9mY250bC5oCmluZGV4IDQzZDA0N2EuLjc4NzIyMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZmNudGwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ZjbnRsLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9BU01fRkNOVExfSAogI2RlZmluZSBfQVNNX0ZDTlRMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIE9fQVBQRU5ECTB4MDAwOAogI2RlZmluZSBPX1NZTkMJCTB4MDAxMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZml4bWFwLmgKaW5kZXggNzNhMzAyOC4uMWNhZGVmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9maXhtYXAuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ZpeG1hcC5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9BU01fRklYTUFQX0gKICNkZWZpbmUgX0FTTV9GSVhNQVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpZmRlZiBDT05GSUdfSElHSE1FTQogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmggYi9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oCmluZGV4IDhiZjUxMGEuLjU4YzU2MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mcHUuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX0ZQVV9ICiAjZGVmaW5lIF9BU01fRlBVX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9mdXRleC5oIGIvaW5jbHVkZS9hc20tbWlwcy9mdXRleC5oCmluZGV4IDFmOTQ2NDAuLmVkMDIzZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2Z1dGV4LmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCmluZGV4IGRhZGMwNTEuLjY2OTQzYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fSEFaQVJEU19ICiAjZGVmaW5lIF9BU01fSEFaQVJEU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvaGlnaG1lbS5oCmluZGV4IDhjZjU5ODQuLmM5NzZiZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaGlnaG1lbS5oCkBAIC0xOSw3ICsxOSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmggYi9pbmNsdWRlL2FzbS1taXBzL2ludGVycnVwdC5oCmluZGV4IDRiYjljMDYuLmE5OWQ2ODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pbnRlcnJ1cHQuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVNNX0lOVEVSUlVQVF9ICiAjZGVmaW5lIF9BU01fSU5URVJSVVBUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9oYXphcmRzLmg+CiAKIF9fYXNtX18gKApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pby5oIGIvaW5jbHVkZS9hc20tbWlwcy9pby5oCmluZGV4IDZiMTdlYjkuLmRmNjI0ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lvLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX0FTTV9JT19ICiAjZGVmaW5lIF9BU01fSU9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pcDMyL21hY2hpbmUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9tYWNoaW5lLmgKaW5kZXggZTQ0MGZkZi4uMWI2MzFiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9pcDMyL21hY2hpbmUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lwMzIvbWFjaGluZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fSVAzMl9NQUNISU5FX0gKICNkZWZpbmUgX0FTTV9JUDMyX01BQ0hJTkVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfU0dJX0lQMzIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pcnEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmgKaW5kZXggZGRlNjc3Zi4uZDM1YzYxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lycS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX0lSUV9ICiAjZGVmaW5lIF9BU01fSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAogI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2lzYWRlcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9pc2FkZXAuaAppbmRleCA3YmIwMDM1Li4yNGM2Y2RhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2lzYWRlcC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaXNhZGVwLmgKQEAgLTUsNyArNSw2IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk4IEhhcmFsZCBLb2VyZmdlbgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU01fSVNBREVQX0gKICNkZWZpbmUgX19BU01fSVNBREVQX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvam1yMzkyNy9pcnEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvam1yMzkyNy9pcnEuaAppbmRleCBiMGMzMjVhLi5mZTU1MWYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2ptcjM5MjcvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9qbXIzOTI3L2lycS5oCkBAIC0xMiw3ICsxMiw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKIHN0cnVjdCB0Yl9pcnFfc3BhY2UgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL2ttYXBfdHlwZXMuaAppbmRleCA2ODg2YTBjLi44MDZhYWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2ttYXBfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ttYXBfdHlwZXMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9LTUFQX1RZUEVTX0gKICNkZWZpbmUgX0FTTV9LTUFQX1RZUEVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KICMgZGVmaW5lIEQobikgX19LTV9GRU5DRV8jI24gLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9sb2NhbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9sb2NhbC5oCmluZGV4IGMzODg0NGYuLjllMmQ0M2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbG9jYWwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2xvY2FsLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTE9DQUxfSAogI2RlZmluZSBfQVNNX0xPQ0FMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTEwMDAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxMDAwLmgKaW5kZXggNDY4NmUxNy4uNTgyYWNkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTEwMDAuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMC5oCkBAIC0zNSw3ICszNSw2IEBACiAjaWZuZGVmIF9BVTEwMDBfSF8KICNkZWZpbmUgX0FVMTAwMF9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX0xBTkdVQUdFX0FTU0VNQkxZCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4LmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eC5oCmluZGV4IGI3YjQ2ZGQuLjk0NzEzNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHguaApAQCAtMjMsNyArMjMsNiBAQAogI2lmbmRlZiBfQVUxWFhYX0hfCiAjZGVmaW5lIF9BVTFYWFhfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaAppbmRleCBiMzI3YmNkLi5kNWIzOGEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpZm5kZWYgX0FVMTAwMF9EQkRNQV9IXwogI2RlZmluZSBfQVUxMDAwX0RCRE1BX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfTEFOR1VBR0VfQVNTRU1CTFkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfaWRlLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9pZGUuaAppbmRleCBlODY3YjRlLi4zMDFlNzEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9pZGUuaApAQCAtMjksNyArMjksNiBAQAogICogTm90ZTogZm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciAiQU1EIEFsY2hlbXkgQXUxMjAwL0F1MTU1MCBJREUKICAqICAgICAgIEludGVyZmFjZSBhbmQgTGludXggRGV2aWNlIERyaXZlciIgQXBwbGljYXRpb24gTm90ZS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQQogICAgICAgICAjZGVmaW5lIERNQV9XQUlUX1RJTUVPVVQgICAgICAgIDEwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaAppbmRleCA4ZTVmYjNjLi41YzNlMmEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaApAQCAtMzMsNyArMzMsNiBAQAogI2lmbmRlZiBfQVUxMDAwX1BTQ19IXwogI2RlZmluZSBfQVUxMDAwX1BTQ19IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFRoZSBQU0MgYmFzZSBhZGRyZXNzZXMuICAqLwogI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2lvcmVtYXAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvaW9yZW1hcC5oCmluZGV4IGQzZWM2MjcuLjA5OGZjYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvaW9yZW1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvaW9yZW1hcC5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX0FVMVgwMF9JT1JFTUFQX0gKICNkZWZpbmUgX19BU01fTUFDSF9BVTFYMDBfSU9SRU1BUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWZkZWYgQ09ORklHXzY0QklUX1BIWVNfQUREUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWNvYmFsdC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1jb2JhbHQvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggYWNlOGM1ZS4uZTBlMDhmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWNvYmFsdC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtY29iYWx0L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfX0FTTV9DT0JBTFRfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKICNkZWZpbmUgX19BU01fQ09CQUxUX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBjcHVfaGFzX3RsYgkJMQogI2RlZmluZSBjcHVfaGFzXzRrZXgJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kYjF4MDAvZGIxeDAwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGIxeDAwL2RiMXgwMC5oCmluZGV4IDdiMjhiMjMuLjhmYmI0YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kYjF4MDAvZGIxeDAwLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRiMXgwMC9kYjF4MDAuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmbmRlZiBfX0FTTV9EQjFYMDBfSAogI2RlZmluZSBfX0FTTV9EQjFYMDBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKICNkZWZpbmUgQkNTUl9LU0VHMV9BRERSIDB4QUYwMDAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvaWRlLmgKaW5kZXggZTMzMTUzNS4uNmViYTJlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvaWRlLmgKQEAgLTE1LDcgKzE1LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2ttYWxsb2MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2ttYWxsb2MuaAppbmRleCAzNzNkNjZkLi40MTBhYjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9rbWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMva21hbGxvYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX0dFTkVSSUNfS01BTExPQ19ICiAjZGVmaW5lIF9fQVNNX01BQ0hfR0VORVJJQ19LTUFMTE9DX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIENPTkZJR19ETUFfQ09IRVJFTlQKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9zcGFjZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3NwYWNlcy5oCmluZGV4IGI4NDlkOGQuLjBhZTk5OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3NwYWNlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3NwYWNlcy5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fTUFDSF9HRU5FUklDX1NQQUNFU19ICiAjZGVmaW5lIF9BU01fTUFDSF9HRU5FUklDX1NQQUNFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR18zMkJJVAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyMi9zcGFjZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL3NwYWNlcy5oCmluZGV4IDgzODVmNzEuLmFiMjBjMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL3NwYWNlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL3NwYWNlcy5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fTUFDSF9JUDIyX1NQQUNFU19ICiAjZGVmaW5lIF9BU01fTUFDSF9JUDIyX1NQQUNFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR18zMkJJVAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IGYwZWYxYWMuLjJhM2RlMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX0lQMzJfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKICNkZWZpbmUgX19BU01fTUFDSF9JUDMyX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFI1MDAwIGhhcyBhbiBpbnRlcmVzdGluZyAicmVzdHJpY3Rpb24iOiAgbGwoZCkvc2MoZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL2ttYWxsb2MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL2ttYWxsb2MuaAppbmRleCA5ZDJkNGQ5Li5mNjE5OGEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9rbWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIva21hbGxvYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX0lQMzJfS01BTExPQ19ICiAjZGVmaW5lIF9fQVNNX01BQ0hfSVAzMl9LTUFMTE9DX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1I1MDAwKSB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX1JNNzAwMCkKICNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOCTMyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IDEyYzkzNzIuLmU5NjA2NzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX01JUFNfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKICNkZWZpbmUgX19BU01fTUFDSF9NSVBTX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIENQVSBmZWF0dXJlIG92ZXJyaWRlcyBmb3IgTUlQUyBib2FyZHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL2lycS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvaXJxLmgKaW5kZXggZjg1Nzk2OS4uMDgzZDljNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfTUlQU19JUlFfSAogI2RlZmluZSBfX0FTTV9NQUNIX01JUFNfSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIE5SX0lSUVMJMjU2CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvcGIxNTUwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTU1MC5oCmluZGV4IDk1NzhlYWQuLjlhNDk1NWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvcGIxNTUwLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9wYjE1NTAuaApAQCAtMjcsNyArMjcsNiBAQAogI2lmbmRlZiBfX0FTTV9QQjE1NTBfSAogI2RlZmluZSBfX0FTTV9QQjE1NTBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBEQkRNQV9BQzk3X1RYX0NIQU4gRFNDUl9DTUQwX1BTQzFfVFgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1zaW0vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtc2ltL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IGQ5NjUzZTQuLmQ3MzZiZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1zaW0vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXNpbS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX19BU01fTUFDSF9TSU1fQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKICNkZWZpbmUgX19BU01fTUFDSF9TSU1fQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogQ1BVIGZlYXR1cmUgb3ZlcnJpZGVzIGZvciBNSVBTIGJvYXJkcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMuaAppbmRleCBmYThiOTEzLi5iOThmMTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMuaApAQCAtMjAsNyArMjAsNiBAQAogI2lmbmRlZiBfX0FTTV9NSVBTX0JPQVJEU19HRU5FUklDX0gKICNkZWZpbmUgX19BU01fTUlQU19CT0FSRFNfR0VORVJJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9ib25pdG82NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oCmluZGV4IDk4YjY4MDguLjY3Mzk3NzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX0FTTV9NSVBTUkVHU19ICiAjZGVmaW5lIF9BU01fTUlQU1JFR1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9oYXphcmRzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaAppbmRleCA2ZTA5ZjRjLi4xOGI2OWRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fTU1VX0NPTlRFWFRfSAogI2RlZmluZSBfQVNNX01NVV9DT05URVhUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21tem9uZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tbXpvbmUuaAppbmRleCBmNmJkMmUwLi5kYzIzMWM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21tem9uZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbW16b25lLmgKQEAgLTUsNyArNSw2IEBACiAjaWZuZGVmIF9BU01fTU1aT05FX0hfCiAjZGVmaW5lIF9BU01fTU1aT05FX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPG1tem9uZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21vZHVsZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tb2R1bGUuaAppbmRleCAyYWY0OTZjLi4zOTlkMDNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21vZHVsZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbW9kdWxlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTU9EVUxFX0gKICNkZWZpbmUgX0FTTV9NT0RVTEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbXNnYnVmLmggYi9pbmNsdWRlL2FzbS1taXBzL21zZ2J1Zi5oCmluZGV4IGExNTMzOTUuLjBkNmM3ZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbXNnYnVmLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tc2didWYuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9NU0dCVUZfSAogI2RlZmluZSBfQVNNX01TR0JVRl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoZSBtc3FpZDY0X2RzIHN0cnVjdHVyZSBmb3IgdGhlIE1JUFMgYXJjaGl0ZWN0dXJlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wYWNjZXNzLmggYi9pbmNsdWRlL2FzbS1taXBzL3BhY2Nlc3MuaAppbmRleCA0NmYyZDIzLi4xNDc4NDRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BhY2Nlc3MuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfQVNNX1BBQ0NFU1NfSAogI2RlZmluZSBfQVNNX1BBQ0NFU1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAogI2lmZGVmIENPTkZJR18zMkJJVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAppbmRleCAzZDI2MmMwLi42Yjk3NzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9QQUdFX0gKICNkZWZpbmUgX0FTTV9QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BjaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wY2kuaAppbmRleCA2YzlhZDgxLi5jNGQ2OGJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGNpLmgKQEAgLTYsNyArNiw2IEBACiAjaWZuZGVmIF9BU01fUENJX0gKICNkZWZpbmUgX0FTTV9QQ0lfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ2FsbG9jLmgKaW5kZXggZmUxZGY1Ny4uNTgyYzFmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ2FsbG9jLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fUEdBTExPQ19ICiAjZGVmaW5lIF9BU01fUEdBTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaAppbmRleCAwODdjMjA3Li40YjI2ZDg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9QR1RBQkxFXzMyX0gKICNkZWZpbmUgX0FTTV9QR1RBQkxFXzMyX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS02NC5oCmluZGV4IDJmYWY1YzkuLmUzZGI5MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS02NC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS02NC5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1BHVEFCTEVfNjRfSAogI2RlZmluZSBfQVNNX1BHVEFCTEVfNjRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLWJpdHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS1iaXRzLmgKaW5kZXggMDFlNzZlOS4uNzQ5NGJhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtYml0cy5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fUEdUQUJMRV9CSVRTX0gKICNkZWZpbmUgX0FTTV9QR1RBQkxFX0JJVFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBOb3RlIHRoYXQgd2Ugc2hpZnQgdGhlIGxvd2VyIDMyYml0cyBvZiBlYWNoIEVudHJ5TG9bMDFdIGVudHJ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oCmluZGV4IGJlNzVjY2EuLmEzNmNhMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfQVNNX1BHVEFCTEVfSAogI2RlZmluZSBfQVNNX1BHVEFCTEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaWZkZWYgQ09ORklHXzMyQklUCiAjaW5jbHVkZSA8YXNtL3BndGFibGUtMzIuaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wcmVmZXRjaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9wcmVmZXRjaC5oCmluZGV4IDcxMjkzZWMuLjE3ODUwODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcHJlZmV0Y2guaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3ByZWZldGNoLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9fQVNNX1BSRUZFVENIX0gKICNkZWZpbmUgX19BU01fUFJFRkVUQ0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBSNTAwMCBhbmQgUk01MjAwIGltcGxlbWVudHMgcHJlZiBhbmQgcHJlZnggaW5zdHJ1Y3Rpb25zIGJ1dCB0aGV5J3JlIG5vcHMsIHNvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tbWlwcy9wcm9jZXNzb3IuaAppbmRleCA4MzkzNjQ2Li41ZjgwYmE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9QUk9DRVNTT1JfSAogI2RlZmluZSBfQVNNX1BST0NFU1NPUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaAppbmRleCBmYTlkODcxLi40MTEzMzE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fUFRSQUNFX0gKICNkZWZpbmUgX0FTTV9QVFJBQ0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vaXNhZGVwLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcmVnLmggYi9pbmNsdWRlL2FzbS1taXBzL3JlZy5oCmluZGV4IDYxNzMwMDQuLjYzNGI1NWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcmVnLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9yZWcuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9NSVBTX1JFR19ICiAjZGVmaW5lIF9fQVNNX01JUFNfUkVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpIHx8IGRlZmluZWQoV0FOVF9DT01QQVRfUkVHX0gpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcmVzb3VyY2UuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcmVzb3VyY2UuaAppbmRleCAxZmJhMDBjLi44N2NiMzA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3Jlc291cmNlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9yZXNvdXJjZS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1JFU09VUkNFX0gKICNkZWZpbmUgX0FTTV9SRVNPVVJDRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoZXNlIGZpdmUgcmVzb3VyY2UgbGltaXQgSURzIGhhdmUgYSBNSVBTL0xpbnV4LXNwZWNpZmljIG9yZGVyaW5nLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmgKaW5kZXggNzE5NmNlYi4uNTg0YmQ5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NFUklBTF9ICiAjZGVmaW5lIF9BU01fU0VSSUFMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZ2lhcmNzLmggYi9pbmNsdWRlL2FzbS1taXBzL3NnaWFyY3MuaAppbmRleCA3MjJiNzdhLi5kZGI4NTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NnaWFyY3MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NnaWFyY3MuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX1NHSUFSQ1NfSAogI2RlZmluZSBfQVNNX1NHSUFSQ1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2FyYy90eXBlcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9ib2FyZC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvYm9hcmQuaAppbmRleCA5MDBlZGNiLi4zZGZlMjllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9ib2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL2JvYXJkLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNpZm5kZWYgX1NJQllURV9CT0FSRF9ICiAjZGVmaW5lIF9TSUJZVEVfQk9BUkRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TSUJZVEVfU1dBUk0pIHx8IGRlZmluZWQoQ09ORklHX1NJQllURV9QVFNXQVJNKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfU0lCWVRFX0NSSE9ORSkgfHwgZGVmaW5lZChDT05GSUdfU0lCWVRFX0NSSElORSkgfHwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvY2FybWVsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9jYXJtZWwuaAppbmRleCBiNWU3ZGFlLi41N2M1M2U2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9jYXJtZWwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9jYXJtZWwuaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfX0FTTV9TSUJZVEVfQ0FSTUVMX0gKICNkZWZpbmUgX19BU01fU0lCWVRFX0NBUk1FTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwLmg+CiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfaW50Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zZW50b3NhLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zZW50b3NhLmgKaW5kZXggODI0NjA1OC4uNjRjNDc4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2VudG9zYS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NlbnRvc2EuaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfX0FTTV9TSUJZVEVfU0VOVE9TQV9ICiAjZGVmaW5lIF9fQVNNX1NJQllURV9TRU5UT1NBX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwLmg+CiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfaW50Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3N3YXJtLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zd2FybS5oCmluZGV4IDA2ZTFkNTIuLjg2ZGIzN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3N3YXJtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc3dhcm0uaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfX0FTTV9TSUJZVEVfU1dBUk1fSAogI2RlZmluZSBfX0FTTV9TSUJZVEVfU1dBUk1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTAuaD4KICNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9pbnQuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpZ2luZm8uaAppbmRleCAyYmEzMTNkLi4yZTMyOTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpZ2luZm8uaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9TSUdJTkZPX0gKICNkZWZpbmUgX0FTTV9TSUdJTkZPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIF9fQVJDSF9TSUdFVl9QUkVBTUJMRV9TSVpFIChzaXplb2YobG9uZykgKyAyKnNpemVvZihpbnQpKQogI3VuZGVmIF9fQVJDSF9TSV9UUkFQTk8JLyogZXhjZXB0aW9uIGNvZGUgbmVlZHMgdG8gZmlsbCB0aGlzIC4uLiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oCmluZGV4IGQ4MzQ5ZTQuLmExZjNhM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9TSUdOQUxfSAogI2RlZmluZSBfQVNNX1NJR05BTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIF9OU0lHCQkxMjgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2ltLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpbS5oCmluZGV4IDljMmFmMWIuLjY3YzRmZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2ltLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaW0uaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9TSU1fSAogI2RlZmluZSBfQVNNX1NJTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NtcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbXAuaAppbmRleCBlMTRlNGI2Li4xNjA4ZmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc21wLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX19BU01fU01QX0gKICNkZWZpbmUgX19BU01fU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL2FkZHJzLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2FkZHJzLmgKaW5kZXggNmM4YTU1Ny4uOGZhMGFmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9hZGRycy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vYWRkcnMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9TTl9BRERSU19ICiAjZGVmaW5lIF9BU01fU05fQUREUlNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vYWdlbnQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vYWdlbnQuaAppbmRleCBkNmRmMTNhLi5hYzRlYTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2FnZW50LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hZ2VudC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fU0dJX1NOX0FHRU5UX0gKICNkZWZpbmUgX0FTTV9TR0lfU05fQUdFTlRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KICNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9hcmNoLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2FyY2guaAppbmRleCBkMjQ3YTgxLi41MTE3NGFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2FyY2guaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2FyY2guaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVNNX1NOX0FSQ0hfSAogI2RlZmluZSBfQVNNX1NOX0FSQ0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc24vdHlwZXMuaD4KICNpZmRlZiBDT05GSUdfU0dJX0lQMjcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vaW8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vaW8uaAppbmRleCAxMzMyNjQ1Li5hYjJmYThjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9pby5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NOX0lPX0gKICNkZWZpbmUgX0FTTV9TTl9JT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZiBkZWZpbmVkIChDT05GSUdfU0dJX0lQMjcpCiAjaW5jbHVkZSA8YXNtL3NuL3NuMC9odWJpby5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL2tsY29uZmlnLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2tsY29uZmlnLmgKaW5kZXggZGM3MDYyNi4uNTIyMzhlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaApAQCAtMjcsNyArMjcsNiBAQAogICogICAgICB0aGF0IG9mZnNldHMgb2YgZXhpc3RpbmcgZmllbGRzIGRvIG5vdCBjaGFuZ2UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xkaXIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24va2xkaXIuaAppbmRleCA5N2FkNTJlLi4wNTczY2JmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2tsZGlyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGRpci5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fU05fS0xESVJfSAogI2RlZmluZSBfQVNNX1NOX0tMRElSX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhlIGtsZGlyIG1lbW9yeSBhcmVhIHJlc2lkZXMgYXQgYSBmaXhlZCBwbGFjZSBpbiBlYWNoIG5vZGUncyBtZW1vcnkgYW5kCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL2xhdW5jaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9sYXVuY2guaAppbmRleCBiNjc2OTljLi5iN2MyMjI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2xhdW5jaC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vbGF1bmNoLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fU05fTEFVTkNIX0gKICNkZWZpbmUgX0FTTV9TTl9MQVVOQ0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vbWFwcGVkX2tlcm5lbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9tYXBwZWRfa2VybmVsLmgKaW5kZXggNTllZGIyMC4uYzNkZDVkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9tYXBwZWRfa2VybmVsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9tYXBwZWRfa2VybmVsLmgKQEAgLTIwLDcgKzIwLDYgQEAKICAqIGNvZGUuIFNvIG5vIGp1bXBzIGNhbiBiZSBkb25lIGJlZm9yZSB3ZSBoYXZlIHN3aXRjaGVkIHRvIHVzaW5nCiAgKiBja3NzZWcgYWRkcmVzc2VzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogCiAjZGVmaW5lIFJFUF9CQVNFCUNBQ19CQVNFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hZGRycy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYWRkcnMuaAppbmRleCAyYzRiNzU4Li45ZThjYzUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hZGRycy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FkZHJzLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9TTl9TTjBfQUREUlNfSAogI2RlZmluZSBfQVNNX1NOX1NOMF9BRERSU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFNOMCAob24gYSBUNSkgQWRkcmVzcyBtYXAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FyY2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FyY2guaAppbmRleCBmN2M0M2ZhLi5mNzM0ZjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hcmNoLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYXJjaC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fU05fU04wX0FSQ0hfSAogI2RlZmluZSBfQVNNX1NOX1NOMF9BUkNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIFNOMFhYTCAgLyogMTI4IGNwdSBTTVAgbWF4ICovCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVibWQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1Ym1kLmgKaW5kZXggMTAwNmFhMi4uMTRjMjI1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVibWQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJtZC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmCV9BU01fU05fU04wX0hVQk1EX0gKICNkZWZpbmUJX0FTTV9TTl9TTjBfSFVCTURfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBIdWIgTWVtb3J5L0RpcmVjdG9yeSBpbnRlcmZhY2UgcmVnaXN0ZXJzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N0YWNrZnJhbWUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oCmluZGV4IGM0ODU2YTguLjUxM2FhNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fU1RBQ0tGUkFNRV9ICiAjZGVmaW5lIF9BU01fU1RBQ0tGUkFNRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N0cmluZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zdHJpbmcuaAppbmRleCA5MDdkYTYwLi40MzZlM2FkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N0cmluZy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3RyaW5nLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9TVFJJTkdfSAogI2RlZmluZSBfQVNNX1NUUklOR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIE1vc3Qgb2YgdGhlIGlubGluZSBmdW5jdGlvbnMgYXJlIHJhdGhlciBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMgc28gSSBqdXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaAppbmRleCAyNjFmNzFkLi4xMzAzMzNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX0FTTV9TWVNURU1fSAogI2RlZmluZSBfQVNNX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tbWlwcy90aHJlYWRfaW5mby5oCmluZGV4IGY4ZDk3ZGEuLmFlOGFkYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3RocmVhZF9pbmZvLmgKQEAgLTksNyArOSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tbWlwcy90bGJmbHVzaC5oCmluZGV4IGJiNGFlM2MuLjI3NmJlNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3RsYmZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1RMQkZMVVNIX0gKICNkZWZpbmUgX19BU01fVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcuaAppbmRleCA2Y2UxZTk0Li45NGJlZjAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaWZuZGVmIF9fQVNNX1RYNDkyN19UT1NISUJBX1JCVFg0OTI3X0gKICNkZWZpbmUgX19BU01fVFg0OTI3X1RPU0hJQkFfUkJUWDQ5MjdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3R4NDkyNy90eDQ5MjcuaD4KICNpbmNsdWRlIDxhc20vdHg0OTI3L3R4NDkyN19taXBzLmg+CiAjaWZkZWYgQ09ORklHX1BDSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90eXBlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy90eXBlcy5oCmluZGV4IGNkMjgxM2QuLjJiNTJlMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3R5cGVzLmgKQEAgLTUyLDcgKzUyLDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiB0eXBlZGVmIF9fc2lnbmVkIGNoYXIgczg7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oCmluZGV4IGI5NmYzZTAuLjFjZGQ0ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1VBQ0NFU1NfSAogI2RlZmluZSBfQVNNX1VBQ0NFU1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKaW5kZXggMTA2OGZlOS4uOGJiMGJiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCkBAIC05MDUsNiArOTA1LDggQEAKICNkZWZpbmUgX19OUl9OMzJfTGludXgJCQk2MDAwCiAjZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzCQkyNjgKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogLyogWFhYIC0gX2ZvbyBuZWVkcyB0byBiZSBfX2Zvbywgd2hpbGUgX19OUl9iYXIgY291bGQgYmUgX05SX2Jhci4gKi8KQEAgLTExNjgsOSArMTE3MCw2IEBACiAKICNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0KSAqLwogCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKQEAgLTExOTcsNyArMTE5Niw2IEBACiAjIGlmZGVmIENPTkZJR19NSVBTMzJfTzMyCiAjICBkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCiAjIGVuZGlmCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtMTI0OCw0ICsxMjQ2LDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG4iICN4ICJcdD1cdHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC92cmM0MTczLmggYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC92cmM0MTczLmgKaW5kZXggNGQ0MWE5Yy4uOTZmZGNkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvdnJjNDE3My5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3ZyYzQxNzMuaApAQCAtMjQsNyArMjQsNiBAQAogI2lmbmRlZiBfX05FQ19WUkM0MTczX0gKICNkZWZpbmUgX19ORUNfVlJDNDE3M19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvd2FyLmggYi9pbmNsdWRlL2FzbS1taXBzL3dhci5oCmluZGV4IDcwNjM2YjQuLjNhYzE0NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvd2FyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy93YXIuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX0FTTV9XQVJfSAogI2RlZmluZSBfQVNNX1dBUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIEFub3RoZXIgUjQ2MDAgZXJyYXR1bS4gIER1ZSB0byB0aGUgbGFjayBvZiBlcnJhdGEgaW5mb3JtYXRpb24gdGhlIGV4YWN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3diZmx1c2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvd2JmbHVzaC5oCmluZGV4IGMzYmVmNTAuLmVhZGMwYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvd2JmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvd2JmbHVzaC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fV0JGTFVTSF9ICiAjZGVmaW5lIF9BU01fV0JGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19DUFVfSEFTX1dCCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaAppbmRleCA0MDNlYTk3Li40OGJmOWI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2F0b21pYy5oCkBAIC01LDcgKzUsNiBAQAogI2lmbmRlZiBfQVNNX1BBUklTQ19BVE9NSUNfSF8KICNkZWZpbmUgX0FTTV9QQVJJU0NfQVRPTUlDX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGUuaAppbmRleCBjODMxNjY1Li43ZDIyZmEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGUuaApAQCAtNSw3ICs1LDYgQEAKICNpZm5kZWYgX19BUkNIX1BBUklTQ19DQUNIRV9ICiAjZGVmaW5lIF9fQVJDSF9QQVJJU0NfQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBQQSAyLjAgcHJvY2Vzc29ycyBoYXZlIDY0LWJ5dGUgY2FjaGVsaW5lczsgUEEgMS4xIHByb2Nlc3NvcnMgaGF2ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZWZsdXNoLmgKaW5kZXggNzZiNmI3ZC4uMGI0NTljZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGVmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfUEFSSVNDX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfUEFSSVNDX0NBQ0hFRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4JLyogZm9yIGZsdXNoX3VzZXJfZGNhY2hlX3JhbmdlX2FzbSgpIHByb3RvICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS1tYXBwaW5nLmgKaW5kZXggNzRkNGFjNi4uMWUzODdlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS1tYXBwaW5nLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9QQVJJU0NfRE1BX01BUFBJTkdfSAogI2RlZmluZSBfUEFSSVNDX0RNQV9NQVBQSU5HX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEuaAppbmRleCAzMWZkMTBkLi45OTc5YzNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX0RNQV9ICiAjZGVmaW5lIF9BU01fRE1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2lvLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaAppbmRleCAyNDRmNmI4Li5iOWViMjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9JT19ICiAjZGVmaW5lIF9BU01fSU9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaXJxLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaXJxLmgKaW5kZXggYjBhMzBlMi4uMzc3YmE5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pcnEuaApAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgX0FTTV9QQVJJU0NfSVJRX0gKICNkZWZpbmUgX0FTTV9QQVJJU0NfSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9rbWFwX3R5cGVzLmgKaW5kZXggNjg4NmEwYy4uODA2YWFlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2ttYXBfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mva21hcF90eXBlcy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAogI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQogIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BhZ2UuaAppbmRleCBjMGRkNDYxLi4wNjk1YmM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmgKQEAgLTEwLDcgKzEwLDYgQEAKIAogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfUEFSSVNDX1BBR0VfU0laRV80S0IpCiAjIGRlZmluZSBQQUdFX1NISUZUCTEyCS8qIDRrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wYXJhbS5oCmluZGV4IGY0Njk0ZDQuLjA3Y2I5YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wYXJhbS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNUEFSSVNDX1BBUkFNX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICMgaWZkZWYgQ09ORklHX1BBMjAKICMgIGRlZmluZSBIWgkJMTAwMAkJLyogRmFzdGVyIG1hY2hpbmVzICovCiAjIGVsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wY2kuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wY2kuaAppbmRleCA3N2JiYWZiLi44YjYzMWY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BjaS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9QQVJJU0NfUENJX0gKICNkZWZpbmUgX19BU01fUEFSSVNDX1BDSV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjLmgKaW5kZXggMGEzZmFjZS4uMDgzNjRmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1BBUklTQ19QRENfSAogI2RlZmluZSBfUEFSSVNDX1BEQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCVBEQyByZXR1cm4gdmFsdWVzIC4uLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKaW5kZXggYWVjMDg5ZS4uYjZiY2M2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcHJvY2Vzc29yLmgKaW5kZXggODlmMmYxYy4uY2E0OWRjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wcm9jZXNzb3IuaApAQCAtOSw3ICs5LDYgQEAKICNkZWZpbmUgX19BU01fUEFSSVNDX1BST0NFU1NPUl9ICiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wc3cuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wc3cuaAppbmRleCA0MzM0ZDZjLi41YTNlMjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcHN3LmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3Bzdy5oCkBAIC0xLDYgKzEsNSBAQAogI2lmbmRlZiBfUEFSSVNDX1BTV19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZQlQU1dfSQkweDAwMDAwMDAxCiAjZGVmaW5lCVBTV19ECTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zbXAuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zbXAuaAppbmRleCBkYmRiZDJlLi5kNGMwZTI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NtcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TTVBfSAogI2RlZmluZSBfX0FTTV9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zeXN0ZW0uaAppbmRleCBhNWE5NzNjLi44NjM4NzYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N5c3RlbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX1BBUklTQ19TWVNURU1fSAogI2RlZmluZSBfX1BBUklTQ19TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Bzdy5oPgogCiAvKiBUaGUgcHJvZ3JhbSBzdGF0dXMgd29yZCBhcyBiaXRmaWVsZHMuICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiZmx1c2guaAppbmRleCA4MjU5OTRhLi5mNjYyZTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiZmx1c2guaApAQCAtMyw3ICszLDYgQEAKIAogLyogVExCIGZsdXNoaW5nIHJvdXRpbmVzLi4uLiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oCmluZGV4IDBlMWEzMGIuLjEyYjg2NzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmgKQEAgLTc5Miw2ICs3OTIsNyBAQAogI2RlZmluZSBIUFVYX0dBVEVXQVlfQUREUiAgICAgICAweEMwMDAwMDA0CiAjZGVmaW5lIExJTlVYX0dBVEVXQVlfQUREUiAgICAgIDB4MTAwCiAKKyNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjZGVmaW5lIFNZU19pZnkoc3lzY2FsbF9uYW1lKSAgIF9fTlJfIyNzeXNjYWxsX25hbWUKQEAgLTkzNCw3ICs5MzUsNiBAQAogICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKG5hbWUsIDUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwlcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KQEAgLTk1Niw3ICs5NTYsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2VuZGlmCiAKIC8qIG1tYXAgJiBtbWFwMiB0YWtlIDYgYXJndW1lbnRzICovCiAjZGVmaW5lIF9zeXNjYWxsNih0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1LHR5cGU2LGFyZzYpIFwKQEAgLTEwNTYsNCArMTA1NSw1IEBACiAgKi8KICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUEFSSVNDX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oCmluZGV4IGM1YzMyNTkuLjRhYTIyMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYWJzX2FkZHIuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Fic19hZGRyLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19BQlNfQUREUl9ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBjIDIwMDEgUFBDIDY0IFRlYW0sIElCTSBDb3JwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlLmgKaW5kZXggNjM3OWMyZC4uNjQyYmU2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGUuaApAQCAtMyw3ICszLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLwogI2lmIGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfNDAzR0NYKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9kbWEtbWFwcGluZy5oCmluZGV4IDJhYzYzZjUuLjJhYjliYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2RtYS1tYXBwaW5nLmgKQEAgLTgsNyArOCw2IEBACiAjZGVmaW5lIF9BU01fRE1BX01BUFBJTkdfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIC8qIG5lZWQgc3RydWN0IHBhZ2UgZGVmaW5pdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZG1hLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2RtYS5oCmluZGV4IDRiYjU3ZmUuLjdhNDM3NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9kbWEuaApAQCAtMjIsNyArMjIsNiBAQAogICogd2l0aCBhIGdyYWluIG9mIHNhbHQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmgKaW5kZXggODY4YzcxMy4uZTljODZiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWguaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaC5oCkBAIC0yMSw3ICsyMSw2IEBACiAjZGVmaW5lIF9QUEM2NF9FRUhfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2VsZi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lbGYuaAppbmRleCA5NGQyMjhmLi45OWMxOGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWxmLmgKQEAgLTMsMTQgKzMsMTQgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBmb3IgdGFza19zdHJ1Y3QgKi8KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9hdXh2ZWMuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KIAogLyogUG93ZXJQQyByZWxvY2F0aW9ucyBkZWZpbmVkIGJ5IHRoZSBBQklzICovCiAjZGVmaW5lIFJfUFBDX05PTkUJCTAKQEAgLTEyOSw3ICsxMjksNyBAQAogICAvKiBBc3N1bXB0aW9uOiBFTEZfQVJDSCA9PSBFTV9QUEMgYW5kIEVMRl9DTEFTUyA9PSBFTEZDTEFTUzMyICovCiAgIHR5cGVkZWYgZWxmX2dyZWdfdDMyIGVsZl9ncmVnX3Q7CiAgIHR5cGVkZWYgZWxmX2dyZWdzZXRfdDMyIGVsZl9ncmVnc2V0X3Q7Ci0jIGRlZmluZSBlbGZfYWRkcl90IHUzMgorIyBkZWZpbmUgZWxmX2FkZHJfdCBfX3UzMgogI2VuZGlmIC8qIEVMRl9BUkNIICovCiAKIC8qIEZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwpAQCAtMTYxLDYgKzE2MSw3IEBACiB0eXBlZGVmIGVsZl92cnJlZ190IGVsZl92cnJlZ3NldF90MzJbRUxGX05WUlJFRzMyXTsKICNlbmRpZgogCisjaWZkZWYgX19LRVJORUxfXwogLyoKICAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCiAgKi8KQEAgLTE3Niw4ICsxNzcsNiBAQAogCiAjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgICgweDA4MDAwMDAwKQogCi0jaWZkZWYgX19LRVJORUxfXwotCiAvKiBDb21tb24gcm91dGluZSBmb3IgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBwcm9jZXNzZXMgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBwcGNfZWxmX2NvcmVfY29weV9yZWdzKGVsZl9ncmVnc2V0X3QgZWxmX3JlZ3MsCiAJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zsb3BweS5oCmluZGV4IDYwODE2NGMuLjdlMmQxNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9mbG9wcHkuaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZSBfX0FTTV9QT1dFUlBDX0ZMT1BQWV9ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KIAogI2RlZmluZSBmZF9pbmIocG9ydCkJCWluYl9wKHBvcnQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaAppbmRleCAyNmI4OWQ4Li5jZTBmN2RiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKQEAgLTYsNyArNiw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lkZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pZGUuaAppbmRleCBkYTVmNjQwLi5iMDliNDJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaWRlLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNlbmRpZgogCiAjaWZuZGVmICBfX3Bvd2VycGM2NF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaAppbmRleCAxOGNhMjllLi4yYWNmN2IyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oCkBAIC0yMiw3ICsyMiw2IEBACiAjZGVmaW5lIF9BU01fSU9NTVVfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAppbmRleCA3YmM2ZDczLi4xZTlmMjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKQEAgLTksNyArOSw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pc2VyaWVzX2lvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXNlcmllc19pby5oCmluZGV4IDQ5NmFhODUuLmYyOTAwOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pc2VyaWVzX2lvLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2lzZXJpZXNfaW8uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX0lTRVJJRVNfSVNFUklFU19JT19ICiAjZGVmaW5lIF9BU01fUE9XRVJQQ19JU0VSSUVTX0lTRVJJRVNfSU9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2hkZXAuaAppbmRleCAwZjkyNTRjLi4zZTdkMzdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2hkZXAuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2hkZXAuaApAQCAtOSw3ICs5LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tem9uZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXpvbmUuaAppbmRleCA4OGQ3MGJhLi5kNDg0Y2E5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tem9uZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW16b25lLmgKQEAgLTgsNyArOCw2IEBACiAjZGVmaW5lIF9BU01fTU1aT05FX0hfCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBnZW5lcmljIG5vbi1saW5lYXIgbWVtb3J5IHN1cHBvcnQ6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oCmluZGV4IDcwNjMyNWYuLjNjNmY2NDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oCkBAIC0xNiw3ICsxNiw2IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19QQUNBX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlCTxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlCTxhc20vdHlwZXMuaD4KICNpbmNsdWRlCTxhc20vbHBwYWNhLmg+CiAjaW5jbHVkZQk8YXNtL21tdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2UuaAppbmRleCAyZmJlY2ViLi5mMDQ2OWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2UuaApAQCAtMTEsNyArMTEsNiBAQAogICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLmgKaW5kZXggZTlmMWY0Ni4uOTY0ZTMxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JCS8qIEZvciBUQVNLX1NJWkUgKi8KICNpbmNsdWRlIDxhc20vbW11Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oCmluZGV4IGRkMWMwYTkuLmE5NDBjZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oCkBAIC01LDcgKzUsNiBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfUFBDX0FTTV9ICiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaAppbmRleCA5N2VmMWNkLi5mNGUyY2E2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaApAQCAtMTUsNyArMTUsNiBAQAogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXAuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc21wLmgKaW5kZXggNGE3MTZmNy4uMDY4ZjExOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtcC5oCkBAIC0xNyw3ICsxNyw2IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19TTVBfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtdS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXUuaAppbmRleCAyZGM5MzYzLi41MWU2NWZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc211LmgKQEAgLTUsNyArNSw2IEBACiAgKiBEZWZpbml0aW9ucyBmb3IgdGFsa2luZyB0byB0aGUgU01VIGNoaXAgaW4gbmV3ZXIgRzUgUG93ZXJNYWNzCiAgKi8KICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oCmluZGV4IDdjZmNmZjMuLjk1NzEzZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaApAQCAtMjQsNyArMjQsNiBAQAogI2RlZmluZSBfU1BVX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaAppbmRleCA4OGI1NTNjLi5kMzM5ZTJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aHJlYWRfaW5mby5oCkBAIC0yMSw3ICsyMSw2IEBACiAjZGVmaW5lIFRIUkVBRF9TSVpFCQkoMSA8PCBUSFJFQURfU0hJRlQpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmgKaW5kZXggOTEyMTE4ZC4uNDQ2MzE0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNkZWZpbmUgX19QT1dFUlBDX1RJTUVfSAogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZXguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZXguaAppbmRleCBjMDJkMTVhLi4zYjlhOGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1leC5oCkBAIC03LDcgKzcsNiBAQAogICogUG93ZXJQQyBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTEwMjQwMDAgLyogVW5kZXJseWluZyBIWiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90bGIuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiLmgKaW5kZXggNjAxYTUzYy4uNGUyYTgzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90bGIuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RsYi5oCkBAIC0xMyw3ICsxMyw2IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19UTEJfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmbmRlZiBfX3Bvd2VycGM2NF9fCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90bGJmbHVzaC5oCmluZGV4IGEyOTk4ZWUuLjkzYzdkMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RsYmZsdXNoLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqLwogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3QgbW1fc3RydWN0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKaW5kZXggODczNjJhMC4uMTljNTc1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0FTTV9QT1dFUlBDX1RPUE9MT0dZX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogc3RydWN0IHN5c19kZXZpY2U7CiBzdHJ1Y3QgZGV2aWNlX25vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3R5cGVzLmgKaW5kZXggYmFhYmJhOS4uZDZmYjU2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdHlwZXMuaApAQCAtNjQsNyArNjQsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHR5cGVkZWYgc2lnbmVkIGNoYXIgczg7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaAppbmRleCBlZGRlMjQ2Li5lYjY2ZWFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmgKQEAgLTMyNCwxMiArMzI0LDEyIEBACiAjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTI5OQogI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDAKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBfX05SX3N5c2NhbGxzCQkzMDEKIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKICNkZWZpbmUgTlJfc3lzY2FsbHMJX19OUl9zeXNjYWxscwotI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTQ0MSw5ICs0NDEsNyBAQAogCV9fc3lzY2FsbF9ucig2LCB0eXBlLCBuYW1lLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KTsgXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KQEAgLTQ5OSw4ICs0OTcsOCBAQAogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0LiIgI3ggIlxuXHQuc2V0XHQuIiAjeCAiLC5zeXNfbmlfc3lzY2FsbCIpCiAjZW5kaWYKIAotI2VuZGlmCQkvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgkJLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYJCS8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9BU01fUFBDX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy92Z2EuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdmdhLmgKaW5kZXggZjhkMzUwYS4uZWFkYWYyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy92Z2EuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3ZnYS5oCkBAIC0xMiw3ICsxMiw2IEBACiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfVkdBX0NPTlNPTEUpIHx8IGRlZmluZWQoQ09ORklHX01EQV9DT05TT0xFKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Zpby5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy92aW8uaAppbmRleCAwNTQ0ZWNlLi5iZTE0YzU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Zpby5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdmlvLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNkZWZpbmUgX0FTTV9QT1dFUlBDX1ZJT19ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvYW1pZ2Fody5oIGIvaW5jbHVkZS9hc20tcHBjL2FtaWdhaHcuaAppbmRleCA4Yzk4OTQ1Li45MGZkMTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvYW1pZ2Fody5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9hbWlnYWh3LmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9fQVNNUFBDX0FNSUdBSFdfSAogI2RlZmluZSBfX0FTTVBQQ19BTUlHQUhXX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS1tNjhrL2FtaWdhaHcuaD4KIAogI3VuZGVmIENISVBfUEhZU0FERFIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9ib290aW5mby5oIGIvaW5jbHVkZS9hc20tcHBjL2Jvb3RpbmZvLmgKaW5kZXggOTNkOTU1Yy4uMmFjZTRhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2Jvb3RpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2Jvb3RpbmZvLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9QUENfQk9PVElORk9fSAogI2RlZmluZSBfUFBDX0JPT1RJTkZPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUFVTKSAmJiAhZGVmaW5lZChfX0JPT1RFUl9fKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2NvbW1wcm9jLmggYi9pbmNsdWRlL2FzbS1wcGMvY29tbXByb2MuaAppbmRleCAzMWYzNjI5Li4zMjQ3YmVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvY29tbXByb2MuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvY29tbXByb2MuaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfX0NQTV84WFhfXwogI2RlZmluZSBfX0NQTV84WFhfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtLzh4eF9pbW1hcC5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2libTQwMy5oIGIvaW5jbHVkZS9hc20tcHBjL2libTQwMy5oCmluZGV4IGJmNmVmYTAuLmM5YzVkNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9pYm00MDMuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaWJtNDAzLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fSUJNNDAzX0hfXwogI2RlZmluZSBfX0FTTV9JQk00MDNfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHXzQwM0dDWCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2libTQ0eC5oIGIvaW5jbHVkZS9hc20tcHBjL2libTQ0eC5oCmluZGV4IDNhY2MzODIuLjc4MThiNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9pYm00NHguaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaWJtNDR4LmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgX19BU01fSUJNNDR4X0hfXwogI2RlZmluZSBfX0FTTV9JQk00NHhfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBOUl9CT0FSRF9JUlFTCiAjZGVmaW5lIE5SX0JPQVJEX0lSUVMgMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2libTR4eC5oIGIvaW5jbHVkZS9hc20tcHBjL2libTR4eC5oCmluZGV4IDM4Zjk5NzEuLmNmNjJiNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9pYm00eHguaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaWJtNHh4LmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZm5kZWYgX19BU01fSUJNNFhYX0hfXwogI2RlZmluZSBfX0FTTV9JQk00WFhfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogI2lmZGVmIENPTkZJR180MHgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pby5oIGIvaW5jbHVkZS9hc20tcHBjL2lvLmgKaW5kZXggYjkxOWQ4Zi4uODljNmYxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2lvLmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9QUENfSU9fSAogI2RlZmluZSBfUFBDX0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tYWNoZGVwLmggYi9pbmNsdWRlL2FzbS1wcGMvbWFjaGRlcC5oCmluZGV4IGUxYTBhN2IuLmRhNzc0NjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tYWNoZGVwLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21hY2hkZXAuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX1BQQ19NQUNIREVQX0gKICNkZWZpbmUgX1BQQ19NQUNIREVQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbW11LmggYi9pbmNsdWRlL2FzbS1wcGMvbW11LmgKaW5kZXggOTIwNWRiNC4uMGE3MGIwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tbXUuaApAQCAtNiw3ICs2LDYgQEAKICNpZm5kZWYgX1BQQ19NTVVfSF8KICNkZWZpbmUgX1BQQ19NTVVfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXBwYy9tbXVfY29udGV4dC5oCmluZGV4IDRmMTUyY2MuLjk0ZjJiZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tbXVfY29udGV4dC5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfX1BQQ19NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9fUFBDX01NVV9DT05URVhUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzgyNjAuaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4MjYwLmgKaW5kZXggNmJhNjlhOC4uNGI5MzQ4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21wYzgyNjAuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MC5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfX0FTTV9QUENfTVBDODI2MF9IX18KICNkZWZpbmUgX19BU01fUFBDX01QQzgyNjBfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR184MjYwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjODN4eC5oCmluZGV4IDNjMjNmYzQuLjAyZWQyYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21wYzgzeHguaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfX0FTTV9NUEM4M3h4X0hfXwogI2RlZmluZSBfX0FTTV9NUEM4M3h4X0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAjaWZkZWYgQ09ORklHXzgzeHgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4NXh4LmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjODV4eC5oCmluZGV4IGY0NzAwMmEuLmMyNWJkZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4NXh4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21wYzg1eHguaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfX0FTTV9NUEM4NXh4X0hfXwogI2RlZmluZSBfX0FTTV9NUEM4NXh4X0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAjaWZkZWYgQ09ORklHXzg1eHgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4eHguaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4eHguaAppbmRleCAzNTE1YTdmLi5hZGNjZTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21wYzh4eC5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfX0NPTkZJR184eHhfREVGUwogI2RlZmluZSBfX0NPTkZJR184eHhfREVGUwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfOHh4CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tdjY0eDYwLmggYi9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MC5oCmluZGV4IDRmMjQwNWIuLjY2M2VkYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tdjY0eDYwLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL212NjR4NjAuaApAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvb2NwLmggYi9pbmNsdWRlL2FzbS1wcGMvb2NwLmgKaW5kZXggOTgzMTE2Zi4uM2JlNWQ3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL29jcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9vY3AuaApAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL29wZW5fcGljLmggYi9pbmNsdWRlL2FzbS1wcGMvb3Blbl9waWMuaAppbmRleCBlYzJmNDY2Li5hNGZlOTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvb3Blbl9waWMuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvb3Blbl9waWMuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfUFBDX0tFUk5FTF9PUEVOX1BJQ19ICiAjZGVmaW5lIF9QUENfS0VSTkVMX09QRU5fUElDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjZGVmaW5lIE9QRU5QSUNfU0laRQkweDQwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oIGIvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaAppbmRleCAwZmI2OGEwLi4wYjE5YWY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9QUENfUEFHRV9ICiAjZGVmaW5lIF9QUENfUEFHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwpAQCAtMTUsNyArMTQsNiBAQAogI2RlZmluZSBQQUdFX01BU0sJKH4oKDEgPDwgUEFHRV9TSElGVCkgLSAxKSkKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogVGhpcyBtdXN0IG1hdGNoIHdoYXQgaXMgaW4gYXJjaC9wcGMvTWFrZWZpbGUgKi8KICNkZWZpbmUgUEFHRV9PRkZTRVQJQ09ORklHX0tFUk5FTF9TVEFSVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BjX3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tcHBjL3BjX3NlcmlhbC5oCmluZGV4IDhmOTk0ZjkuLjgxYTJkMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wY19zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGNfc2VyaWFsLmgKQEAgLTksNyArOSw2IEBACiAgKiBhbnlvbmUgdXNpbmcgYW55IG9mIHRob3NlIG9uIGEgUFBDIHBsYXRmb3JtLiAgLS0gcGF1bHVzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXBwYy9wZ2FsbG9jLmgKaW5kZXggYmRlZmQxYy4uNDRkODhhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGdhbGxvYy5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfUFBDX1BHQUxMT0NfSAogI2RlZmluZSBfUFBDX1BHQUxMT0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCiBleHRlcm4gdm9pZCBfX2JhZF9wdGUocG1kX3QgKnBtZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tcHBjL3BndGFibGUuaAppbmRleCA1NzBiMzU1Li45Y2I4MzY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmgKQEAgLTQsNyArNCw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcHBjNHh4X2RtYS5oIGIvaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9kbWEuaAppbmRleCA0NmEwODZmLi45MzVkMWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcHBjNHh4X2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfZG1hLmgKQEAgLTI0LDcgKzI0LDYgQEAKICNpZm5kZWYgX19BU01QUENfUFBDNHh4X0RNQV9ICiAjZGVmaW5lIF9fQVNNUFBDX1BQQzR4eF9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2libTR4eC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9waWMuaCBiL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfcGljLmgKaW5kZXggYzE2YzdmOC4uZTQ0MjYxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9waWMuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcHBjNHh4X3BpYy5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmCV9fUFBDNFhYX1BJQ19IX18KICNkZWZpbmUJX19QUEM0WFhfUElDX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tcHBjL3NlcmlhbC5oCmluZGV4IGI3NGFmNTQuLjhhNTlmODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc2VyaWFsLmgKQEAgLTYsNyArNiw2IEBACiAjaWZuZGVmIF9fQVNNX1NFUklBTF9IX18KICNkZWZpbmUgX19BU01fU0VSSUFMX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19FVjY0MjYwKQogI2luY2x1ZGUgPHBsYXRmb3Jtcy9ldjY0MjYwLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc21wLmggYi9pbmNsdWRlL2FzbS1wcGMvc21wLmgKaW5kZXggMzBlOTI2OC4uMGI3ZmE4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9zbXAuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfUFBDX1NNUF9ICiAjZGVmaW5lIF9QUENfU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvdGltZS5oIGIvaW5jbHVkZS9hc20tcHBjL3RpbWUuaAppbmRleCBjODYxMTIzMi4uZjdlYWRmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3RpbWUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvdGltZS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfX0FTTV9USU1FX0hfXwogI2RlZmluZSBfX0FTTV9USU1FX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tczM5MC9iaXRvcHMuaAppbmRleCBjYTA5MmZmLi40ZDJiMTI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqICAgIENvcHlyaWdodCAoQykgMTk5MiwgTGludXMgVG9ydmFsZHMKICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9jbWIuaCBiL2luY2x1ZGUvYXNtLXMzOTAvY21iLmgKaW5kZXggZGFlMWRkNC4uMmQwOTk1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9jbWIuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2NtYi5oCkBAIC00Nyw3ICs0Nyw3IEBACiAvKiByZXNldCBjaGFubmVsIG1lYXN1cmVtZW50IGJsb2NrICovCiAjZGVmaW5lIEJJT0RBU0RSRVNFVENNQgkJX0lPKERBU0RfSU9DVExfTEVUVEVSLDM0KQogLyogcmVhZCBjaGFubmVsIG1lYXN1cmVtZW50IGRhdGEgKi8KLSNkZWZpbmUgQklPREFTRFJFQURDTUIJCV9JT1dSKERBU0RfSU9DVExfTEVUVEVSLDMyLHU2NCkKKyNkZWZpbmUgQklPREFTRFJFQURDTUIJCV9JT1dSKERBU0RfSU9DVExfTEVUVEVSLDMyLF9fdTY0KQogLyogcmVhZCBjaGFubmVsIG1lYXN1cmVtZW50IGRhdGEgKi8KICNkZWZpbmUgQklPREFTRFJFQURBTExDTUIJX0lPV1IoREFTRF9JT0NUTF9MRVRURVIsMzMsc3RydWN0IGNtYmRhdGEpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaAppbmRleCAyMzQ1MGVkLi43ZjFlZjk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBERUJVR19ICiAjZGVmaW5lIERFQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tczM5MC9oYXJkaXJxLmgKaW5kZXggNjc5MmM1NS4uZTg0YjdlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9oYXJkaXJxLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvaWRhbHMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvaWRhbHMuaAppbmRleCA4MDM4ODU4Li5lODJjMTBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2lkYWxzLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9pZGFscy5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9TMzkwX0lEQUxTX0gKICNkZWZpbmUgX1MzOTBfSURBTFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9sb2NhbC5oIGIvaW5jbHVkZS9hc20tczM5MC9sb2NhbC5oCmluZGV4IGNmODE4OTAuLjg2NzQ1YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvbG9jYWwuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2xvY2FsLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTE9DQUxfSAogI2RlZmluZSBfQVNNX0xPQ0FMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmggYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAppbmRleCBiZWE3Mjc5Li41OTZjOGIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaApAQCAtMTI0LDcgKzEyNCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2lncC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BhZ2UuaAppbmRleCAzYjExMzhhLi5iMjYyOGRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BhZ2UuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX1MzOTBfUEFHRV9ICiAjZGVmaW5lIF9TMzkwX1BBR0VfSAogCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCkBAIC0yMCw2ICsxOSw3IEBACiAjZGVmaW5lIFBBR0VfREVGQVVMVF9LRVkJKFBBR0VfREVGQVVMVF9BQ0MgPDwgNCkKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKICNpZm5kZWYgX19zMzkweF9fCkBAIC0xODksOSArMTg5LDkgQEAKICNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAogCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYgLyogX1MzOTBfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oCmluZGV4IGUyOGFhZjIuLjMwMDJmZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9TMzkwX1BHQUxMT0NfSAogI2RlZmluZSBfUzM5MF9QR0FMTE9DX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tczM5MC9wb3NpeF90eXBlcy5oCmluZGV4IDYxNzg4ZGUuLmI5NGM5ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcG9zaXhfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Bvc2l4X3R5cGVzLmgKQEAgLTc2LDI0ICs3NiwzNiBAQAogfSBfX2tlcm5lbF9mc2lkX3Q7CiAKIAotI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKKyNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpZm5kZWYgX1MzOTBfQklUT1BTX0gKLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+Ci0jZW5kaWYKKyN1bmRlZiBfX0ZEX1NFVAorc3RhdGljIGlubGluZSB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gfD0gKDFVTDw8X3JlbSk7Cit9CiAKLSN1bmRlZiAgX19GRF9TRVQKLSNkZWZpbmUgX19GRF9TRVQoZmQsZmRzZXRwKSAgc2V0X2JpdCgoZmQpLChmZHNldHApLT5mZHNfYml0cykKKyN1bmRlZiBfX0ZEX0NMUgorc3RhdGljIGlubGluZSB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCWZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gJj0gfigxVUw8PF9yZW0pOworfQogCi0jdW5kZWYgIF9fRkRfQ0xSCi0jZGVmaW5lIF9fRkRfQ0xSKGZkLGZkc2V0cCkgIGNsZWFyX2JpdCgoZmQpLChmZHNldHApLT5mZHNfYml0cykKLQotI3VuZGVmICBfX0ZEX0lTU0VUCi0jZGVmaW5lIF9fRkRfSVNTRVQoZmQsZmRzZXRwKSAgdGVzdF9iaXQoKGZkKSwoZmRzZXRwKS0+ZmRzX2JpdHMpCisjdW5kZWYgX19GRF9JU1NFVAorc3RhdGljIGlubGluZSBpbnQgX19GRF9JU1NFVCh1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBfX2tlcm5lbF9mZF9zZXQgKmZkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKKwlyZXR1cm4gKGZkc2V0cC0+ZmRzX2JpdHNbX3RtcF0gJiAoMVVMPDxfcmVtKSkgIT0gMDsKK30KIAogI3VuZGVmICBfX0ZEX1pFUk8KLSNkZWZpbmUgX19GRF9aRVJPKGZkc2V0cCkgKG1lbXNldCAoKGZkc2V0cCksIDAsIHNpemVvZigqKGZkX3NldCAqKShmZHNldHApKSkpCisjZGVmaW5lIF9fRkRfWkVSTyhmZHNldHApIFwKKwkoKHZvaWQpIG1lbXNldCAoKF9fcHRyX3QpIChmZHNldHApLCAwLCBzaXplb2YgKF9fa2VybmVsX2ZkX3NldCkpKQogCi0jZW5kaWYgICAgIC8qIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikqLworI2VuZGlmICAgICAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcHRyYWNlLmgKaW5kZXggYTk0OWNjMC4uNGQ3NWQ3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3B0cmFjZS5oCkBAIC0xODEsMTEgKzE4MSw4IEBACiAjZGVmaW5lIFBUUkFDRV9PTERTRVRPUFRJT05TICAgICAgICAgMjEKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIHR5cGVkZWYgdW5pb24KIHsKQEAgLTMwMSw2ICsyOTgsOSBAQAogfSBzMzkwX3JlZ3M7CiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKwogLyoKICAqIFRoZSBwdF9yZWdzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uCiAgKiB0aGUgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NmcC1tYWNoaW5lLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NmcC1tYWNoaW5lLmgKaW5kZXggM2M3OWI1My4uZGU2OWRmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zZnAtbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc2ZwLW1hY2hpbmUuaApAQCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBfU0ZQX01BQ0hJTkVfSAogI2RlZmluZSBfU0ZQX01BQ0hJTkVfSAogICAgCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgX0ZQX1dfVFlQRV9TSVpFCQkzMgogI2RlZmluZSBfRlBfV19UWVBFCQl1bnNpZ25lZCBsb25nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oIGIvaW5jbHVkZS9hc20tczM5MC9zbXAuaAppbmRleCA0NDRkYWU1Li42NTc2NDYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX19BU01fU01QX0gKICNkZWZpbmUgX19BU01fU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaAppbmRleCA2YTg5ZGJiLi43MWEwNzMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc3lzdGVtLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX19BU01fU1lTVEVNX0gKICNkZWZpbmUgX19BU01fU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXMzOTAvdGxiZmx1c2guaAppbmRleCAxYmI3M2IwLi43M2NkODViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC90bGJmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfUzM5MF9UTEJGTFVTSF9ICiAjZGVmaW5lIF9TMzkwX1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zMzkwL3R5cGVzLmgKaW5kZXggNTczOGFkNjMuLmFlMjk1MWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3R5cGVzLmgKQEAgLTU4LDcgKzU4LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiB0eXBlZGVmIHNpZ25lZCBjaGFyIHM4OwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKaW5kZXggNDFjMjc5Mi4uZTIxNDQzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCkBAIC0zOTIsNiArMzkyLDggQEAKIAogI2VuZGlmCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIC8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTIyOiBzZWUgPGFzbS1zMzkwL2Vycm5vLmg+ICovCiAKICNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpCQkJICAgICBcCkBAIC01NDYsNyArNTQ4LDYgQEAKIAlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCSAgICAgXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KQEAgLTU3MywxMSArNTc0LDkgQEAKICMgICBkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCiAjICAgZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUlRfU0lHU1VTUEVORAogIyBlbmRpZgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpAQCAtNjI1LDcgKzYyNCw3IEBACiAJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCiAJCQkJc2l6ZV90IHNpZ3NldHNpemUpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC02MzUsNCArNjM0LDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9TMzkwX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC92dG9jLmggYi9pbmNsdWRlL2FzbS1zMzkwL3Z0b2MuaAppbmRleCBkMWRlNWI3Li4zYTUyNjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3Z0b2MuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Z0b2MuaApAQCAtMTc3LDI3ICsxNzcsMjcgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgdnRvY19jbXNfbGFiZWwgewotCXU4IGxhYmVsX2lkWzRdOwkJLyogTGFiZWwgaWRlbnRpZmllciAqLwotCXU4IHZvbF9pZFs2XTsJCS8qIFZvbGlkICovCi0JdTE2IHZlcnNpb25faWQ7CQkvKiBWZXJzaW9uIGlkZW50aWZpZXIgKi8KLQl1MzIgYmxvY2tfc2l6ZTsJCS8qIERpc2sgYmxvY2sgc2l6ZSAqLwotCXUzMiBvcmlnaW5fcHRyOwkJLyogRGlzayBvcmlnaW4gcG9pbnRlciAqLwotCXUzMiB1c2FibGVfY291bnQ7CS8qIE51bWJlciBvZiB1c2FibGUgY3lsaW5kZXJzL2Jsb2NrcyAqLwotCXUzMiBmb3JtYXR0ZWRfY291bnQ7CS8qIE1heGltdW0gbnVtYmVyIG9mIGZvcm1hdHRlZCBjeWxpbmRlcnMvCisJX191OCBsYWJlbF9pZFs0XTsJCS8qIExhYmVsIGlkZW50aWZpZXIgKi8KKwlfX3U4IHZvbF9pZFs2XTsJCS8qIFZvbGlkICovCisJX191MTYgdmVyc2lvbl9pZDsJCS8qIFZlcnNpb24gaWRlbnRpZmllciAqLworCV9fdTMyIGJsb2NrX3NpemU7CQkvKiBEaXNrIGJsb2NrIHNpemUgKi8KKwlfX3UzMiBvcmlnaW5fcHRyOwkJLyogRGlzayBvcmlnaW4gcG9pbnRlciAqLworCV9fdTMyIHVzYWJsZV9jb3VudDsJLyogTnVtYmVyIG9mIHVzYWJsZSBjeWxpbmRlcnMvYmxvY2tzICovCisJX191MzIgZm9ybWF0dGVkX2NvdW50OwkvKiBNYXhpbXVtIG51bWJlciBvZiBmb3JtYXR0ZWQgY3lsaW5kZXJzLwogCQkJCSAqIGJsb2NrcyAqLwotCXUzMiBibG9ja19jb3VudDsJLyogRGlzayBzaXplIGluIENNUyBibG9ja3MgKi8KLQl1MzIgdXNlZF9jb3VudDsJCS8qIE51bWJlciBvZiBDTVMgYmxvY2tzIGluIHVzZSAqLwotCXUzMiBmc3Rfc2l6ZTsJCS8qIEZpbGUgU3RhdHVzIFRhYmxlIChGU1QpIHNpemUgKi8KLQl1MzIgZnN0X2NvdW50OwkJLyogTnVtYmVyIG9mIEZTVHMgcGVyIENNUyBibG9jayAqLwotCXU4IGZvcm1hdF9kYXRlWzZdOwkvKiBEaXNrIEZPUk1BVCBkYXRlICovCi0JdTggcmVzZXJ2ZWQxWzJdOwotCXUzMiBkaXNrX29mZnNldDsJLyogRGlzayBvZmZzZXQgd2hlbiByZXNlcnZlZCovCi0JdTMyIG1hcF9ibG9jazsJCS8qIEFsbG9jYXRpb24gTWFwIEJsb2NrIHdpdGggbmV4dCBob2xlICovCi0JdTMyIGhibGtfZGlzcDsJCS8qIERpc3BsYWNlbWVudCBpbnRvIEhCTEsgZGF0YSBvZiBuZXh0IGhvbGUgKi8KLQl1MzIgdXNlcl9kaXNwOwkJLyogRGlzcGxhY2VtZW50IGludG8gdXNlciBwYXJ0IG9mIEFsbG9jYXRpb24KKwlfX3UzMiBibG9ja19jb3VudDsJLyogRGlzayBzaXplIGluIENNUyBibG9ja3MgKi8KKwlfX3UzMiB1c2VkX2NvdW50OwkJLyogTnVtYmVyIG9mIENNUyBibG9ja3MgaW4gdXNlICovCisJX191MzIgZnN0X3NpemU7CQkvKiBGaWxlIFN0YXR1cyBUYWJsZSAoRlNUKSBzaXplICovCisJX191MzIgZnN0X2NvdW50OwkJLyogTnVtYmVyIG9mIEZTVHMgcGVyIENNUyBibG9jayAqLworCV9fdTggZm9ybWF0X2RhdGVbNl07CS8qIERpc2sgRk9STUFUIGRhdGUgKi8KKwlfX3U4IHJlc2VydmVkMVsyXTsKKwlfX3UzMiBkaXNrX29mZnNldDsJLyogRGlzayBvZmZzZXQgd2hlbiByZXNlcnZlZCovCisJX191MzIgbWFwX2Jsb2NrOwkJLyogQWxsb2NhdGlvbiBNYXAgQmxvY2sgd2l0aCBuZXh0IGhvbGUgKi8KKwlfX3UzMiBoYmxrX2Rpc3A7CQkvKiBEaXNwbGFjZW1lbnQgaW50byBIQkxLIGRhdGEgb2YgbmV4dCBob2xlICovCisJX191MzIgdXNlcl9kaXNwOwkJLyogRGlzcGxhY2VtZW50IGludG8gdXNlciBwYXJ0IG9mIEFsbG9jYXRpb24KIAkJCQkgKiBtYXAgKi8KLQl1OCByZXNlcnZlZDJbNF07Ci0JdTggc2VnbWVudF9uYW1lWzhdOwkvKiBOYW1lIG9mIHNoYXJlZCBzZWdtZW50ICovCisJX191OCByZXNlcnZlZDJbNF07CisJX191OCBzZWdtZW50X25hbWVbOF07CS8qIE5hbWUgb2Ygc2hhcmVkIHNlZ21lbnQgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZW5kaWYgLyogX0FTTV9TMzkwX1ZUT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC96OTBjcnlwdC5oIGIvaW5jbHVkZS9hc20tczM5MC96OTBjcnlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTI0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3o5MGNyeXB0LmgKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC96OTBjcnlwdC5oCisgKgorICogIHo5MGNyeXB0IDEuMy4zICh1c2VyLXZpc2libGUgaGVhZGVyKQorICoKKyAqICBDb3B5cmlnaHQgKEMpICAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcihzKTogUm9iZXJ0IEJ1cnJvdWdocworICogICAgICAgICAgICAgRXJpYyBSb3NzbWFuIChlZHJvc3NtYUB1cy5pYm0uY29tKQorICoKKyAqICBIb3RwbHVnICYgbWlzYyBkZXZpY2Ugc3VwcG9ydDogSm9jaGVuIFJvZWhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fUzM5MF9aOTBDUllQVF9ICisjZGVmaW5lIF9fQVNNX1MzOTBfWjkwQ1JZUFRfSAorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgejkwY3J5cHRfVkVSU0lPTiAxCisjZGVmaW5lIHo5MGNyeXB0X1JFTEVBU0UgMwkvLyAyID0gUENJWENDLCAzID0gcmV3cml0ZSBmb3IgY29kaW5nIHN0YW5kYXJkcworI2RlZmluZSB6OTBjcnlwdF9WQVJJQU5UIDMJLy8gMyA9IENFWDJBIHN1cHBvcnQKKworLyoqCisgKiBzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvCisgKgorICogUmVxdWlyZW1lbnRzOgorICogLSBvdXRwdXRkYXRhbGVuZ3RoIGlzIGF0IGxlYXN0IGFzIGxhcmdlIGFzIGlucHV0ZGF0YWxlbmd0aC4KKyAqIC0gQWxsIGtleSBwYXJ0cyBhcmUgcmlnaHQganVzdGlmaWVkIGluIHRoZWlyIGZpZWxkcywgcGFkZGVkIG9uCisgKiAgIHRoZSBsZWZ0IHdpdGggemVyb2VzLgorICogLSBsZW5ndGgoYl9rZXkpID0gaW5wdXRkYXRhbGVuZ3RoCisgKiAtIGxlbmd0aChuX21vZHVsdXMpID0gaW5wdXRkYXRhbGVuZ3RoCisgKi8KK3N0cnVjdCBpY2FfcnNhX21vZGV4cG8geworCWNoYXIgX191c2VyICoJaW5wdXRkYXRhOworCXVuc2lnbmVkIGludAlpbnB1dGRhdGFsZW5ndGg7CisJY2hhciBfX3VzZXIgKglvdXRwdXRkYXRhOworCXVuc2lnbmVkIGludAlvdXRwdXRkYXRhbGVuZ3RoOworCWNoYXIgX191c2VyICoJYl9rZXk7CisJY2hhciBfX3VzZXIgKgluX21vZHVsdXM7Cit9OworCisvKioKKyAqIHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0CisgKgorICogUmVxdWlyZW1lbnRzOgorICogLSBpbnB1dGRhdGFsZW5ndGggaXMgZXZlbi4KKyAqIC0gb3V0cHV0ZGF0YWxlbmd0aCBpcyBhdCBsZWFzdCBhcyBsYXJnZSBhcyBpbnB1dGRhdGFsZW5ndGguCisgKiAtIEFsbCBrZXkgcGFydHMgYXJlIHJpZ2h0IGp1c3RpZmllZCBpbiB0aGVpciBmaWVsZHMsIHBhZGRlZCBvbgorICogICB0aGUgbGVmdCB3aXRoIHplcm9lcy4KKyAqIC0gbGVuZ3RoKGJwX2tleSkJPSBpbnB1dGRhdGFsZW5ndGgvMiArIDgKKyAqIC0gbGVuZ3RoKGJxX2tleSkJPSBpbnB1dGRhdGFsZW5ndGgvMgorICogLSBsZW5ndGgobnBfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yICsgOAorICogLSBsZW5ndGgobnFfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yCisgKiAtIGxlbmd0aCh1X211bHRfaW52KSA9IGlucHV0ZGF0YWxlbmd0aC8yICsgOAorICovCitzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCB7CisJY2hhciBfX3VzZXIgKglpbnB1dGRhdGE7CisJdW5zaWduZWQgaW50CWlucHV0ZGF0YWxlbmd0aDsKKwljaGFyIF9fdXNlciAqCW91dHB1dGRhdGE7CisJdW5zaWduZWQgaW50CW91dHB1dGRhdGFsZW5ndGg7CisJY2hhciBfX3VzZXIgKglicF9rZXk7CisJY2hhciBfX3VzZXIgKglicV9rZXk7CisJY2hhciBfX3VzZXIgKglucF9wcmltZTsKKwljaGFyIF9fdXNlciAqCW5xX3ByaW1lOworCWNoYXIgX191c2VyICoJdV9tdWx0X2ludjsKK307CisKKyNkZWZpbmUgWjkwX0lPQ1RMX01BR0lDICd6JyAgLy8gTk9URTogIE5lZWQgdG8gYWxsb2NhdGUgZnJvbSBsaW51eCBmb2xrcworCisvKioKKyAqIEludGVyZmFjZSBub3RlczoKKyAqCisgKiBUaGUgaW9jdGwoKXMgd2hpY2ggYXJlIGltcGxlbWVudGVkIChhbG9uZyB3aXRoIHJlbGV2YW50IGRldGFpbHMpCisgKiBhcmU6CisgKgorICogICBJQ0FSU0FNT0RFWFBPCisgKiAgICAgUGVyZm9ybSBhbiBSU0Egb3BlcmF0aW9uIHVzaW5nIGEgTW9kdWx1cy1FeHBvbmVudCBwYWlyCisgKiAgICAgVGhpcyB0YWtlcyBhbiBpY2FfcnNhX21vZGV4cG8gc3RydWN0IGFzIGl0cyBhcmcuCisgKgorICogICAgIE5PVEU6IHBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgc3RydWN0dXJlCisgKiAgICAgICAgICAgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgY29udGVudHMgb2YgdGhlCisgKiAgICAgICAgICAgYmxvY2sKKyAqCisgKiAgIElDQVJTQUNSVAorICogICAgIFBlcmZvcm0gYW4gUlNBIG9wZXJhdGlvbiB1c2luZyBhIENoaW5lc2UtUmVtYWluZGVyIFRoZW9yZW0ga2V5CisgKiAgICAgVGhpcyB0YWtlcyBhbiBpY2FfcnNhX21vZGV4cG9fY3J0IHN0cnVjdCBhcyBpdHMgYXJnLgorICoKKyAqICAgICBOT1RFOiBwbGVhc2UgcmVmZXIgdG8gdGhlIGNvbW1lbnRzIHByZWNlZGluZyB0aGlzIHN0cnVjdHVyZQorICogICAgICAgICAgIGZvciB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGNvbnRlbnRzIG9mIHRoZQorICogICAgICAgICAgIGJsb2NrCisgKgorICogICBaOTBTVEFUX1RPVEFMQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgZGV2aWNlIHR5cGVzIHRvZ2V0aGVyLgorICoKKyAqICAgWjkwU1RBVF9QQ0lDQUNPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIFBDSUNBcy4KKyAqCisgKiAgIFo5MFNUQVRfUENJQ0NDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBQQ0lDQ3MuCisgKgorICogICBaOTBTVEFUX1BDSVhDQ01DTDJDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBNQ0wyIFBDSVhDQ3MuCisgKgorICogICBaOTBTVEFUX1BDSVhDQ01DTDNDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBNQ0wzIFBDSVhDQ3MuCisgKgorICogICBaOTBTVEFUX0NFWDJDQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgQ0VYMkNzLgorICoKKyAqICAgWjkwU1RBVF9DRVgyQUNPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIENFWDJBcy4KKyAqCisgKiAgIFo5MFNUQVRfUkVRVUVTVFFfQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd2FpdGluZyB0byBiZQorICogICAgIHNlbnQgdG8gYSBkZXZpY2UuCisgKgorICogICBaOTBTVEFUX1BFTkRJTkdRX0NPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNlbnQgdG8gYQorICogICAgIGRldmljZSBhd2FpdGluZyB0aGUgcmVwbHkuCisgKgorICogICBaOTBTVEFUX1RPVEFMT1BFTl9DT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIHRoZSBudW1iZXIgb2Ygb3BlbiBmaWxlIGhhbmRsZXMuCisgKgorICogICBaOTBTVEFUX0RPTUFJTl9JTkRFWAorICogICAgIFJldHVybiB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGUgQ3J5cHRvZ3JhcGhpYyBEb21haW4uCisgKgorICogICBaOTBTVEFUX1NUQVRVU19NQVNLCisgKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgY2hhcnMgZm9yIHRoZSBzdGF0dXMgb2YKKyAqICAgICBhbGwgZGV2aWNlcy4KKyAqICAgICAgIDB4MDE6IFBDSUNBCisgKiAgICAgICAweDAyOiBQQ0lDQworICogICAgICAgMHgwMzogUENJWENDX01DTDIKKyAqICAgICAgIDB4MDQ6IFBDSVhDQ19NQ0wzCisgKiAgICAgICAweDA1OiBDRVgyQworICogICAgICAgMHgwNjogQ0VYMkEKKyAqICAgICAgIDB4MGQ6IGRldmljZSBpcyBkaXNhYmxlZCB2aWEgdGhlIHByb2MgZmlsZXN5c3RlbQorICoKKyAqICAgWjkwU1RBVF9RREVQVEhfTUFTSworICogICAgIFJldHVybiBhbiA2NCBlbGVtZW50IGFycmF5IG9mIHVuc2lnbmVkIGNoYXJzIGZvciB0aGUgcXVldWUKKyAqICAgICBkZXB0aCBvZiBhbGwgZGV2aWNlcy4KKyAqCisgKiAgIFo5MFNUQVRfUEVSREVWX1JFUUNOVAorICogICAgIFJldHVybiBhbiA2NCBlbGVtZW50IGFycmF5IG9mIHVuc2lnbmVkIGludGVnZXJzIGZvciB0aGUgbnVtYmVyCisgKiAgICAgb2Ygc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCByZXF1ZXN0cyBwZXIgZGV2aWNlIHNpbmNlIHRoZSBkZXZpY2UKKyAqICAgICB3YXMgZGV0ZWN0ZWQgYW5kIG1hZGUgYXZhaWxhYmxlLgorICoKKyAqICAgSUNBWjkwU1RBVFVTIChkZXByZWNhdGVkKQorICogICAgIFJldHVybiBzb21lIGRldmljZSBkcml2ZXIgc3RhdHVzIGluIGEgaWNhX3o5MF9zdGF0dXMgc3RydWN0CisgKiAgICAgVGhpcyB0YWtlcyBhbiBpY2FfejkwX3N0YXR1cyBzdHJ1Y3QgYXMgaXRzIGFyZy4KKyAqCisgKiAgICAgTk9URTogdGhpcyBpb2N0bCgpIGlzIGRlcHJlY2F0ZWQsIGFuZCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoCisgKiAgICAgICAgICAgc2luZ2xlIGlvY3RsKClzIGZvciBlYWNoIHR5cGUgb2Ygc3RhdHVzIGJlaW5nIHJlcXVlc3RlZAorICoKKyAqICAgWjkwU1RBVF9QQ0lYQ0NDT1VOVCAoZGVwcmVjYXRlZCkKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJWENDcyAoTUNMMiArIE1DTDMpLgorICogICAgIFRoaXMgaXMgREVQUkVDQVRFRCBub3cgdGhhdCBNQ0wzIFBDSVhDQ3MgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkgZnJvbQorICogICAgIE1DTDIgUENJWENDcy4KKyAqCisgKiAgIFo5MFFVSUVTQ0UgKG5vdCByZWNvbW1lbmRlZCkKKyAqICAgICBRdWllc2NlIHRoZSBkcml2ZXIuICBUaGlzIGlzIGludGVuZGVkIHRvIHN0b3AgYWxsIG5ldworICogICAgIHJlcXVlc3RzIGZyb20gYmVpbmcgcHJvY2Vzc2VkLiAgSXRzIHVzZSBpcyBOT1QgcmVjb21tZW5kZWQsCisgKiAgICAgZXhjZXB0IGluIGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhlcmUgaXMgbm8gb3RoZXIgd2F5IHRvIHN0b3AKKyAqICAgICBjYWxsZXJzIGZyb20gYWNjZXNzaW5nIHRoZSBkcml2ZXIuICBJdHMgb3JpZ2luYWwgdXNlIHdhcyB0bworICogICAgIGFsbG93IHRoZSBkcml2ZXIgdG8gYmUgImRyYWluZWQiIG9mIHdvcmsgaW4gcHJlcGFyYXRpb24gZm9yCisgKiAgICAgYSBzeXN0ZW0gc2h1dGRvd24uCisgKgorICogICAgIE5PVEU6IG9uY2UgaXNzdWVkLCB0aGlzIGJhbiBvbiBuZXcgd29yayBjYW5ub3QgYmUgdW5kb25lCisgKiAgICAgICAgICAgZXhjZXB0IGJ5IHVubG9hZGluZyBhbmQgcmVsb2FkaW5nIHRoZSBkcml2ZXIuCisgKi8KKworLyoqCisgKiBTdXBwb3J0ZWQgaW9jdGwgY2FsbHMKKyAqLworI2RlZmluZSBJQ0FSU0FNT0RFWFBPCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsIFo5MF9JT0NUTF9NQUdJQywgMHgwNSwgMCkKKyNkZWZpbmUgSUNBUlNBQ1JUCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsIFo5MF9JT0NUTF9NQUdJQywgMHgwNiwgMCkKKworLyogREVQUkVDQVRFRCBzdGF0dXMgY2FsbHMgKGJvdW5kIGZvciByZW1vdmFsIGF0IHNvbWUgcG9pbnQpICovCisjZGVmaW5lIElDQVo5MFNUQVRVUwlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHgxMCwgc3RydWN0IGljYV96OTBfc3RhdHVzKQorI2RlZmluZSBaOTBTVEFUX1BDSVhDQ0NPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQzLCBpbnQpCisKKy8qIHVucmVsYXRlZCB0byBJQ0EgY2FsbGVycyAqLworI2RlZmluZSBaOTBRVUlFU0NFCV9JTyhaOTBfSU9DVExfTUFHSUMsIDB4MTEpCisKKy8qIE5ldyBzdGF0dXMgY2FsbHMgKi8KKyNkZWZpbmUgWjkwU1RBVF9UT1RBTENPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQwLCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfUENJQ0FDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0MSwgaW50KQorI2RlZmluZSBaOTBTVEFUX1BDSUNDQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDIsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9QQ0lYQ0NNQ0wyQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGIsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9QQ0lYQ0NNQ0wzQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGMsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9DRVgyQ0NPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDRkLCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfQ0VYMkFDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0ZSwgaW50KQorI2RlZmluZSBaOTBTVEFUX1JFUVVFU1RRX0NPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQ0LCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfUEVORElOR1FfQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDUsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9UT1RBTE9QRU5fQ09VTlQgX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDYsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9ET01BSU5fSU5ERVgJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDcsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9TVEFUVVNfTUFTSwlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0OCwgY2hhcls2NF0pCisjZGVmaW5lIFo5MFNUQVRfUURFUFRIX01BU0sJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDksIGNoYXJbNjRdKQorI2RlZmluZSBaOTBTVEFUX1BFUkRFVl9SRVFDTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGEsIGludFs2NF0pCisKKyNlbmRpZiAvKiBfX0FTTV9TMzkwX1o5MENSWVBUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2J1Zy5oIGIvaW5jbHVkZS9hc20tc2gvYnVnLmgKaW5kZXggNzA1MDhhMy4uMWI0ZmM1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvYnVnLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1NIX0JVR19ICiAjZGVmaW5lIF9fQVNNX1NIX0JVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19CVUcKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaAppbmRleCA1ZWJkMGYyLi5mYTAzYjMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NoZWNrc3VtLmgKQEAgLTksNyArOSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgS2F6IEtvamltYSAmIE5paWJlIFl1dGFrYQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1zaC9kbWEtbWFwcGluZy5oCmluZGV4IDQ4ZjFmNDIuLjEyNDk2OGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU0hfRE1BX01BUFBJTkdfSAogI2RlZmluZSBfX0FTTV9TSF9ETUFfTUFQUElOR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9kbWEuaCBiL2luY2x1ZGUvYXNtLXNoL2RtYS5oCmluZGV4IGExMThhMGQ0Li5lNjJhNmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9kbWEuaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZSBfX0FTTV9TSF9ETUFfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZml4bWFwLmggYi9pbmNsdWRlL2FzbS1zaC9maXhtYXAuaAppbmRleCA1MDkyMjRiLi40MTJiY2NhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9maXhtYXAuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9maXhtYXAuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfQVNNX0ZJWE1BUF9ICiAjZGVmaW5lIF9BU01fRklYTUFQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXNoL2hhcmRpcnEuaAppbmRleCBmMmZkZjBmLi43MTVlZTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaGFyZGlycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TSF9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fU0hfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjEvaGQ2NDQ2MS5oIGIvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2MS9oZDY0NDYxLmgKaW5kZXggYzQ1N2NhMi4uODdmMTNkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2MS9oZDY0NDYxLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2MS9oZDY0NDYxLmgKQEAgLTUsNyArNSw2IEBACiAgKglDb3B5cmlnaHQgKEMpIDIwMDAgWUFFR0FTSEkgVGFrZXNoaQogICoJSGl0YWNoaSBIRDY0NDYxIGNvbXBhbmlvbiBjaGlwIHN1cHBvcnQKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBDb25zdGFudHMgZm9yIFBDTUNJQSBtYXBwaW5ncyAqLwogI2RlZmluZSBIRDY0NDYxX1BDQ19XSU5ET1cJMHgwMTAwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2NS9oZDY0NDY1LmggYi9pbmNsdWRlL2FzbS1zaC9oZDY0NDY1L2hkNjQ0NjUuaAppbmRleCBjNjcyMDMyLi5jZmQwZTgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9oZDY0NDY1L2hkNjQ0NjUuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9oZDY0NDY1L2hkNjQ0NjUuaApAQCAtMTEsNyArMTEsNiBAQAogICogRGVyaXZlZCBmcm9tIDxhc20vaGQ2NDQ2MS5oPiB3aGljaCBib3JlIHRoZSBtZXNzYWdlOgogICogQ29weXJpZ2h0IChDKSAyMDAwIFlBRUdBU0hJIFRha2VzaGkKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaWRlLmggYi9pbmNsdWRlL2FzbS1zaC9pZGUuaAppbmRleCA3MTFkYWQ0Li45ZjhlOTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9pZGUuaApAQCAtMTQsNyArMTQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pby5oIGIvaW5jbHVkZS9hc20tc2gvaW8uaAppbmRleCAyYzNhZmU3Li44OTRlNjRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2lvLmgKQEAgLTIzLDcgKzIzLDYgQEAKICAqICBpbmIgICBieSBkZWZhdWx0IGV4cGFuZHMgdG8gX2luYiwgYnV0IHRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5CiAgKiAgICAgICAgZGVmaW5lIGl0IHRvIF9faW5iIGlmIGl0IGNob29zZXMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaXJxLmggYi9pbmNsdWRlL2FzbS1zaC9pcnEuaAppbmRleCA0MmI4Mzk0Li42MTFlNjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9pcnEuaApAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CQkvKiBmb3IgcHRfcmVncyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9rZXlib2FyZC5oIGIvaW5jbHVkZS9hc20tc2gva2V5Ym9hcmQuaAppbmRleCAxMTAzZGYwLi4zMWRjYzRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9rZXlib2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2tleWJvYXJkLmgKQEAgLTUsNyArNSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tkLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KIAogI2lmZGVmIENPTkZJR19TSF9NUEMxMjExCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zaC9rbWFwX3R5cGVzLmgKaW5kZXggMjQ5MmJhMC4uODRkNTY1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gva21hcF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2ttYXBfdHlwZXMuaApAQCAtMyw3ICszLDYgQEAKIAogLyogRHVtbXkgaGVhZGVyIGp1c3QgdG8gZGVmaW5lIGttX3R5cGUuICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAjIGRlZmluZSBEKG4pIF9fS01fRkVOQ0VfIyNuICwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWMuaCBiL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWMuaAppbmRleCA1NTBjNTBhLi41NTA1MDFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9tYWNodmVjLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvbWFjaHZlYy5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fU0hfTUFDSFZFQ19ICiAjZGVmaW5lIF9BU01fU0hfTUFDSFZFQ19IIDEKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tYWNodmVjX2luaXQuaCBiL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWNfaW5pdC5oCmluZGV4IDllN2RlODAuLmUzOTc3OTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWNfaW5pdC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWNfaW5pdC5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9fU0hfTUFDSFZFQ19JTklUX0gKICNkZWZpbmUgX19TSF9NQUNIVkVDX0lOSVRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBJbiBhIEdFTkVSSUMga2VybmVsLCB3ZSBoYXZlIGxvdHMgb2YgdGhlc2UgdmVjdG9ycyBmbG9hdGluZyBhYm91dCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvZG1hLmggYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL2RtYS5oCmluZGV4IDBhMmZkYWIuLmU1MDZkMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvbXBjMTIxMS9kbWEuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX0FTTV9NUEMxMjExX0RNQV9ICiAjZGVmaW5lIF9BU01fTVBDMTIxMV9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JLyogQW5kIHNwaW5sb2NrcyAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9vdmVyZHJpdmUuaCBiL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9vdmVyZHJpdmUuaAppbmRleCBhYTYyYWU2Li5mYzc0NmMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvb3ZlcmRyaXZlLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvb3ZlcmRyaXZlL292ZXJkcml2ZS5oCkBAIC02LDcgKzYsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19PVkVSRFJJVkVfSF9fCiAjZGVmaW5lIF9fT1ZFUkRSSVZFX0hfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGFnZS5oIGIvaW5jbHVkZS9hc20tc2gvcGFnZS5oCmluZGV4IDljODkyODcuLmE1NTU5ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wYWdlLmgKQEAgLTEzLDcgKzEzLDYgQEAKICAgIFsgUDQgY29udHJvbCAgIF0JCTB4RTAwMDAwMDAKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjZGVmaW5lIFBBR0VfU0hJRlQJMTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaAppbmRleCBiYjBlZmIzLi5kY2QyM2EwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0IFBhdWwgTXVuZHQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUtMmxldmVsLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXNoL3NlcmlhbC5oCmluZGV4IGY1MWUyMzIuLjg3MzQ1OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlcmlhbC5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfQVNNX1NFUklBTF9ICiAjZGVmaW5lIF9BU01fU0VSSUFMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaWZkZWYgQ09ORklHX1NIX0VDMzEwNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc21wLmggYi9pbmNsdWRlL2FzbS1zaC9zbXAuaAppbmRleCBmMTlhOGIzLi5mNTdjNGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zbXAuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfX0FTTV9TSF9TTVBfSAogI2RlZmluZSBfX0FTTV9TSF9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXNoL3N5c3RlbS5oCmluZGV4IGJiMDMzMDQuLmI3NTJlNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3N5c3RlbS5oCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyIFBhdWwgTXVuZHQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKglzd2l0Y2hfdG8oKSBzaG91bGQgc3dpdGNoIHRhc2tzIHRvIHRhc2sgbnIgbiwgZmlyc3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zaC90eXBlcy5oCmluZGV4IDQ4ODU1MmYuLjNjMDlkZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvdHlwZXMuaApAQCAtMzUsNyArMzUsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHR5cGVkZWYgX19zaWduZWRfXyBjaGFyIHM4OwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaAppbmRleCAwNTUyMGNlLi43NmI1NDMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaApAQCAtMzA0LDYgKzMwNCw4IEBACiAKICNkZWZpbmUgTlJfc3lzY2FsbHMgMjkzCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIC8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTI0OiBzZWUgPGFzbS1zaC9lcnJuby5oPiAqLwogCiAjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKSBcCkBAIC00MjAsNyArNDIyLDYgQEAKIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3NjMCk7IFwKIH0KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKQEAgLTQ0Myw3ICs0NDQsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTUxMyw3ICs1MTMsNyBAQAogCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtNTI1LDQgKzUyNSw1IEBACiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKICNlbmRpZgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC93YXRjaGRvZy5oIGIvaW5jbHVkZS9hc20tc2gvd2F0Y2hkb2cuaAppbmRleCBmMGNmNGJlLi4wOWNhNDE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC93YXRjaGRvZy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3dhdGNoZG9nLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jcHUvd2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9idWcuaCBiL2luY2x1ZGUvYXNtLXNoNjQvYnVnLmgKaW5kZXggNWQ2NTllYy4uODFmNzIyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2J1Zy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TSDY0X0JVR19ICiAjZGVmaW5lIF9fQVNNX1NINjRfQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGVsbCB0aGUgdXNlciB0aGVyZSBpcyBzb21lIHByb2JsZW0sIHRoZW4gZm9yY2UgYSBzZWdmYXVsdCAoaW4gcHJvY2VzcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tc2g2NC9kbWEtbWFwcGluZy5oCmluZGV4IGNjOWEyZTguLmE3NGE0OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2RtYS1tYXBwaW5nLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1NIX0RNQV9NQVBQSU5HX0gKICNkZWZpbmUgX19BU01fU0hfRE1BX01BUFBJTkdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tc2g2NC9oYXJkaXJxLmgKaW5kZXggYWQyMzMwZS4uNTU1ZmQ3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1NINjRfSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX1NINjRfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvaWRlLmggYi9pbmNsdWRlL2FzbS1zaDY0L2lkZS5oCmluZGV4IDg1MmY1MGEuLmM5ZDg0ZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9pZGUuaApAQCAtMTUsNyArMTUsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFdpdGhvdXQgdGhpcywgdGhlIGluaXRpYWxpc2F0aW9uIG9mIFBDSSBJREUgY2FyZHMgZW5kIHVwIGNhbGxpbmcKICAqIGlkZV9pbml0X2h3aWZfcG9ydHMsIHdoaWNoIHdvbid0IHdvcmsuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2lycS5oIGIvaW5jbHVkZS9hc20tc2g2NC9pcnEuaAppbmRleCBmODE1YjQzLi4xY2E0OWUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvaXJxLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogRW5jb2RlZCBJUlFzIGFyZSBub3QgY29uc2lkZXJlZCB3b3J0aCB0byBiZSBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1zaDY0L21tdV9jb250ZXh0LmgKaW5kZXggOTkxY2ZkYS4uOGM4NjBkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvbW11X2NvbnRleHQuaApAQCAtMjYsNyArMjYsNiBAQAogICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtbXVfY29udGV4dF9jYWNoZTsKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zaDY0L3BhZ2UuaAppbmRleCBlNDkzN2NkLi4zNGZiMzQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3BhZ2UuaApAQCAtMTcsNyArMTcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjZGVmaW5lIFBBR0VfU0hJRlQJMTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXNoNjQvcGFyYW0uaAppbmRleCBkMThjYzg3Li5mNDA5YWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L3BhcmFtLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9wYXJhbS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9fQVNNX1NINjRfUEFSQU1fSAogI2RlZmluZSBfX0FTTV9TSDY0X1BBUkFNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogIyBpZmRlZiBDT05GSUdfU0hfV0RUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oCmluZGV4IDU3YWY2YjMuLjU0Yzc4MjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zaDY0L3N5c3RlbS5oCmluZGV4IDMwMDJlOTg4Li43NjA2ZjZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc3lzdGVtLmgKQEAgLTE0LDcgKzE0LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zaDY0L3VuaXN0ZC5oCmluZGV4IDFmOGYzOTQuLjlhMTU5MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaApAQCAtMzQ0LDYgKzM0NCw4IEBACiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJMzE5CiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkzMjAKIAorI2lmZGVmIF9fS0VSTkVMX18gCisKICNkZWZpbmUgTlJfc3lzY2FsbHMgMzIxCiAKIC8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTI1OiBzZWUgPGFzbS1zaDY0L2Vycm5vLmg+ICovCkBAIC00ODYsNyArNDg4LDYgQEAKIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3NjMCk7IAkJCQkJCSAgICBcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCkBAIC01MDksNyArNTEwLDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXwogCkBAIC01NTAsNyArNTUwLDcgQEAKIHsKIAlyZXR1cm4gd2FpdHBpZCgtMSx3YWl0X3N0YXQsMCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC01NjIsNCArNTYyLDUgQEAKICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogI2VuZGlmCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fU0g2NF9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYXNtbWFjcm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2FzbW1hY3JvLmgKaW5kZXggMGQ0YjY1Yi4uYTYxOWE0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvYXNtbWFjcm8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9hc21tYWNyby5oCkBAIC02LDcgKzYsNiBAQAogI2lmbmRlZiBfU1BBUkNfQVNNTUFDUk9fSAogI2RlZmluZSBfU1BBUkNfQVNNTUFDUk9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KICNpbmNsdWRlIDxhc20vYXNpLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYXRvbWljLmgKaW5kZXggZTEwMzMxNy4uNzMxZmE1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYXRvbWljLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX19BUkNIX1NQQVJDX0FUT01JQ19fCiAjZGVmaW5lIF9fQVJDSF9TUEFSQ19BVE9NSUNfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2J1Z3MuaAppbmRleCBlNjUyZjg5Li5hMGY5MzliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9idWdzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYnVncy5oCkBAIC01LDcgKzUsNiBAQAogICovCiAKICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlZmx1c2guaAppbmRleCA0OTAxMjE3Li5mYzYzMmY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGVmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfU1BBUkNfQ0FDSEVGTFVTSF9ICiAjZGVmaW5lIF9TUEFSQ19DQUNIRUZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBDb21tb24gZm9yIG90aGVyIGluY2x1ZGVzICovCiAvLyAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+IGZyb20gcGdhbGxvYy5oCiAvLyAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4gIGZyb20gcGdhbGxvYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9kZWxheS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZGVsYXkuaAppbmRleCA3ZWM4ZTlmLi40OGFhNzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9kZWxheS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2RlbGF5LmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9fU1BBUkNfREVMQVlfSAogI2RlZmluZSBfX1NQQVJDX0RFTEFZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLW1hcHBpbmcuaAppbmRleCBkN2MzYjBmLi42ZGI4M2RjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS1tYXBwaW5nLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fU1BBUkNfRE1BX01BUFBJTkdfSAogI2RlZmluZSBfQVNNX1NQQVJDX0RNQV9NQVBQSU5HX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BDSQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9kbWEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS5oCmluZGV4IDhlYzIwNmEuLjQwN2IzNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfQVNNX1NQQVJDX0RNQV9ICiAjZGVmaW5lIF9BU01fU1BBUkNfRE1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2VsZi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZWxmLmgKaW5kZXggNGE3MWQ3Yy4uODNhM2RkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZWxmLmgKQEAgLTYsNyArNiw2IEBACiAgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2ZpeG1hcC5oCmluZGV4IDlkZTUyYjQuLmYxOGZjMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2ZpeG1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2ZpeG1hcC5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9BU01fRklYTUFQX0gKICNkZWZpbmUgX0FTTV9GSVhNQVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpZmRlZiBDT05GSUdfSElHSE1FTQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaGFyZGlycS5oCmluZGV4IDJhNjY4YzQuLjRmNjNlZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9oYXJkaXJxLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9fU1BBUkNfSEFSRElSUV9ICiAjZGVmaW5lIF9fU1BBUkNfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaWRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pZGUuaAppbmRleCA2NGQ4MTAzLi5hNmQ3MzVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pZGUuaApAQCAtMTEsNyArMTEsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHNyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2lycS5oCmluZGV4IGNlZTM1NmIuLmRiYzY4NzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2lycS5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfU1BBUkNfSVJRX0gKICNkZWZpbmUgX1NQQVJDX0lSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPiAgICAgLyogRm9yIE5SX0NQVVMgKi8KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL21vc3Rlay5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrLmgKaW5kZXggNTliODZiYy4uYmQ5MmE3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9TUEFSQ19NT1NURUtfSAogI2RlZmluZSBfU1BBUkNfTU9TVEVLX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGFnZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGFnZS5oCmluZGV4IGVjMzI3NGIuLjViYWI4YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wYWdlLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9TUEFSQ19QQUdFX0gKICNkZWZpbmUgX1NQQVJDX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaWZkZWYgQ09ORklHX1NVTjQKICNkZWZpbmUgUEFHRV9TSElGVCAgIDEzCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGdhbGxvYy5oCmluZGV4IDEyNjgwMGEuLmE0NDljZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ2FsbG9jLmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9TUEFSQ19QR0FMTE9DX0gKICNkZWZpbmUgX1NQQVJDX1BHQUxMT0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGd0YWJsZS5oCmluZGV4IDllZWE4ZjQuLjIyNmM2NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RhYmxlLmgKQEAgLTExLDcgKzExLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zZnAtbWFjaGluZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2ZwLW1hY2hpbmUuaAppbmRleCBiNGNhMmQ5Li5lY2ZjODZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zZnAtbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NmcC1tYWNoaW5lLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpZm5kZWYgX1NGUF9NQUNISU5FX0gKICNkZWZpbmUgX1NGUF9NQUNISU5FX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogICAgCiAjZGVmaW5lIF9GUF9XX1RZUEVfU0laRQkJMzIKICNkZWZpbmUgX0ZQX1dfVFlQRQkJdW5zaWduZWQgbG9uZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc21wLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zbXAuaAppbmRleCA5OGM0NmUzLi41YTFiN2U0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zbXAuaApAQCAtNiw3ICs2LDYgQEAKICNpZm5kZWYgX1NQQVJDX1NNUF9ICiAjZGVmaW5lIF9TUEFSQ19TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9oZWFkLmg+CiAjaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3lzdGVtLmgKaW5kZXggNThkZDE2Mi4uY2I3ZGRhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3lzdGVtLmgKQEAgLTEsMTAgKzEsOCBAQAogLyogJElkOiBzeXN0ZW0uaCx2IDEuODYgMjAwMS8xMC8zMCAwNDo1NzoxMCBkYXZlbSBFeHAgJCAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fU1BBUkNfU1lTVEVNX0gKICNkZWZpbmUgX19TUEFSQ19TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgkvKiBOUl9DUFVTICovCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWVyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90aW1lci5oCmluZGV4IGIxNmViNzMuLmNiMWZhMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdGltZXIuaApAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9TUEFSQ19USU1FUl9ICiAjZGVmaW5lIF9TUEFSQ19USU1FUl9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdGxiZmx1c2guaAppbmRleCA1NjQzY2EzLi40YTNiNjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9TUEFSQ19UTEJGTFVTSF9ICiAjZGVmaW5lIF9TUEFSQ19UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogLy8gI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGQuaAppbmRleCA0NWE1NzY1Li4yNTUzNzYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGQuaApAQCAtMzE5LDYgKzMxOSw3IEBACiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwMAogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMDEKIAorI2lmZGVmIF9fS0VSTkVMX18KIC8qIFdBUk5JTkc6IFlvdSBNQVkgTk9UIGFkZCBzeXNjYWxsIG51bWJlcnMgbGFyZ2VyIHRoYW4gMzAxLCBzaW5jZQogICogICAgICAgICAgYWxsIG9mIHRoZSBzeXNjYWxsIHRhYmxlcyBpbiB0aGUgU3BhcmMga2VybmVsIGFyZQogICogICAgICAgICAgc2l6ZWQgdG8gaGF2ZSAzMDEgZW50cmllcyAoc3RhcnRpbmcgYXQgemVybykuICBUaGVyZWZvcmUKQEAgLTQ1NSw3ICs0NTYsNiBAQAogcmV0dXJuIC0xOyBcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NApAQCAtNDc3LDcgKzQ3Nyw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTUzNCw0ICs1MzMsNSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfU1BBUkNfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3ZhYy1vcHMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3ZhYy1vcHMuaAppbmRleCA5ZTAxNzIzLi5hYjZmNTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy92YWMtb3BzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdmFjLW9wcy5oCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk0LCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zeXNlbi5oPgogI2luY2x1ZGUgPGFzbS9jb250cmVncy5oPgogI2luY2x1ZGUgPGFzbS9hc2kuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3dpbm1hY3JvLmggYi9pbmNsdWRlL2FzbS1zcGFyYy93aW5tYWNyby5oCmluZGV4IDU1NzI1N2UuLjA5NmYzZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3dpbm1hY3JvLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvd2lubWFjcm8uaApAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgX1NQQVJDX1dJTk1BQ1JPX0gKICNkZWZpbmUgX1NQQVJDX1dJTk1BQ1JPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogLyogU3RvcmUgdGhlIHJlZ2lzdGVyIHdpbmRvdyBvbnRvIHRoZSA4LWJ5dGUgYWxpZ25lZCBhcmVhIHN0YXJ0aW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hdG9taWMuaAppbmRleCA0NjhlYjQ4Li4yZjBiZWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXRvbWljLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9fQVJDSF9TUEFSQzY0X0FUT01JQ19fCiAjZGVmaW5lIF9fQVJDSF9TUEFSQzY0X0FUT01JQ19fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiB0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pY190OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYml0b3BzLmgKaW5kZXggNzE5NDRiMC4uM2Q1ZTFhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JpdG9wcy5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfU1BBUkM2NF9CSVRPUFNfSAogI2RlZmluZSBfU1BBUkM2NF9CSVRPUFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYnVncy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9idWdzLmgKaW5kZXggMzYwZGQwNC4uMTIwNDIyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9idWdzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9idWdzLmgKQEAgLTQsNyArNCw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NhY2hlZmx1c2guaAppbmRleCBiM2Y2MTY1Li43NDVkMWFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NhY2hlZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1NQQVJDNjRfQ0FDSEVGTFVTSF9ICiAjZGVmaW5lIF9TUEFSQzY0X0NBQ0hFRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGVsYXkuaAppbmRleCAyOTAxZWEwLi5hNGFhZTZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2RlbGF5LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kZWxheS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9fU1BBUkM2NF9ERUxBWV9ICiAjZGVmaW5lIF9fU1BBUkM2NF9ERUxBWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgogI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLW1hcHBpbmcuaAppbmRleCBhOGQzOWYyLi4zYzJiNWJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1NQQVJDNjRfRE1BX01BUFBJTkdfSAogI2RlZmluZSBfQVNNX1NQQVJDNjRfRE1BX01BUFBJTkdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUENJCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS5oCmluZGV4IDFhYWIzYzguLjI3ZjY1OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEuaApAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgX0FTTV9TUEFSQzY0X0RNQV9ICiAjZGVmaW5lIF9BU01fU1BBUkM2NF9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmxvcHB5LmgKaW5kZXggNmE5NWQ1ZC4uMDdjY2Q2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9mbG9wcHkuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Zsb3BweS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX1NQQVJDNjRfRkxPUFBZX0gKICNkZWZpbmUgX19BU01fU1BBUkM2NF9GTE9QUFlfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkZS5oCmluZGV4IGMzOTNmODEuLjU1MTQ5Y2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaApAQCAtMTAsNyArMTAsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycS5oCmluZGV4IGRlMzNkNmUuLmZhMTY0ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pcnEuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX1NQQVJDNjRfSVJRX0gKICNkZWZpbmUgX1NQQVJDNjRfSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaAppbmRleCBlNGVmZTY1Li5lOWJiMjZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1NQQVJDNjRfS1BST0JFU19ICiAjZGVmaW5lIF9TUEFSQzY0X0tQUk9CRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tYzE0NjgxOHJ0Yy5oCmluZGV4IDc1YmQ1NzIuLmU5YzBmY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbWMxNDY4MThydGMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21jMTQ2ODE4cnRjLmgKQEAgLTQsNyArNCw2IEBACiAjaWZuZGVmIF9fQVNNX1NQQVJDNjRfTUMxNDY4MThSVENfSAogI2RlZmluZSBfX0FTTV9TUEFSQzY0X01DMTQ2ODE4UlRDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaWZuZGVmIFJUQ19QT1JUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXUuaAppbmRleCAyZDRmMmVhLi43MGFmNGI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW11LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTU1VX0gKICNkZWZpbmUgX19NTVVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vY29uc3QuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGxpYi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGxpYi5oCmluZGV4IGM3NTQ2NzYuLmRlYTNlNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BsaWIuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wbGliLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9fU1BBUkM2NF9PUExJQl9ICiAjZGVmaW5lIF9fU1BBUkM2NF9PUExJQl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KIAogLyogT0JQIHZlcnNpb24gc3RyaW5nLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaAppbmRleCBhYWJiMjE5Li5mZGYwY2ViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaApAQCAtMyw3ICszLDYgQEAKICNpZm5kZWYgX1NQQVJDNjRfUEFHRV9ICiAjZGVmaW5lIF9TUEFSQzY0X1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2NvbnN0Lmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0X1BBR0VfU0laRV84S0IpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcmFtLmgKaW5kZXggYTFjZDQ5Ny4uZjAxMjVjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFyYW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTVNQQVJDNjRfUEFSQU1fSAogI2RlZmluZSBfQVNNU1BBUkM2NF9QQVJBTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KICMgZGVmaW5lIEhaCQlDT05GSUdfSFoJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BnYWxsb2MuaAppbmRleCAxMmU0YTI3Li4wMTBmOWNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BnYWxsb2MuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX1NQQVJDNjRfUEdBTExPQ19ICiAjZGVmaW5lIF9TUEFSQzY0X1BHQUxMT0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaAppbmRleCBjZDQ2NGY0Li40ZTIxODgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaApAQCAtMTQsNyArMTQsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Byb2Nlc3Nvci5oCmluZGV4IGM2ODk2YjguLjY2ZGQyZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaApAQCAtMTMsNyArMTMsNiBAQAogICovCiAjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgdm9pZCAqcGM7IF9fYXNtX18oInJkICUlcGMsICUwIiA6ICI9ciIgKHBjKSk7IHBjOyB9KQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FzaS5oPgogI2luY2x1ZGUgPGFzbS9hLm91dC5oPgogI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmgKaW5kZXggZGYxN2U0Ny4uYzk2ZTZjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmgKQEAgLTExLDcgKzExLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnbmFsLmgKaW5kZXggZTMwNTliYi4uZmRjNDJhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ25hbC5oCkBAIC02LDcgKzYsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaAppbmRleCA4OWQ4NmVjLi4zODgyNDliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc21wLmgKQEAgLTYsNyArNiw2IEBACiAjaWZuZGVmIF9TUEFSQzY0X1NNUF9ICiAjZGVmaW5lIF9TUEFSQzY0X1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL2FzaS5oPgogI2luY2x1ZGUgPGFzbS9zdGFyZmlyZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oCmluZGV4IDUwOGM0MTYuLmJkNWZmYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrLmgKQEAgLTYsNyArNiw2IEBACiAjaWZuZGVmIF9fU1BBUkM2NF9TUElOTE9DS19ICiAjZGVmaW5lIF9fU1BBUkM2NF9TUElOTE9DS19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CS8qIEZvciBOUl9DUFVTICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaAppbmRleCBhMThlYzg3Li40Y2E2ODYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzdGVtLmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9fU1BBUkM2NF9TWVNURU1fSAogI2RlZmluZSBfX1NQQVJDNjRfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3Zpc2FzbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1lci5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1lci5oCmluZGV4IGVkYzhlMDguLmQ0MzU1OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWVyLmgKQEAgLTksNyArOSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzIHsKIAl2b2lkICgqaW5pdF90aWNrKSh1bnNpZ25lZCBsb25nKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYi5oCmluZGV4IDYxYzAxODguLjdhZjFlMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90bGIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1NQQVJDNjRfVExCX0gKICNkZWZpbmUgX1NQQVJDNjRfVExCX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oCmluZGV4IGUzYTdjNDUuLjM0ODczMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9TUEFSQzY0X1RMQkZMVVNIX0gKICNkZWZpbmUgX1NQQVJDNjRfVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmgKaW5kZXggMmQ1ZTNjNC4uZjIzNTI2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3R0YWJsZS5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfU1BBUkM2NF9UVEFCTEVfSAogI2RlZmluZSBfU1BBUkM2NF9UVEFCTEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3V0cmFwLmg+CiAKICNpZmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCmluZGV4IDk5OGVmNGEuLmJhZGM3M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaApAQCAtMzIxLDYgKzMyMSw3IEBACiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwMAogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMDEKIAorI2lmZGVmIF9fS0VSTkVMX18KIC8qIFdBUk5JTkc6IFlvdSBNQVkgTk9UIGFkZCBzeXNjYWxsIG51bWJlcnMgbGFyZ2VyIHRoYW4gMzAxLCBzaW5jZQogICogICAgICAgICAgYWxsIG9mIHRoZSBzeXNjYWxsIHRhYmxlcyBpbiB0aGUgU3BhcmMga2VybmVsIGFyZQogICogICAgICAgICAgc2l6ZWQgdG8gaGF2ZSAzMDEgZW50cmllcyAoc3RhcnRpbmcgYXQgemVybykuICBUaGVyZWZvcmUKQEAgLTQ4Nyw3ICs0ODgsNiBAQAogCiAjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCi0jaWZkZWYgX19LRVJORUxfXwogLyogc3lzY29uZiBvcHRpb25zLCBmb3IgU3VuT1MgY29tcGF0aWJpbGl0eSAqLwogI2RlZmluZSAgIF9TQ19BUkdfTUFYICAgICAgICAgICAgIDEKICNkZWZpbmUgICBfU0NfQ0hJTERfTUFYICAgICAgICAgICAyCkBAIC01MjEsNyArNTIxLDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECiAjZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUlRfU0lHU1VTUEVORAotI2VuZGlmCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC01MzEsNCArNTMwLDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX1NQQVJDNjRfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2Eub3V0LmggYi9pbmNsdWRlL2FzbS11bS9hLm91dC5oCmluZGV4IDdjMjYyNjUuLjUwY2VlN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2Eub3V0LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vYS5vdXQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19VTV9BX09VVF9ICiAjZGVmaW5lIF9fVU1fQV9PVVRfSAogCi0jaW5jbHVkZSAibGludXgvY29uZmlnLmgiCiAjaW5jbHVkZSAiYXNtL2FyY2gvYS5vdXQuaCIKICNpbmNsdWRlICJjaG9vc2UtbW9kZS5oIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9jYWNoZS5oIGIvaW5jbHVkZS9hc20tdW0vY2FjaGUuaAppbmRleCAzZDA1ODcwLi4xOWUxYmRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2NhY2hlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fVU1fQ0FDSEVfSAogI2RlZmluZSBfX1VNX0NBQ0hFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfVU1MX1g4NikgJiYgIWRlZmluZWQoQ09ORklHXzY0QklUKQogIyBkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJCShDT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oIGIvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oCmluZGV4IDI5OThjZjkuLjk5NzExMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2VsZi1wcGMuaAorKysgYi9pbmNsdWRlL2FzbS11bS9lbGYtcHBjLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fVU1fRUxGX1BQQ19ICiAjZGVmaW5lIF9fVU1fRUxGX1BQQ19ICiAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKIAogZXh0ZXJuIGxvbmcgZWxmX2F1eF9od2NhcDsKICNkZWZpbmUgRUxGX0hXQ0FQIChlbGZfYXV4X2h3Y2FwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZml4bWFwLmggYi9pbmNsdWRlL2FzbS11bS9maXhtYXAuaAppbmRleCBhZTBjYTM5Li5kMzUyYTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9maXhtYXAuaAorKysgYi9pbmNsdWRlL2FzbS11bS9maXhtYXAuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19VTV9GSVhNQVBfSAogI2RlZmluZSBfX1VNX0ZJWE1BUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNocGFyYW0uaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS11bS9oYXJkaXJxLmgKaW5kZXggMTIyNGIyNi4uMzEzZWJiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2hhcmRpcnEuaApAQCAtMyw3ICszLDYgQEAKICNpZm5kZWYgX19BU01fVU1fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX1VNX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9saW5rYWdlLmggYi9pbmNsdWRlL2FzbS11bS9saW5rYWdlLmgKaW5kZXggZTNkNjJkYy4uNzhiODYyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vbGlua2FnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgImFzbS9hcmNoL2xpbmthZ2UuaCIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiA8bGludXgvbGlua2FnZS5oPiB3aWxsIHBpY2sgc2FuZSBkZWZhdWx0cyAqLwogI2lmZGVmIENPTkZJR19HUFJPRgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXVtL21tdV9jb250ZXh0LmgKaW5kZXggOWEwZTQ4ZS4uZjcwOWM3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS11bS9tbXVfY29udGV4dC5oCkBAIC03LDcgKzcsNiBAQAogI2RlZmluZSBfX1VNX01NVV9DT05URVhUX0gKIAogI2luY2x1ZGUgImxpbnV4L3NjaGVkLmgiCi0jaW5jbHVkZSAibGludXgvY29uZmlnLmgiCiAjaW5jbHVkZSAiY2hvb3NlLW1vZGUuaCIKICNpbmNsdWRlICJ1bV9tbXUuaCIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGFnZS5oIGIvaW5jbHVkZS9hc20tdW0vcGFnZS5oCmluZGV4IDQxMzY0MzMuLjQyOTZkMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wYWdlLmgKQEAgLTksNyArOSw2IEBACiAKIHN0cnVjdCBwYWdlOwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3ZtLWZsYWdzLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS11bS9wZ2FsbG9jLmgKaW5kZXggZWE0OTQxMS4uMzRhYjI2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3BnYWxsb2MuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX19VTV9QR0FMTE9DX0gKICNkZWZpbmUgX19VTV9QR0FMTE9DX0gKIAotI2luY2x1ZGUgImxpbnV4L2NvbmZpZy5oIgogI2luY2x1ZGUgImxpbnV4L21tLmgiCiAjaW5jbHVkZSAiYXNtL2ZpeG1hcC5oIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaAppbmRleCBkYTA3YTY5Li44MjRjMjg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1nZW5lcmljLmgKQEAgLTEwLDcgKzEwLDYgQEAKIAogc3RydWN0IHRhc2tfc3RydWN0OwogCi0jaW5jbHVkZSAibGludXgvY29uZmlnLmgiCiAjaW5jbHVkZSAiYXNtL3B0cmFjZS5oIgogI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UtZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWdlbmVyaWMuaAppbmRleCA1MDM0ODQzLi5hMzZmNTM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UtZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1nZW5lcmljLmgKQEAgLTgsNyArOCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKIAogI2RlZmluZSBwdF9yZWdzIHB0X3JlZ3Nfc3ViYXJjaAogI2RlZmluZSBzaG93X3JlZ3Mgc2hvd19yZWdzX3N1YmFyY2gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NtcC5oIGIvaW5jbHVkZS9hc20tdW0vc21wLmgKaW5kZXggYWVkYTY2NS4uY2E1NTIyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vc21wLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vc21wLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKICNpbmNsdWRlICJsaW51eC9iaXRvcHMuaCIKICNpbmNsdWRlICJhc20vY3VycmVudC5oIgogI2luY2x1ZGUgImxpbnV4L2NwdW1hc2suaCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCmluZGV4IGYxNjZiOTguLjI2MWUyZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaApAQCAtOCw3ICs4LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXY4NTAvYXRvbWljLmgKaW5kZXggMTY2ZGYwMC4uZTRlNTdkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2F0b21pYy5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmIF9fVjg1MF9BVE9NSUNfSF9fCiAjZGVmaW5lIF9fVjg1MF9BVE9NSUNfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXY4NTAvYml0b3BzLmgKaW5kZXggMWY2ZmQ1YS4uMWZhOTliYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2JpdG9wcy5oCkBAIC0xNCw3ICsxNCw2IEBACiAjZGVmaW5lIF9fVjg1MF9CSVRPUFNfSF9fCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CS8qIHVubGlrZWx5ICAqLwogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogc3dhYjMyICovCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkJLyogaW50ZXJydXB0IGVuYWJsZS9kaXNhYmxlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS12ODUwL2RtYS1tYXBwaW5nLmgKaW5kZXggYzYzZmI1MC4uMWNjNDJjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvZG1hLW1hcHBpbmcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19WODUwX0RNQV9NQVBQSU5HX0hfXwogI2RlZmluZSBfX1Y4NTBfRE1BX01BUFBJTkdfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS12ODUwL2hhcmRpcnEuaAppbmRleCBkOTg0ODhjLi4wNGUyMDEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2hhcmRpcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19WODUwX0hBUkRJUlFfSF9fCiAjZGVmaW5lIF9fVjg1MF9IQVJESVJRX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tdjg1MC9tYWNoZGVwLmgKaW5kZXggOThkOGJmNi4uZjFlM2I4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9tYWNoZGVwLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9tYWNoZGVwLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZm5kZWYgX19WODUwX01BQ0hERVBfSF9fCiAjZGVmaW5lIF9fVjg1MF9NQUNIREVQX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGNoaXBzICovCiAjaWZkZWYgQ09ORklHX1Y4NTBFX01BMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS12ODUwL3BndGFibGUuaAppbmRleCAzY2Y4Nzc1Li4xZWEyYTkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3BndGFibGUuaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tdjg1MC9wcm9jZXNzb3IuaAppbmRleCAyZDMxMzA4Li42OTY1YjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvcHJvY2Vzc29yLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZm5kZWYgX19WODUwX1BST0NFU1NPUl9IX18KICNkZWZpbmUgX19WODUwX1BST0NFU1NPUl9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmbmRlZiBfX0FTU0VNQkxZX18gLyogPGxpbnV4L3RocmVhZF9pbmZvLmg+IGlzIG5vdCBhc20tc2FmZS4gICovCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXY4NTAvc2VyaWFsLmgKaW5kZXggOGMyYTYwOS4uMzZkOGY0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3NlcmlhbC5oCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IFJhbGYgQmFlY2hsZQogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqLyAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19SVEVfQ0JfTUUyCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS12ODUwL3VuaXN0ZC5oCmluZGV4IDgyNDYwYTcuLmJjYjQ0YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC91bmlzdGQuaApAQCAtMTQsOCArMTQsNiBAQAogI2lmbmRlZiBfX1Y4NTBfVU5JU1REX0hfXwogI2RlZmluZSBfX1Y4NTBfVU5JU1REX0hfXwogCi0jaW5jbHVkZSA8YXNtL2NsaW5rYWdlLmg+Ci0KICNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJICAwCiAjZGVmaW5lIF9fTlJfZXhpdAkJICAxCiAjZGVmaW5lIF9fTlJfZm9yawkJICAyCkBAIC0yMzcsMTAgKzIzNSw5IEBACiAgICBleGNlcHQgdGhlIHN5c2NhbGwgbnVtYmVyIChyMTIpLiAgKi8KICNkZWZpbmUgU1lTQ0FMTF9TSE9SVF9DTE9CQkVSUwlTWVNDQUxMX0NMT0JCRVJTLCAicjEzIiwgInIxNCIKIAorI2lmZGVmIF9fS0VSTkVMX18KIAotLyogVXNlciBwcm9ncmFtcyBzb21ldGltZXMgZW5kIHVwIGluY2x1ZGluZyB0aGlzIGhlYWRlciBmaWxlCi0gICAoaW5kaXJlY3RseSwgdmlhIHVDbGliYyBoZWFkZXIgZmlsZXMpLCBzbyBJJ20gYSBiaXQgbmVydm91cyBqdXN0Ci0gICBpbmNsdWRpbmcgPGxpbnV4L2NvbXBpbGVyLmg+LiAgKi8KKyNpbmNsdWRlIDxhc20vY2xpbmthZ2UuaD4KIAogI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykJCQkJCSAgICAgIFwKICAgZG8gewkJCQkJCQkJCSAgICAgIFwKQEAgLTM2OCw3ICszNjUsNiBAQAogfQogCQkKIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CkBAIC0zODksNyArMzg1LDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXwogCkBAIC00NDAsNyArNDM1LDcgQEAKIAkJCQlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKIAkJCQlzaXplX3Qgc2lnc2V0c2l6ZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTQ1NSw0ICs0NTAsNSBAQAogICB2b2lkIG5hbWUgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcyAoInN5c19uaV9zeXNjYWxsIikpKTsKICNlbmRpZgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fVjg1MF9VTklTVERfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlX3VhcnQuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydC5oCmluZGV4IDU5MzBkNTkuLjUxODJmYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydC5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydC5oCkBAIC0xOSw3ICsxOSw2IEBACiAjaWZuZGVmIF9fVjg1MF9WODUwRV9VQVJUX0hfXwogI2RlZmluZSBfX1Y4NTBfVjg1MEVfVUFSVF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KIAogI2luY2x1ZGUgPGFzbS92ODUwZV91dGlscy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljLmgKaW5kZXggYmRiZDg5My4uYTczMWJlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYXBpYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUElDX0gKICNkZWZpbmUgX19BU01fQVBJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oCmluZGV4IGNlY2JmN2IuLmJkM2ZhNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYXRvbWljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVJDSF9YODZfNjRfQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX1g4Nl82NF9BVE9NSUNfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKIC8qIGF0b21pY190IHNob3VsZCBiZSAzMiBiaXQgc2lnbmVkIHR5cGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaAppbmRleCA3OTIxMjEyLi5lOWJmOTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2JpdG9wcy5oCkBAIC01LDcgKzUsNiBAQAogICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19TTVAKICNkZWZpbmUgTE9DS19QUkVGSVggImxvY2sgOyAiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvYnVncy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2J1Z3MuaAppbmRleCA1OWJjNjg5Li5kODZjNWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYnVncy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9idWdzLmgKQEAgLTEwLDcgKzEwLDYgQEAKICAqCXZvaWQgY2hlY2tfYnVncyh2b2lkKTsKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGUuaAppbmRleCBmOGRmZjFjLi5lZDhhOWQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGUuaApAQCAtNCw3ICs0LDYgQEAKICNpZm5kZWYgX19BUkNIX1g4NjY0X0NBQ0hFX0gKICNkZWZpbmUgX19BUkNIX1g4NjY0X0NBQ0hFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBMMSBjYWNoZSBsaW5lIHNpemUgKi8KICNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJKENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY2FsbGluZy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2NhbGxpbmcuaAppbmRleCBmYzJjNWE2Li42ZjRmNjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvY2FsbGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWxsaW5nLmgKQEAgLTIsNyArMiw2IEBACiAgKiBTb21lIG1hY3JvcyB0byBoYW5kbGUgc3RhY2sgZnJhbWVzIGluIGFzc2VtYmx5LgogICovIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgUjE1IDAKICNkZWZpbmUgUjE0IDgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmgKaW5kZXggNDlhODFhNi4uNDk4ZjY2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmgKQEAgLTYsNyArNiw2IEBACiAgKiBkb2N1bWVudGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2RtYS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2RtYS5oCmluZGV4IDZmMmE4MTcuLmM1NTYyMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9BU01fRE1BX0gKICNkZWZpbmUgX0FTTV9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JLyogQW5kIHNwaW5sb2NrcyAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9kd2FyZjIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kd2FyZjIuaAppbmRleCAwNzY1NGJkLi4wNzQ0ZGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZHdhcmYyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2R3YXJmMi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfRFdBUkYyX0gKICNkZWZpbmUgX0RXQVJGMl9IIDEKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI3dhcm5pbmcgImFzbS9kd2FyZjIuaCBzaG91bGQgYmUgb25seSBpbmNsdWRlZCBpbiBwdXJlIGFzc2VtYmx5IGZpbGVzIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2ZpeG1hcC5oCmluZGV4IDdiMjg2YmQuLjBiNGZmYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9maXhtYXAuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZml4bWFwLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9GSVhNQVBfSAogI2RlZmluZSBfQVNNX0ZJWE1BUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2hhcmRpcnEuaAppbmRleCA4Njg5OTUxLi42NGE2NWNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0hBUkRJUlFfSAogI2RlZmluZSBfX0FTTV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vcGRhLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmgKaW5kZXggMGRmMTcxNS4uM2RlOTZmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9od19pcnEuaApAQCAtMTcsNyArMTcsNiBAQAogICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lhMzIuaAppbmRleCBlNmI3ZjIyLi4wMTkwYjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2XzY0X0lBMzJfSAogI2RlZmluZSBfQVNNX1g4Nl82NF9JQTMyX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvLmgKaW5kZXggYTA1ZGE4YS4uNzBlOTFmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2lvLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fSU9fSAogI2RlZmluZSBfQVNNX0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIHg4NiBJTyBpbnN0cnVjdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaW9fYXBpYy5oCmluZGV4IDUyNDg0ZTguLmZiN2EwOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvX2FwaWMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fSU9fQVBJQ19ICiAjZGVmaW5lIF9fQVNNX0lPX0FQSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXVfY29udGV4dC5oCmluZGV4IDE5ZjBjODMuLmFmMDNiOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXVfY29udGV4dC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX1g4Nl82NF9NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9fWDg2XzY0X01NVV9DT05URVhUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmgKaW5kZXggNjk0NGU3MS4uNzBiYjk5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXpvbmUuaApAQCAtNCw3ICs0LDYgQEAKICNpZm5kZWYgX0FTTV9YODZfNjRfTU1aT05FX0gKICNkZWZpbmUgX0FTTV9YODZfNjRfTU1aT05FX0ggMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfTlVNQQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbXRyci5oIGIvaW5jbHVkZS9hc20teDg2XzY0L210cnIuaAppbmRleCA2NmFjMWMwLi5kNjEzNWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbXRyci5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tdHJyLmgKQEAgLTIzLDkgKzIzLDcgQEAKICNpZm5kZWYgX0xJTlVYX01UUlJfSAogI2RlZmluZSBfTElOVVhfTVRSUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCiAjZGVmaW5lCU1UUlJfSU9DVExfQkFTRQknTScKIApAQCAtMTAyLDExICsxMDAsMTAgQEAKICAgICByZXR1cm4gLUVOT0RFVjsKIH0KIAotIyAgZW5kaWYKLQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX01UUlIgKi8KIAogI2lmZGVmIENPTkZJR19DT01QQVQKKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KIAogc3RydWN0IG10cnJfc2VudHJ5MzIKIHsKQEAgLTEzOCw0ICsxMzUsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYgIC8qICBfTElOVVhfTVRSUl9IICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYWdlLmgKaW5kZXggNDA4MTg1Yi4uZjdiZjg3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfWDg2XzY0X1BBR0VfSAogI2RlZmluZSBfWDg2XzY0X1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjZGVmaW5lIFBBR0VfU0hJRlQJMTIKQEAgLTEzNiw5ICsxMzUsOSBAQAogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX0dBVEVfQVJFQSAxCQogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYgLyogX1g4Nl82NF9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wYXJhbS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3BhcmFtLmgKaW5kZXggNTk1NmIyMy4uYTcyODc4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BhcmFtLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BhcmFtLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU014ODZfNjRfUEFSQU1fSAogCiAjaWZkZWYgX19LRVJORUxfXwotIyBpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICMgZGVmaW5lIEhaICAgICAgICAgICAgQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KICMgZGVmaW5lIFVTRVJfSFogICAgICAgMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzICovCiAjZGVmaW5lIENMT0NLU19QRVJfU0VDICAgICAgICAoVVNFUl9IWikgICAgICAgLyogbGlrZSB0aW1lcygpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcGNpLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGNpLmgKaW5kZXggOGEwNWFmMi4uMmRiMDYyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wY2kuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX194ODY2NF9QQ0lfSAogI2RlZmluZSBfX3g4NjY0X1BDSV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm9jZXNzb3IuaAppbmRleCAzN2EzZWM0Li4zMDYxYTM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3Byb2Nlc3Nvci5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zZXJpYWwuaAppbmRleCBkYzc1MmVhLi5iMDQ5NmUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NlcmlhbC5oCkBAIC0yLDcgKzIsNiBAQAogICogaW5jbHVkZS9hc20teDg2XzY0L3NlcmlhbC5oCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oCmluZGV4IGE0ZmRhZWIuLjc2ODZiOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKQEAgLTUsNyArNSw2IEBACiAgKiBXZSBuZWVkIHRoZSBBUElDIGRlZmluaXRpb25zIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiAnc21wLmgnCiAgKi8KICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NwaW5sb2NrLmgKaW5kZXggZmU0ODRhNi4uNWQ4YTVlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NwaW5sb2NrLmgKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9yd2xvY2suaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogWW91ciBiYXNpYyBTTVAgc3BpbmxvY2tzLCBhbGxvd2luZyBvbmx5IGEgc2luZ2xlIENQVSBhbnl3aGVyZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3N3aW90bGIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zd2lvdGxiLmgKaW5kZXggNjA3NTdlZi4uNWY5YTAxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3N3aW90bGIuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc3dpb3RsYi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1NXSU9UTEJfSAogI2RlZmluZSBfQVNNX1NXVElPTEJfSCAxCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmgKaW5kZXggMzk3NTk4OS4uZjQ4ZTBkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU1lTVEVNX0gKICNkZWZpbmUgX19BU01fU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3RsYmZsdXNoLmgKaW5kZXggNGE5YzIwZS4uZDE2ZDViNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3RsYmZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9YODY2NF9UTEJGTFVTSF9ICiAjZGVmaW5lIF9YODY2NF9UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdG9wb2xvZ3kuaAppbmRleCA5ZGI1NGU5Li44MGM0ZTQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdG9wb2xvZ3kuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9YODZfNjRfVE9QT0xPR1lfSAogI2RlZmluZSBfQVNNX1g4Nl82NF9UT1BPTE9HWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19OVU1BCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oCmluZGV4IGJkZGZmY2IuLjFlMWZhMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3VhY2Nlc3MuaApAQCAtNCw3ICs0LDYgQEAKIC8qCiAgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaAppbmRleCBmZWI3N2NiLi4wYWZmMjJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCkBAIC02MTgsNiArNjE4LDggQEAKICNkZWZpbmUgX19OUl92bXNwbGljZQkJMjc4CiBfX1NZU0NBTEwoX19OUl92bXNwbGljZSwgc3lzX3Ztc3BsaWNlKQogCisjaWZkZWYgX19LRVJORUxfXworCiAjZGVmaW5lIF9fTlJfc3lzY2FsbF9tYXggX19OUl92bXNwbGljZQogCiAjaWZuZGVmIF9fTk9fU1RVQlMKQEAgLTYzNSw3ICs2MzcsNiBAQAogCXJldHVybiAodHlwZSkgKHJlcyk7IFwKIH0gd2hpbGUgKDApCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQpAQCAtNjU3LDcgKzY1OCw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKICNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCi0jZW5kaWYKIAogI2lmbmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTgyMSw3ICs4MjEsNyBAQAogCiAjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCi0jaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCisjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CkBAIC04NDgsNCArODQ4LDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9hdG9taWMuaAppbmRleCBmZTEwNWExLi41YzI2NzIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2F0b21pYy5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9YVEVOU0FfQVRPTUlDX0gKICNkZWZpbmUgX1hURU5TQV9BVE9NSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAKIHR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jaGVja3N1bS5oCmluZGV4IDgxYTc5N2EuLmJkYzAwYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jaGVja3N1bS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9YVEVOU0FfQ0hFQ0tTVU1fSAogI2RlZmluZSBfWFRFTlNBX0NIRUNLU1VNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9kZWxheS5oCmluZGV4IDFiYzYwMWUuLmUxZDhjOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9kZWxheS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9kZWxheS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9YVEVOU0FfREVMQVlfSAogI2RlZmluZSBfWFRFTlNBX0RFTEFZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2RtYS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2RtYS5oCmluZGV4IDFjMjJiMDIuLmRiMjYzM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvZG1hLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX1hURU5TQV9ETUFfSAogI2RlZmluZSBfWFRFTlNBX0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG5lZWQgYnl0ZSBJTyAqLwogI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2hhcmRpcnEuaAppbmRleCBhYTljMWFkLi44N2NiMTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9oYXJkaXJxLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX1hURU5TQV9IQVJESVJRX0gKICNkZWZpbmUgX1hURU5TQV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvaWRlLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvaWRlLmgKaW5kZXggYjUyM2NkNC4uNmI5MTI3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9pZGUuaApAQCAtMTQsNyArMTQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgTUFYX0hXSUZTCiAjIGRlZmluZSBNQVhfSFdJRlMJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2lvLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvaW8uaAppbmRleCBjNWMxMzk4Li41NTZlNWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvaW8uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvaW8uaApAQCAtMTIsNyArMTIsNiBAQAogI2RlZmluZSBfWFRFTlNBX0lPX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2lycS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2lycS5oCmluZGV4IGQ5ODRlOTUuLjA0OWZkZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvaXJxLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX1hURU5TQV9JUlFfSAogI2RlZmluZSBfWFRFTlNBX0lSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGxhdGZvcm0vaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS14dGVuc2EvbW11X2NvbnRleHQuaAppbmRleCAzNjRhN2IwLi5hZjY4M2E3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvbW11X2NvbnRleHQuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfWFRFTlNBX01NVV9DT05URVhUX0gKICNkZWZpbmUgX1hURU5TQV9NTVVfQ09OVEVYVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvcGFnZS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3BhZ2UuaAppbmRleCA5OTJiYWM1Li40MGY0YzZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wYWdlLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wZ2FsbG9jLmgKaW5kZXggNzM0YThkMC4uZDU2ZGRmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcGdhbGxvYy5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLmgKaW5kZXggMzYxNjM4OS4uNDgxMzVhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX1hURU5TQV9QTEFURk9STV9ICiAjZGVmaW5lIF9YVEVOU0FfUExBVEZPUk1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCmluZGV4IGIyOWY3YWUuLmY5ODYxNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX1hURU5TQV9TWVNURU1fSAogI2RlZmluZSBfWFRFTlNBX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS91bmlzdGQuaAppbmRleCA2YjM5ZDY2Li41ZTFiOTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3VuaXN0ZC5oCkBAIC0xMSw4ICsxMSw2IEBACiAjaWZuZGVmIF9YVEVOU0FfVU5JU1REX0gKICNkZWZpbmUgX1hURU5TQV9VTklTVERfSAogCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCiAjZGVmaW5lIF9fTlJfc3BpbGwJCSAgMAogI2RlZmluZSBfX05SX2V4aXQJCSAgMQogI2RlZmluZSBfX05SX3JlYWQJCSAgMwpAQCAtMjIxLDIxICsyMTksOSBAQAogI2RlZmluZSBTWVNYVEVOU0FfQ09VTlQJCSAgIDUJLyogY291bnQgb2Ygc3lzY2FsbDAgZnVuY3Rpb25zKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIHJldHVybiAoKHR5cGUpKHJlcykpCi0jZWxzZQotI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAotZG8geyBcCi0JaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgeyBcCi0JLyogQXZvaWQgdXNpbmcgInJlcyIgd2hpY2ggaXMgZGVjbGFyZWQgdG8gYmUgaW4gcmVnaXN0ZXIgcjI7IFwKLQkgKiBlcnJubyBtaWdodCBleHBhbmQgdG8gYSBmdW5jdGlvbiBjYWxsIGFuZCBjbG9iYmVyIGl0LiAgKi8gXAotCQlpbnQgX19lcnIgPSAtKHJlcyk7IFwKLQkJZXJybm8gPSBfX2VycjsgXAotCQlyZXMgPSAtMTsgXAotCX0gXAotCXJldHVybiAodHlwZSkgKHJlcyk7IFwKLX0gd2hpbGUgKDApCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKKyNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIHJldHVybiAoKHR5cGUpKHJlcykpCiAKIC8qIFRlbnNpbGljYSdzIHh0LXhjYyBjb21waWxlciBpcyBtdWNoIG1vcmUgYWdyZXNzaXZlIGF0IGNvZGUKICAqIG9wdGltaXphdGlvbiB0aGFuIGdjYy4gIE11bHRpcGxlIF9fYXNtX18gc3RhdGVtZW50cyBhcmUKQEAgLTQyOSwxMSArNDE1LDEwIEBACiAgKi8KICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKTsKIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCS8qIF9YVEVOU0FfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNjdC5oIGIvaW5jbHVkZS9saW51eC9hY2N0LmgKaW5kZXggOWE2NjQwMS4uM2Q1NGZiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY2N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hY2N0LmgKQEAgLTE2LDcgKzE2LDYgQEAKICNkZWZpbmUgX0xJTlVYX0FDQ1RfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CkBAIC0xMTYsNyArMTE1LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QKIHN0cnVjdCB2ZnNtb3VudDsKQEAgLTE2NSw2ICsxNjMsNyBAQAogI2VuZGlmCS8qIF9fS0VSTkVMICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogLyoKICAqIFlldCBhbm90aGVyIHNldCBvZiBIWiB0byAqSFogaGVscGVyIGZ1bmN0aW9ucy4KICAqIFNlZSA8bGludXgvamlmZmllcy5oPiBmb3IgdGhlIG9yaWdpbmFsLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hY3BpLmggYi9pbmNsdWRlL2xpbnV4L2FjcGkuaAppbmRleCBkM2JjMjVlLi4xY2YwYjkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FjcGkuaApAQCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBfTElOVVhfQUNQSV9ICiAjZGVmaW5lIF9MSU5VWF9BQ1BJX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYJQ09ORklHX0FDUEkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZmZzX2hhcmRibG9ja3MuaCBiL2luY2x1ZGUvbGludXgvYWZmc19oYXJkYmxvY2tzLmgKaW5kZXggM2ZiODY5OS4uZjFiOTQ4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZmZzX2hhcmRibG9ja3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FmZnNfaGFyZGJsb2Nrcy5oCkBAIC0xLDQ1ICsxLDQ3IEBACiAjaWZuZGVmCUFGRlNfSEFSREJMT0NLU19ICiAjZGVmaW5lCUFGRlNfSEFSREJMT0NLU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBKdXN0IHRoZSBuZWVkZWQgZGVmaW5pdGlvbnMgZm9yIHRoZSBSREIgb2YgYW4gQW1pZ2EgSEQuICovCiAKIHN0cnVjdCBSaWdpZERpc2tCbG9jayB7Ci0JdTMyCXJkYl9JRDsKKwlfX3UzMglyZGJfSUQ7CiAJX19iZTMyCXJkYl9TdW1tZWRMb25nczsKLQlzMzIJcmRiX0Noa1N1bTsKLQl1MzIJcmRiX0hvc3RJRDsKKwlfX3MzMglyZGJfQ2hrU3VtOworCV9fdTMyCXJkYl9Ib3N0SUQ7CiAJX19iZTMyCXJkYl9CbG9ja0J5dGVzOwotCXUzMglyZGJfRmxhZ3M7Ci0JdTMyCXJkYl9CYWRCbG9ja0xpc3Q7CisJX191MzIJcmRiX0ZsYWdzOworCV9fdTMyCXJkYl9CYWRCbG9ja0xpc3Q7CiAJX19iZTMyCXJkYl9QYXJ0aXRpb25MaXN0OwotCXUzMglyZGJfRmlsZVN5c0hlYWRlckxpc3Q7Ci0JdTMyCXJkYl9Ecml2ZUluaXQ7Ci0JdTMyCXJkYl9SZXNlcnZlZDFbNl07Ci0JdTMyCXJkYl9DeWxpbmRlcnM7Ci0JdTMyCXJkYl9TZWN0b3JzOwotCXUzMglyZGJfSGVhZHM7Ci0JdTMyCXJkYl9JbnRlcmxlYXZlOwotCXUzMglyZGJfUGFyazsKLQl1MzIJcmRiX1Jlc2VydmVkMlszXTsKLQl1MzIJcmRiX1dyaXRlUHJlQ29tcDsKLQl1MzIJcmRiX1JlZHVjZWRXcml0ZTsKLQl1MzIJcmRiX1N0ZXBSYXRlOwotCXUzMglyZGJfUmVzZXJ2ZWQzWzVdOwotCXUzMglyZGJfUkRCQmxvY2tzTG87Ci0JdTMyCXJkYl9SREJCbG9ja3NIaTsKLQl1MzIJcmRiX0xvQ3lsaW5kZXI7Ci0JdTMyCXJkYl9IaUN5bGluZGVyOwotCXUzMglyZGJfQ3lsQmxvY2tzOwotCXUzMglyZGJfQXV0b1BhcmtTZWNvbmRzOwotCXUzMglyZGJfSGlnaFJEU0tCbG9jazsKLQl1MzIJcmRiX1Jlc2VydmVkNDsKKwlfX3UzMglyZGJfRmlsZVN5c0hlYWRlckxpc3Q7CisJX191MzIJcmRiX0RyaXZlSW5pdDsKKwlfX3UzMglyZGJfUmVzZXJ2ZWQxWzZdOworCV9fdTMyCXJkYl9DeWxpbmRlcnM7CisJX191MzIJcmRiX1NlY3RvcnM7CisJX191MzIJcmRiX0hlYWRzOworCV9fdTMyCXJkYl9JbnRlcmxlYXZlOworCV9fdTMyCXJkYl9QYXJrOworCV9fdTMyCXJkYl9SZXNlcnZlZDJbM107CisJX191MzIJcmRiX1dyaXRlUHJlQ29tcDsKKwlfX3UzMglyZGJfUmVkdWNlZFdyaXRlOworCV9fdTMyCXJkYl9TdGVwUmF0ZTsKKwlfX3UzMglyZGJfUmVzZXJ2ZWQzWzVdOworCV9fdTMyCXJkYl9SREJCbG9ja3NMbzsKKwlfX3UzMglyZGJfUkRCQmxvY2tzSGk7CisJX191MzIJcmRiX0xvQ3lsaW5kZXI7CisJX191MzIJcmRiX0hpQ3lsaW5kZXI7CisJX191MzIJcmRiX0N5bEJsb2NrczsKKwlfX3UzMglyZGJfQXV0b1BhcmtTZWNvbmRzOworCV9fdTMyCXJkYl9IaWdoUkRTS0Jsb2NrOworCV9fdTMyCXJkYl9SZXNlcnZlZDQ7CiAJY2hhcglyZGJfRGlza1ZlbmRvcls4XTsKIAljaGFyCXJkYl9EaXNrUHJvZHVjdFsxNl07CiAJY2hhcglyZGJfRGlza1JldmlzaW9uWzRdOwogCWNoYXIJcmRiX0NvbnRyb2xsZXJWZW5kb3JbOF07CiAJY2hhcglyZGJfQ29udHJvbGxlclByb2R1Y3RbMTZdOwogCWNoYXIJcmRiX0NvbnRyb2xsZXJSZXZpc2lvbls0XTsKLQl1MzIJcmRiX1Jlc2VydmVkNVsxMF07CisJX191MzIJcmRiX1Jlc2VydmVkNVsxMF07CiB9OwogCiAjZGVmaW5lCUlETkFNRV9SSUdJRERJU0sJMHg1MjQ0NTM0QgkvKiAiUkRTSyIgKi8KQEAgLTQ3LDE2ICs0OSwxNiBAQAogc3RydWN0IFBhcnRpdGlvbkJsb2NrIHsKIAlfX2JlMzIJcGJfSUQ7CiAJX19iZTMyCXBiX1N1bW1lZExvbmdzOwotCXMzMglwYl9DaGtTdW07Ci0JdTMyCXBiX0hvc3RJRDsKKwlfX3MzMglwYl9DaGtTdW07CisJX191MzIJcGJfSG9zdElEOwogCV9fYmUzMglwYl9OZXh0OwotCXUzMglwYl9GbGFnczsKLQl1MzIJcGJfUmVzZXJ2ZWQxWzJdOwotCXUzMglwYl9EZXZGbGFnczsKLQl1OAlwYl9Ecml2ZU5hbWVbMzJdOwotCXUzMglwYl9SZXNlcnZlZDJbMTVdOworCV9fdTMyCXBiX0ZsYWdzOworCV9fdTMyCXBiX1Jlc2VydmVkMVsyXTsKKwlfX3UzMglwYl9EZXZGbGFnczsKKwlfX3U4CXBiX0RyaXZlTmFtZVszMl07CisJX191MzIJcGJfUmVzZXJ2ZWQyWzE1XTsKIAlfX2JlMzIJcGJfRW52aXJvbm1lbnRbMTddOwotCXUzMglwYl9FUmVzZXJ2ZWRbMTVdOworCV9fdTMyCXBiX0VSZXNlcnZlZFsxNV07CiB9OwogCiAjZGVmaW5lCUlETkFNRV9QQVJUSVRJT04JMHg1MDQxNTI1NAkvKiAiUEFSVCIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oIGIvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKaW5kZXggNmQ1OWM4ZS4uYmZiOGVjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKQEAgLTI3LDggKzI3LDYgQEAKICNpZm5kZWYgX0FHUF9ICiAjZGVmaW5lIF9BR1BfSCAxCiAKLSNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgotCiAjZGVmaW5lIEFHUElPQ19CQVNFICAgICAgICdBJwogI2RlZmluZSBBR1BJT0NfSU5GTyAgICAgICBfSU9SIChBR1BJT0NfQkFTRSwgMCwgc3RydWN0IGFncF9pbmZvKikKICNkZWZpbmUgQUdQSU9DX0FDUVVJUkUgICAgX0lPICAoQUdQSU9DX0JBU0UsIDEpCkBAIC0xMTIsNiArMTEwLDcgQEAKIAogI2Vsc2UJCQkJLyogX19LRVJORUxfXyAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KIAogI2RlZmluZSBBR1BHQVJUX01JTk9SIDE3NQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oIGIvaW5jbHVkZS9saW51eC9hbWJhL2NsY2QuaAppbmRleCA5Y2Y2NGIxLi4yOWMwNDQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9jbGNkLmgKQEAgLTksNyArOSw2IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWRldi5oIGIvaW5jbHVkZS9saW51eC9hdG1kZXYuaAppbmRleCBiMjAzZWE4Li4xZWIyMzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0bWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRtZGV2LmgKQEAgLTIwOSw3ICsyMDksNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPiAvKiB3YWl0X3F1ZXVlX2hlYWRfdCAqLwogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4gLyogc3RydWN0IHRpbWV2YWwgKi8KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCBiNzRjMTQ4Li5lMDUxZmY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC0yNCw4ICsyNCw3IEBACiAjaWZuZGVmIF9MSU5VWF9BVURJVF9IXwogI2RlZmluZSBfTElOVVhfQVVESVRfSF8KIAotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLWVtLmg+CiAKIC8qIFRoZSBuZXRsaW5rIG1lc3NhZ2VzIGZvciB0aGUgYXVkaXQgc3lzdGVtIGlzIGRpdmlkZWQgaW50byBibG9ja3M6CiAgKiAxMDAwIC0gMTA5OSBhcmUgZm9yIGNvbW1hbmRpbmcgdGhlIGF1ZGl0IHN5c3RlbQpAQCAtODMsNyArODIsMTIgQEAKICNkZWZpbmUgQVVESVRfQ09ORklHX0NIQU5HRQkxMzA1CS8qIEF1ZGl0IHN5c3RlbSBjb25maWd1cmF0aW9uIGNoYW5nZSAqLwogI2RlZmluZSBBVURJVF9TT0NLQUREUgkJMTMwNgkvKiBzb2NrYWRkciBjb3BpZWQgYXMgc3lzY2FsbCBhcmcgKi8KICNkZWZpbmUgQVVESVRfQ1dECQkxMzA3CS8qIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgQVVESVRfRVhFQ1ZFCQkxMzA5CS8qIGV4ZWN2ZSBhcmd1bWVudHMgKi8KICNkZWZpbmUgQVVESVRfSVBDX1NFVF9QRVJNCTEzMTEJLyogSVBDIG5ldyBwZXJtaXNzaW9ucyByZWNvcmQgdHlwZSAqLworI2RlZmluZSBBVURJVF9NUV9PUEVOCQkxMzEyCS8qIFBPU0lYIE1RIG9wZW4gcmVjb3JkIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfTVFfU0VORFJFQ1YJMTMxMwkvKiBQT1NJWCBNUSBzZW5kL3JlY2VpdmUgcmVjb3JkIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfTVFfTk9USUZZCQkxMzE0CS8qIFBPU0lYIE1RIG5vdGlmeSByZWNvcmQgdHlwZSAqLworI2RlZmluZSBBVURJVF9NUV9HRVRTRVRBVFRSCTEzMTUJLyogUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUgKi8KIAogI2RlZmluZSBBVURJVF9BVkMJCTE0MDAJLyogU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAqLwogI2RlZmluZSBBVURJVF9TRUxJTlVYX0VSUgkxNDAxCS8qIEludGVybmFsIFNFIExpbnV4IEVycm9ycyAqLwpAQCAtMTUxLDYgKzE1NSw3IEBACiAjZGVmaW5lIEFVRElUX1NFX1RZUEUJMTUJLyogc2VjdXJpdHkgbGFiZWwgdHlwZSAqLwogI2RlZmluZSBBVURJVF9TRV9TRU4JMTYJLyogc2VjdXJpdHkgbGFiZWwgc2Vuc2l0aXZpdHkgbGFiZWwgKi8KICNkZWZpbmUgQVVESVRfU0VfQ0xSCTE3CS8qIHNlY3VyaXR5IGxhYmVsIGNsZWFyYW5jZSBsYWJlbCAqLworI2RlZmluZSBBVURJVF9QUElECTE4CiAKIAkJCQkvKiBUaGVzZSBhcmUgT05MWSB1c2VmdWwgd2hlbiBjaGVja2luZwogCQkJCSAqIGF0IHN5c2NhbGwgZXhpdCB0aW1lIChBVURJVF9BVF9FWElUKS4gKi8KQEAgLTE1OSw2ICsxNjQsNyBAQAogI2RlZmluZSBBVURJVF9JTk9ERQkxMDIKICNkZWZpbmUgQVVESVRfRVhJVAkxMDMKICNkZWZpbmUgQVVESVRfU1VDQ0VTUyAgIDEwNAkvKiBleGl0ID49IDA7IHZhbHVlIGlnbm9yZWQgKi8KKyNkZWZpbmUgQVVESVRfV0FUQ0gJMTA1CiAKICNkZWZpbmUgQVVESVRfQVJHMCAgICAgIDIwMAogI2RlZmluZSBBVURJVF9BUkcxICAgICAgKEFVRElUX0FSRzArMSkKQEAgLTI3MywxNiArMjc5LDIxIEBACiB9OwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIHN0cnVjdCBhdWRpdF9zaWdfaW5mbyB7CiAJdWlkX3QJCXVpZDsKIAlwaWRfdAkJcGlkOworCWNoYXIJCWN0eFswXTsKIH07CiAKIHN0cnVjdCBhdWRpdF9idWZmZXI7CiBzdHJ1Y3QgYXVkaXRfY29udGV4dDsKIHN0cnVjdCBpbm9kZTsKIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtczsKK3N0cnVjdCBsaW51eF9iaW5wcm07CitzdHJ1Y3QgbXFfYXR0cjsKK3N0cnVjdCBtcXN0YXQ7CiAKICNkZWZpbmUgQVVESVRTQ19JTlZBTElEIDAKICNkZWZpbmUgQVVESVRTQ19TVUNDRVNTIDEKQEAgLTI5NywxNSArMzA4LDE5IEBACiAJCQkJaW50IG1ham9yLCB1bnNpZ25lZCBsb25nIGEwLCB1bnNpZ25lZCBsb25nIGExLAogCQkJCXVuc2lnbmVkIGxvbmcgYTIsIHVuc2lnbmVkIGxvbmcgYTMpOwogZXh0ZXJuIHZvaWQgYXVkaXRfc3lzY2FsbF9leGl0KGludCBmYWlsZWQsIGxvbmcgcmV0dXJuX2NvZGUpOwotZXh0ZXJuIHZvaWQgYXVkaXRfZ2V0bmFtZShjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIF9fYXVkaXRfZ2V0bmFtZShjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIGF1ZGl0X3B1dG5hbWUoY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGZsYWdzKTsKK2V4dGVybiB2b2lkIF9fYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlX2NoaWxkKGNvbnN0IGNoYXIgKmRuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXVuc2lnbmVkIGxvbmcgcGlubyk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgICB1bnNpZ25lZCBmbGFncykgeworc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2dldG5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCi0JCV9fYXVkaXRfaW5vZGUobmFtZSwgaW5vZGUsIGZsYWdzKTsKKwkJX19hdWRpdF9nZXRuYW1lKG5hbWUpOworfQorc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpIHsKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCV9fYXVkaXRfaW5vZGUobmFtZSwgaW5vZGUpOwogfQogc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2lub2RlX2NoaWxkKGNvbnN0IGNoYXIgKmRuYW1lLCAKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIApAQCAtMzIwLDEzICszMzUsNjEgQEAKIAkJCSAgICAgIHN0cnVjdCB0aW1lc3BlYyAqdCwgdW5zaWduZWQgaW50ICpzZXJpYWwpOwogZXh0ZXJuIGludCAgYXVkaXRfc2V0X2xvZ2ludWlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdWlkX3QgbG9naW51aWQpOwogZXh0ZXJuIHVpZF90IGF1ZGl0X2dldF9sb2dpbnVpZChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4KTsKLWV4dGVybiBpbnQgYXVkaXRfaXBjX29iaihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCk7Ci1leHRlcm4gaW50IGF1ZGl0X2lwY19zZXRfcGVybSh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCk7CitleHRlcm4gaW50IF9fYXVkaXRfaXBjX29iaihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCk7CitleHRlcm4gaW50IF9fYXVkaXRfaXBjX3NldF9wZXJtKHVuc2lnbmVkIGxvbmcgcWJ5dGVzLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbW9kZV90IG1vZGUpOworZXh0ZXJuIGludCBhdWRpdF9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwogZXh0ZXJuIGludCBhdWRpdF9zb2NrZXRjYWxsKGludCBuYXJncywgdW5zaWduZWQgbG9uZyAqYXJncyk7CiBleHRlcm4gaW50IGF1ZGl0X3NvY2thZGRyKGludCBsZW4sIHZvaWQgKmFkZHIpOwogZXh0ZXJuIGludCBhdWRpdF9hdmNfcGF0aChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKLWV4dGVybiB2b2lkIGF1ZGl0X3NpZ25hbF9pbmZvKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CiBleHRlcm4gaW50IGF1ZGl0X3NldF9tYWN4YXR0cihjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgX19hdWRpdF9tcV9vcGVuKGludCBvZmxhZywgbW9kZV90IG1vZGUsIHN0cnVjdCBtcV9hdHRyIF9fdXNlciAqdV9hdHRyKTsKK2V4dGVybiBpbnQgX19hdWRpdF9tcV90aW1lZHNlbmQobXFkX3QgbXFkZXMsIHNpemVfdCBtc2dfbGVuLCB1bnNpZ25lZCBpbnQgbXNnX3ByaW8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpOworZXh0ZXJuIGludCBfX2F1ZGl0X21xX3RpbWVkcmVjZWl2ZShtcWRfdCBtcWRlcywgc2l6ZV90IG1zZ19sZW4sIHVuc2lnbmVkIGludCBfX3VzZXIgKnVfbXNnX3ByaW8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpOworZXh0ZXJuIGludCBfX2F1ZGl0X21xX25vdGlmeShtcWRfdCBtcWRlcywgY29uc3Qgc3RydWN0IHNpZ2V2ZW50IF9fdXNlciAqdV9ub3RpZmljYXRpb24pOworZXh0ZXJuIGludCBfX2F1ZGl0X21xX2dldHNldGF0dHIobXFkX3QgbXFkZXMsIHN0cnVjdCBtcV9hdHRyICptcXN0YXQpOworCitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9pcGNfb2JqKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKQoreworCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKKwkJcmV0dXJuIF9fYXVkaXRfaXBjX29iaihpcGNwKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2lwY19zZXRfcGVybSh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlKQoreworCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKKwkJcmV0dXJuIF9fYXVkaXRfaXBjX3NldF9wZXJtKHFieXRlcywgdWlkLCBnaWQsIG1vZGUpOworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgYXVkaXRfbXFfb3BlbihpbnQgb2ZsYWcsIG1vZGVfdCBtb2RlLCBzdHJ1Y3QgbXFfYXR0ciBfX3VzZXIgKnVfYXR0cikKK3sKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCXJldHVybiBfX2F1ZGl0X21xX29wZW4ob2ZsYWcsIG1vZGUsIHVfYXR0cik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9tcV90aW1lZHNlbmQobXFkX3QgbXFkZXMsIHNpemVfdCBtc2dfbGVuLCB1bnNpZ25lZCBpbnQgbXNnX3ByaW8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpCit7CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCQlyZXR1cm4gX19hdWRpdF9tcV90aW1lZHNlbmQobXFkZXMsIG1zZ19sZW4sIG1zZ19wcmlvLCB1X2Fic190aW1lb3V0KTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X21xX3RpbWVkcmVjZWl2ZShtcWRfdCBtcWRlcywgc2l6ZV90IG1zZ19sZW4sIHVuc2lnbmVkIGludCBfX3VzZXIgKnVfbXNnX3ByaW8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpCit7CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCQlyZXR1cm4gX19hdWRpdF9tcV90aW1lZHJlY2VpdmUobXFkZXMsIG1zZ19sZW4sIHVfbXNnX3ByaW8sIHVfYWJzX3RpbWVvdXQpOworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgYXVkaXRfbXFfbm90aWZ5KG1xZF90IG1xZGVzLCBjb25zdCBzdHJ1Y3Qgc2lnZXZlbnQgX191c2VyICp1X25vdGlmaWNhdGlvbikKK3sKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCXJldHVybiBfX2F1ZGl0X21xX25vdGlmeShtcWRlcywgdV9ub3RpZmljYXRpb24pOworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgYXVkaXRfbXFfZ2V0c2V0YXR0cihtcWRfdCBtcWRlcywgc3RydWN0IG1xX2F0dHIgKm1xc3RhdCkKK3sKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCXJldHVybiBfX2F1ZGl0X21xX2dldHNldGF0dHIobXFkZXMsIG1xc3RhdCk7CisJcmV0dXJuIDA7Cit9CiAjZWxzZQogI2RlZmluZSBhdWRpdF9hbGxvYyh0KSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9mcmVlKHQpIGRvIHsgOyB9IHdoaWxlICgwKQpAQCAtMzM0LDE5ICszOTcsMjQgQEAKICNkZWZpbmUgYXVkaXRfc3lzY2FsbF9leGl0KGYscikgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2dldG5hbWUobikgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X3B1dG5hbWUobikgZG8geyA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIF9fYXVkaXRfaW5vZGUobixpLGYpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2F1ZGl0X2lub2RlKG4saSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIF9fYXVkaXRfaW5vZGVfY2hpbGQoZCxpLHApIGRvIHsgOyB9IHdoaWxlICgwKQotI2RlZmluZSBhdWRpdF9pbm9kZShuLGksZikgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGF1ZGl0X2lub2RlKG4saSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2lub2RlX2NoaWxkKGQsaSxwKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRzY19nZXRfc3RhbXAoYyx0LHMpIGRvIHsgQlVHKCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2dldF9sb2dpbnVpZChjKSAoeyAtMTsgfSkKICNkZWZpbmUgYXVkaXRfaXBjX29iaihpKSAoeyAwOyB9KQotI2RlZmluZSBhdWRpdF9pcGNfc2V0X3Blcm0ocSx1LGcsbSxpKSAoeyAwOyB9KQorI2RlZmluZSBhdWRpdF9pcGNfc2V0X3Blcm0ocSx1LGcsbSkgKHsgMDsgfSkKKyNkZWZpbmUgYXVkaXRfYnBybShwKSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9zb2NrZXRjYWxsKG4sYSkgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfc29ja2FkZHIobGVuLCBhZGRyKSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9hdmNfcGF0aChkZW50cnksIG1udCkgKHsgMDsgfSkKLSNkZWZpbmUgYXVkaXRfc2lnbmFsX2luZm8ocyx0KSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfc2V0X21hY3hhdHRyKG4pIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBhdWRpdF9tcV9vcGVuKG8sbSxhKSAoeyAwOyB9KQorI2RlZmluZSBhdWRpdF9tcV90aW1lZHNlbmQoZCxsLHAsdCkgKHsgMDsgfSkKKyNkZWZpbmUgYXVkaXRfbXFfdGltZWRyZWNlaXZlKGQsbCxwLHQpICh7IDA7IH0pCisjZGVmaW5lIGF1ZGl0X21xX25vdGlmeShkLG4pICh7IDA7IH0pCisjZGVmaW5lIGF1ZGl0X21xX2dldHNldGF0dHIoZCxzKSAoeyAwOyB9KQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVVESVQKQEAgLTM2NCw4ICs0MzIsMTEgQEAKIGV4dGVybiB2b2lkCQkgICAgYXVkaXRfbG9nX2hleChzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwKIAkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCiAJCQkJCSAgc2l6ZV90IGxlbik7Ci1leHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsCitleHRlcm4gY29uc3QgY2hhciAqCSAgICBhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLAogCQkJCQkJICAgICAgY29uc3QgY2hhciAqc3RyaW5nKTsKK2V4dGVybiBjb25zdCBjaGFyICoJICAgIGF1ZGl0X2xvZ19uX3VudHJ1c3RlZHN0cmluZyhzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwKKwkJCQkJCQlzaXplX3QgbiwKKwkJCQkJCQljb25zdCBjaGFyICpzdHJpbmcpOwogZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9sb2dfZF9wYXRoKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC0zODMsOCArNDU0LDggQEAKICNkZWZpbmUgYXVkaXRfbG9nX2VuZChiKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfbG9nX2hleChhLGIsbCkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYSxzKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfbG9nX25fdW50cnVzdGVkc3RyaW5nKGEsbixzKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfbG9nX2RfcGF0aChiLHAsZCx2KSBkbyB7IDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYXVkaXRfcGFuaWMobSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZW5kaWYKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA1OWUxMjU5Li41ZDMyNzMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9CTEtERVZfSAogI2RlZmluZSBfTElOVVhfQkxLREVWX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa3BnLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3BnLmgKaW5kZXggYmU1ZDBmNC4uZmFmOGE0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtwZy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrcGcuaApAQCAtMjQsNiArMjQsNyBAQAogICoKICAqIEZvciB0b2RheSwgb25seSB0aGUgcGFydGl0aW9uIHN0dWZmIC0gYWViLCA5OTA1MTUKICAqLworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KIAogI2RlZmluZSBCTEtQRyAgICAgIF9JTygweDEyLDEwNSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCmluZGV4IGIzNGQzZTcuLmViMWE4NjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgQkxLVFJBQ0VfSAogI2RlZmluZSBCTEtUUkFDRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9yZWxheS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9ibG9ja2dyb3VwX2xvY2suaAppbmRleCAwMTM3ZWU1Li44NjA3MzEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxvY2tncm91cF9sb2NrLmgKQEAgLTYsNyArNiw2IEBACiAgKiBTaW1wbGUgaGFzaGVkIHNwaW5sb2NraW5nLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvY2FjaGUuaAppbmRleCBjYzRiM2FhLi40NTUyNTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jYWNoZS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfX0xJTlVYX0NBQ0hFX0gKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCiAjaWZuZGVmIEwxX0NBQ0hFX0FMSUdOCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvZGEuaCBiL2luY2x1ZGUvbGludXgvY29kYS5oCmluZGV4IGJiYzVhZmMuLmI1Y2YwNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29kYS5oCisrKyBiL2luY2x1ZGUvbGludXgvY29kYS5oCkBAIC01OSw3ICs1OSw2IEBACiAjaWZuZGVmIF9DT0RBX0hFQURFUl8KICNkZWZpbmUgX0NPREFfSEVBREVSXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIENhdGNoIG5ldyBfS0VSTkVMIGRlZm4gZm9yIE5ldEJTRCBhbmQgREpHUFAvX19DWUdXSU4zMl9fICovCiAjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaAppbmRleCA2ZDNhNjU0Li5kZGExNjk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKQEAgLTQsNyArNCw2IEBACiAgKiBUaGVzZSBhcmUgdGhlIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMKICAqIHN5c2NhbGwgY29tcGF0aWJpbGl0eSBsYXllci4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKaW5kZXggZjIzZDNjNi4uOWI0ZjExMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtNzgsNiArNzgsNyBAQAogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKKyNpZmRlZiBfX0tFUk5FTF9fCiAvKgogICogQWxsb3cgdXMgdG8gbWFyayBmdW5jdGlvbnMgYXMgJ2RlcHJlY2F0ZWQnIGFuZCBoYXZlIGdjYyBlbWl0IGEgbmljZQogICogd2FybmluZyBmb3IgZWFjaCB1c2UsIGluIGhvcGVzIG9mIHNwZWVkaW5nIHRoZSBmdW5jdGlvbnMgcmVtb3ZhbC4KQEAgLTEyNyw2ICsxMjgsMTYgQEAKICMgZGVmaW5lIF9fYXR0cmlidXRlX3B1cmVfXwkvKiB1bmltcGxlbWVudGVkICovCiAjZW5kaWYKIAorI2lmbmRlZiBub2lubGluZQorI2RlZmluZSBub2lubGluZQorI2VuZGlmCisKKyNpZm5kZWYgX19hbHdheXNfaW5saW5lCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZSBpbmxpbmUKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAvKgogICogRnJvbSB0aGUgR0NDIG1hbnVhbDoKICAqCkBAIC0xNDUsMTIgKzE1Niw0IEBACiAjIGRlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fCS8qIHVuaW1wbGVtZW50ZWQgKi8KICNlbmRpZgogCi0jaWZuZGVmIG5vaW5saW5lCi0jZGVmaW5lIG5vaW5saW5lCi0jZW5kaWYKLQotI2lmbmRlZiBfX2Fsd2F5c19pbmxpbmUKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lIGlubGluZQotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0xJTlVYX0NPTVBJTEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKaW5kZXggMTc4NjZkNy4uNWFhOTUwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNkZWZpbmUgX0xJTlVYX0NQVUZSRVFfSAogCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2NyYW1mc19mcy5oCmluZGV4IGE4OTQ4ZjMuLmE0MWYzODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcmFtZnNfZnMuaApAQCAtMSwxMyArMSw3IEBACiAjaWZuZGVmIF9fQ1JBTUZTX0gKICNkZWZpbmUgX19DUkFNRlNfSAogCi0jaWZuZGVmIF9fS0VSTkVMX18KLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Ci10eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQ1JBTUZTX01BR0lDCQkweDI4Y2QzZDQ1CS8qIHNvbWUgcmFuZG9tIG51bWJlciAqLwogI2RlZmluZSBDUkFNRlNfU0lHTkFUVVJFCSJDb21wcmVzc2VkIFJPTUZTIgpAQCAtMzMsOSArMjcsOSBAQAogICogUmVhc29uYWJseSB0ZXJzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5vZGUgZGF0YS4KICAqLwogc3RydWN0IGNyYW1mc19pbm9kZSB7Ci0JdTMyIG1vZGU6Q1JBTUZTX01PREVfV0lEVEgsIHVpZDpDUkFNRlNfVUlEX1dJRFRIOworCV9fdTMyIG1vZGU6Q1JBTUZTX01PREVfV0lEVEgsIHVpZDpDUkFNRlNfVUlEX1dJRFRIOwogCS8qIFNJWkUgZm9yIGRldmljZSBmaWxlcyBpcyBpX3JkZXYgKi8KLQl1MzIgc2l6ZTpDUkFNRlNfU0laRV9XSURUSCwgZ2lkOkNSQU1GU19HSURfV0lEVEg7CisJX191MzIgc2l6ZTpDUkFNRlNfU0laRV9XSURUSCwgZ2lkOkNSQU1GU19HSURfV0lEVEg7CiAJLyogTkFNRUxFTiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlIG5hbWUsIGRpdmlkZWQgYnkgNCBhbmQKICAgICAgICAgICAgcm91bmRlZCB1cC4gIChjcmFtZnMgZG9lc24ndCBzdXBwb3J0IGhhcmQgbGlua3MuKSAqLwogCS8qIE9GRlNFVDogRm9yIHN5bWxpbmtzIGFuZCBub24tZW1wdHkgcmVndWxhciBmaWxlcywgdGhpcwpAQCAtNDQsMjcgKzM4LDI3IEBACiAJICAgc2VlIFJFQURNRSkuICBGb3Igbm9uLWVtcHR5IGRpcmVjdG9yaWVzIGl0IGlzIHRoZSBvZmZzZXQKIAkgICAoZGl2aWRlZCBieSA0KSBvZiB0aGUgaW5vZGUgb2YgdGhlIGZpcnN0IGZpbGUgaW4gdGhhdAogCSAgIGRpcmVjdG9yeS4gIEZvciBhbnl0aGluZyBlbHNlLCBvZmZzZXQgaXMgemVyby4gKi8KLQl1MzIgbmFtZWxlbjpDUkFNRlNfTkFNRUxFTl9XSURUSCwgb2Zmc2V0OkNSQU1GU19PRkZTRVRfV0lEVEg7CisJX191MzIgbmFtZWxlbjpDUkFNRlNfTkFNRUxFTl9XSURUSCwgb2Zmc2V0OkNSQU1GU19PRkZTRVRfV0lEVEg7CiB9OwogCiBzdHJ1Y3QgY3JhbWZzX2luZm8gewotCXUzMiBjcmM7Ci0JdTMyIGVkaXRpb247Ci0JdTMyIGJsb2NrczsKLQl1MzIgZmlsZXM7CisJX191MzIgY3JjOworCV9fdTMyIGVkaXRpb247CisJX191MzIgYmxvY2tzOworCV9fdTMyIGZpbGVzOwogfTsKIAogLyoKICAqIFN1cGVyYmxvY2sgaW5mb3JtYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgRlMuCiAgKi8KIHN0cnVjdCBjcmFtZnNfc3VwZXIgewotCXUzMiBtYWdpYzsJCQkvKiAweDI4Y2QzZDQ1IC0gcmFuZG9tIG51bWJlciAqLwotCXUzMiBzaXplOwkJCS8qIGxlbmd0aCBpbiBieXRlcyAqLwotCXUzMiBmbGFnczsJCQkvKiBmZWF0dXJlIGZsYWdzICovCi0JdTMyIGZ1dHVyZTsJCQkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwotCXU4IHNpZ25hdHVyZVsxNl07CQkvKiAiQ29tcHJlc3NlZCBST01GUyIgKi8KKwlfX3UzMiBtYWdpYzsJCQkvKiAweDI4Y2QzZDQ1IC0gcmFuZG9tIG51bWJlciAqLworCV9fdTMyIHNpemU7CQkJLyogbGVuZ3RoIGluIGJ5dGVzICovCisJX191MzIgZmxhZ3M7CQkJLyogZmVhdHVyZSBmbGFncyAqLworCV9fdTMyIGZ1dHVyZTsJCQkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCV9fdTggc2lnbmF0dXJlWzE2XTsJCS8qICJDb21wcmVzc2VkIFJPTUZTIiAqLwogCXN0cnVjdCBjcmFtZnNfaW5mbyBmc2lkOwkvKiB1bmlxdWUgZmlsZXN5c3RlbSBpbmZvICovCi0JdTggbmFtZVsxNl07CQkJLyogdXNlci1kZWZpbmVkIG5hbWUgKi8KKwlfX3U4IG5hbWVbMTZdOwkJCS8qIHVzZXItZGVmaW5lZCBuYW1lICovCiAJc3RydWN0IGNyYW1mc19pbm9kZSByb290OwkvKiByb290IGlub2RlIGRhdGEgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3J5cHRvLmggYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCmluZGV4IDBhYjFiYzEuLjVhMDQ3MGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfTElOVVhfQ1JZUFRPX0gKICNkZWZpbmUgX0xJTlVYX0NSWVBUT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWNsb214LmggYi9pbmNsdWRlL2xpbnV4L2N5Y2xvbXguaAppbmRleCAzMDBkNzA0Li5iODhmN2Y0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2N5Y2xvbXguaAorKysgYi9pbmNsdWRlL2xpbnV4L2N5Y2xvbXguaApAQCAtMjQsNyArMjQsNiBAQAogKiAxOTk4LzA4LzA4CWFjbWUJCVZlcnNpb24gMC4wLjEKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Rjb29raWVzLmggYi9pbmNsdWRlL2xpbnV4L2Rjb29raWVzLmgKaW5kZXggMWQ2ODQyOC4uMGZlN2NkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY29va2llcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNvb2tpZXMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgRENPT0tJRVNfSAogI2RlZmluZSBEQ09PS0lFU19ICiAgCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUFJPRklMSU5HCiAgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmZzX2ZzX2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9kZXZmc19mc19rZXJuZWwuaAppbmRleCA4OTgxMGU3Li4wZDc0YTZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmZzX2ZzX2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2ZnNfZnNfa2VybmVsLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9MSU5VWF9ERVZGU19GU19LRVJORUxfSAogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGU4ZTUzYjkuLmIyZTVkYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfREVWSUNFX0hfCiAjZGVmaW5lIF9ERVZJQ0VfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9rbGlzdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kaXZlcnQuaCBiL2luY2x1ZGUvbGludXgvZGl2ZXJ0LmgKaW5kZXggNjkxOWIwOS4uOGZiNGU5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kaXZlcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RpdmVydC5oCkBAIC0yNywxMCArMjcsMTAgQEAKIHsKIAlpbnQJCWRpdmVydDsgIC8qIGFyZSB3ZSBhY3RpdmUgKi8KIAl1bnNpZ25lZCBpbnQgcHJvdG9zOwkvKiBwcm90b2NvbHMgKi8KLQl1MTYJCXRjcF9kc3RbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHRjcCBkc3QgcG9ydHMgdG8gZGl2ZXJ0ICovCi0JdTE2CQl0Y3Bfc3JjW01BWF9ESVZFUlRfUE9SVFNdOyAvKiBzcGVjaWZpYyB0Y3Agc3JjIHBvcnRzIHRvIGRpdmVydCAqLwotCXUxNgkJdWRwX2RzdFtNQVhfRElWRVJUX1BPUlRTXTsgLyogc3BlY2lmaWMgdWRwIGRzdCBwb3J0cyB0byBkaXZlcnQgKi8KLQl1MTYJCXVkcF9zcmNbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHVkcCBzcmMgcG9ydHMgdG8gZGl2ZXJ0ICovCisJX191MTYJCXRjcF9kc3RbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHRjcCBkc3QgcG9ydHMgdG8gZGl2ZXJ0ICovCisJX191MTYJCXRjcF9zcmNbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHRjcCBzcmMgcG9ydHMgdG8gZGl2ZXJ0ICovCisJX191MTYJCXVkcF9kc3RbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHVkcCBkc3QgcG9ydHMgdG8gZGl2ZXJ0ICovCisJX191MTYJCXVkcF9zcmNbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHVkcCBzcmMgcG9ydHMgdG8gZGl2ZXJ0ICovCiB9OwogCiAvKgpAQCAtNDAsMTIgKzQwLDEyIEBACiAKIHR5cGVkZWYgdW5pb24gX2RpdmVydF9jZl9hcmcKIHsKLQlzMTYJCWludDE2OwotCXUxNgkJdWludDE2OwotCXMzMgkJaW50MzI7Ci0JdTMyCQl1aW50MzI7Ci0JczY0CQlpbnQ2NDsKLQl1NjQJCXVpbnQ2NDsKKwlfX3MxNgkJaW50MTY7CisJX191MTYJCXVpbnQxNjsKKwlfX3MzMgkJaW50MzI7CisJX191MzIJCXVpbnQzMjsKKwlfX3M2NAkJaW50NjQ7CisJX191NjQJCXVpbnQ2NDsKIAl2b2lkCV9fdXNlciAqcHRyOwogfSBkaXZlcnRfY2ZfYXJnOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtaS5oIGIvaW5jbHVkZS9saW51eC9kbWkuaAppbmRleCA2NGZkNmMzLi5iMmNkMjA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1pLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9fRE1JX0hfXwogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBlbnVtIGRtaV9maWVsZCB7CiAJRE1JX05PTkUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Rub3RpZnkuaCBiL2luY2x1ZGUvbGludXgvZG5vdGlmeS5oCmluZGV4IGYxMzRhMDEuLjEwMmE5MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG5vdGlmeS5oCisrKyBiL2luY2x1ZGUvbGludXgvZG5vdGlmeS5oCkBAIC0xOCw3ICsxOCw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19ETk9USUZZCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmLWVtLmggYi9pbmNsdWRlL2xpbnV4L2VsZi1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNGE5NmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZi1lbS5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgX0xJTlVYX0VMRl9FTV9ICisjZGVmaW5lIF9MSU5VWF9FTEZfRU1fSAorCisvKiBUaGVzZSBjb25zdGFudHMgZGVmaW5lIHRoZSB2YXJpb3VzIEVMRiB0YXJnZXQgbWFjaGluZXMgKi8KKyNkZWZpbmUgRU1fTk9ORQkJMAorI2RlZmluZSBFTV9NMzIJCTEKKyNkZWZpbmUgRU1fU1BBUkMJMgorI2RlZmluZSBFTV8zODYJCTMKKyNkZWZpbmUgRU1fNjhLCQk0CisjZGVmaW5lIEVNXzg4SwkJNQorI2RlZmluZSBFTV80ODYJCTYJLyogUGVyaGFwcyBkaXN1c2VkICovCisjZGVmaW5lIEVNXzg2MAkJNworI2RlZmluZSBFTV9NSVBTCQk4CS8qIE1JUFMgUjMwMDAgKG9mZmljaWFsbHksIGJpZy1lbmRpYW4gb25seSkgKi8KKyNkZWZpbmUgRU1fTUlQU19SUzRfQkUJMTAJLyogTUlQUyBSNDAwMCBiaWctZW5kaWFuICovCisjZGVmaW5lIEVNX1BBUklTQwkxNQkvKiBIUFBBICovCisjZGVmaW5lIEVNX1NQQVJDMzJQTFVTCTE4CS8qIFN1bidzICJ2OHBsdXMiICovCisjZGVmaW5lIEVNX1BQQwkJMjAJLyogUG93ZXJQQyAqLworI2RlZmluZSBFTV9QUEM2NAkyMSAgICAgICAvKiBQb3dlclBDNjQgKi8KKyNkZWZpbmUgRU1fU0gJCTQyCS8qIFN1cGVySCAqLworI2RlZmluZSBFTV9TUEFSQ1Y5CTQzCS8qIFNQQVJDIHY5IDY0LWJpdCAqLworI2RlZmluZSBFTV9JQV82NAk1MAkvKiBIUC9JbnRlbCBJQS02NCAqLworI2RlZmluZSBFTV9YODZfNjQJNjIJLyogQU1EIHg4Ni02NCAqLworI2RlZmluZSBFTV9TMzkwCQkyMgkvKiBJQk0gUy8zOTAgKi8KKyNkZWZpbmUgRU1fQ1JJUwkJNzYJLyogQXhpcyBDb21tdW5pY2F0aW9ucyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCisjZGVmaW5lIEVNX1Y4NTAJCTg3CS8qIE5FQyB2ODUwICovCisjZGVmaW5lIEVNX00zMlIJCTg4CS8qIFJlbmVzYXMgTTMyUiAqLworI2RlZmluZSBFTV9IOF8zMDAJNDYJLyogUmVuZXNhcyBIOC8zMDAsMzAwSCxIOFMgKi8KKyNkZWZpbmUgRU1fRlJWCQkweDU0NDEJLyogRnVqaXRzdSBGUi1WICovCisKKy8qCisgKiBUaGlzIGlzIGFuIGludGVyaW0gdmFsdWUgdGhhdCB3ZSB3aWxsIHVzZSB1bnRpbCB0aGUgY29tbWl0dGVlIGNvbWVzCisgKiB1cCB3aXRoIGEgZmluYWwgbnVtYmVyLgorICovCisjZGVmaW5lIEVNX0FMUEhBCTB4OTAyNgorCisvKiBCb2d1cyBvbGQgdjg1MCBtYWdpYyBudW1iZXIsIHVzZWQgYnkgb2xkIHRvb2xzLiAqLworI2RlZmluZSBFTV9DWUdOVVNfVjg1MAkweDkwODAKKy8qIEJvZ3VzIG9sZCBtMzJyIG1hZ2ljIG51bWJlciwgdXNlZCBieSBvbGQgdG9vbHMuICovCisjZGVmaW5lIEVNX0NZR05VU19NMzJSCTB4OTA0MQorLyogVGhpcyBpcyB0aGUgb2xkIGludGVyaW0gdmFsdWUgZm9yIFMvMzkwIGFyY2hpdGVjdHVyZSAqLworI2RlZmluZSBFTV9TMzkwX09MRAkweEEzOTAKKworCisjZW5kaWYgLyogX0xJTlVYX0VMRl9FTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZi5oIGIvaW5jbHVkZS9saW51eC9lbGYuaAppbmRleCBkM2JmYWNiLi5iNzBkMWQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VsZi5oCisrKyBiL2luY2x1ZGUvbGludXgvZWxmLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2F1eHZlYy5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi1lbS5oPgogI2luY2x1ZGUgPGFzbS9lbGYuaD4KIAogI2lmbmRlZiBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMKQEAgLTU1LDY0ICs1Niw2IEBACiAjZGVmaW5lIEVUX0xPUFJPQyAweGZmMDAKICNkZWZpbmUgRVRfSElQUk9DIDB4ZmZmZgogCi0vKiBUaGVzZSBjb25zdGFudHMgZGVmaW5lIHRoZSB2YXJpb3VzIEVMRiB0YXJnZXQgbWFjaGluZXMgKi8KLSNkZWZpbmUgRU1fTk9ORSAgMAotI2RlZmluZSBFTV9NMzIgICAxCi0jZGVmaW5lIEVNX1NQQVJDIDIKLSNkZWZpbmUgRU1fMzg2ICAgMwotI2RlZmluZSBFTV82OEsgICA0Ci0jZGVmaW5lIEVNXzg4SyAgIDUKLSNkZWZpbmUgRU1fNDg2ICAgNiAgIC8qIFBlcmhhcHMgZGlzdXNlZCAqLwotI2RlZmluZSBFTV84NjAgICA3Ci0KLSNkZWZpbmUgRU1fTUlQUwkJOAkvKiBNSVBTIFIzMDAwIChvZmZpY2lhbGx5LCBiaWctZW5kaWFuIG9ubHkpICovCi0KLSNkZWZpbmUgRU1fTUlQU19SUzRfQkUgMTAJLyogTUlQUyBSNDAwMCBiaWctZW5kaWFuICovCi0KLSNkZWZpbmUgRU1fUEFSSVNDICAgICAgMTUJLyogSFBQQSAqLwotCi0jZGVmaW5lIEVNX1NQQVJDMzJQTFVTIDE4CS8qIFN1bidzICJ2OHBsdXMiICovCi0KLSNkZWZpbmUgRU1fUFBDCSAgICAgICAyMAkvKiBQb3dlclBDICovCi0jZGVmaW5lIEVNX1BQQzY0ICAgICAgIDIxICAgICAgIC8qIFBvd2VyUEM2NCAqLwotCi0jZGVmaW5lIEVNX1NICSAgICAgICA0MgkvKiBTdXBlckggKi8KLQotI2RlZmluZSBFTV9TUEFSQ1Y5ICAgICA0MwkvKiBTUEFSQyB2OSA2NC1iaXQgKi8KLQotI2RlZmluZSBFTV9JQV82NAk1MAkvKiBIUC9JbnRlbCBJQS02NCAqLwotCi0jZGVmaW5lIEVNX1g4Nl82NAk2MgkvKiBBTUQgeDg2LTY0ICovCi0KLSNkZWZpbmUgRU1fUzM5MAkJMjIJLyogSUJNIFMvMzkwICovCi0KLSNkZWZpbmUgRU1fQ1JJUyAgICAgICAgIDc2ICAgICAgLyogQXhpcyBDb21tdW5pY2F0aW9ucyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCi0KLSNkZWZpbmUgRU1fVjg1MAkJODcJLyogTkVDIHY4NTAgKi8KLQotI2RlZmluZSBFTV9NMzJSCQk4OAkvKiBSZW5lc2FzIE0zMlIgKi8KLQotI2RlZmluZSBFTV9IOF8zMDAgICAgICAgNDYgICAgICAvKiBSZW5lc2FzIEg4LzMwMCwzMDBILEg4UyAqLwotCi0vKgotICogVGhpcyBpcyBhbiBpbnRlcmltIHZhbHVlIHRoYXQgd2Ugd2lsbCB1c2UgdW50aWwgdGhlIGNvbW1pdHRlZSBjb21lcwotICogdXAgd2l0aCBhIGZpbmFsIG51bWJlci4KLSAqLwotI2RlZmluZSBFTV9BTFBIQQkweDkwMjYKLQotLyogQm9ndXMgb2xkIHY4NTAgbWFnaWMgbnVtYmVyLCB1c2VkIGJ5IG9sZCB0b29scy4gICovCi0jZGVmaW5lIEVNX0NZR05VU19WODUwCTB4OTA4MAotCi0vKiBCb2d1cyBvbGQgbTMyciBtYWdpYyBudW1iZXIsIHVzZWQgYnkgb2xkIHRvb2xzLiAgKi8KLSNkZWZpbmUgRU1fQ1lHTlVTX00zMlIJMHg5MDQxCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBvbGQgaW50ZXJpbSB2YWx1ZSBmb3IgUy8zOTAgYXJjaGl0ZWN0dXJlCi0gKi8KLSNkZWZpbmUgRU1fUzM5MF9PTEQgICAgIDB4QTM5MAotCi0jZGVmaW5lIEVNX0ZSVgkJMHg1NDQxCQkvKiBGdWppdHN1IEZSLVYgKi8KLQogLyogVGhpcyBpcyB0aGUgaW5mbyB0aGF0IGlzIG5lZWRlZCB0byBwYXJzZSB0aGUgZHluYW1pYyBzZWN0aW9uIG9mIHRoZSBmaWxlICovCiAjZGVmaW5lIERUX05VTEwJCTAKICNkZWZpbmUgRFRfTkVFREVECTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXJycXVldWUuaCBiL2luY2x1ZGUvbGludXgvZXJycXVldWUuaAppbmRleCAxNzQ1ODJmLi40MDgxMThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCA5MzUzNWYwLi5jZjJhYmVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtMTUsMjQgKzE1LDI0IEBACiAKIC8qIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGJvdGggMzIgYW5kIDY0IGJpdCB1c2VybGFuZC4gKi8KIHN0cnVjdCBldGh0b29sX2NtZCB7Ci0JdTMyCWNtZDsKLQl1MzIJc3VwcG9ydGVkOwkvKiBGZWF0dXJlcyB0aGlzIGludGVyZmFjZSBzdXBwb3J0cyAqLwotCXUzMglhZHZlcnRpc2luZzsJLyogRmVhdHVyZXMgdGhpcyBpbnRlcmZhY2UgYWR2ZXJ0aXNlcyAqLwotCXUxNglzcGVlZDsJCS8qIFRoZSBmb3JjZWQgc3BlZWQsIDEwTWIsIDEwME1iLCBnaWdhYml0ICovCi0JdTgJZHVwbGV4OwkJLyogRHVwbGV4LCBoYWxmIG9yIGZ1bGwgKi8KLQl1OAlwb3J0OwkJLyogV2hpY2ggY29ubmVjdG9yIHBvcnQgKi8KLQl1OAlwaHlfYWRkcmVzczsKLQl1OAl0cmFuc2NlaXZlcjsJLyogV2hpY2ggdHJhbnNjZWl2ZXIgdG8gdXNlICovCi0JdTgJYXV0b25lZzsJLyogRW5hYmxlIG9yIGRpc2FibGUgYXV0b25lZ290aWF0aW9uICovCi0JdTMyCW1heHR4cGt0OwkvKiBUeCBwa3RzIGJlZm9yZSBnZW5lcmF0aW5nIHR4IGludCAqLwotCXUzMgltYXhyeHBrdDsJLyogUnggcGt0cyBiZWZvcmUgZ2VuZXJhdGluZyByeCBpbnQgKi8KLQl1MzIJcmVzZXJ2ZWRbNF07CisJX191MzIJY21kOworCV9fdTMyCXN1cHBvcnRlZDsJLyogRmVhdHVyZXMgdGhpcyBpbnRlcmZhY2Ugc3VwcG9ydHMgKi8KKwlfX3UzMglhZHZlcnRpc2luZzsJLyogRmVhdHVyZXMgdGhpcyBpbnRlcmZhY2UgYWR2ZXJ0aXNlcyAqLworCV9fdTE2CXNwZWVkOwkJLyogVGhlIGZvcmNlZCBzcGVlZCwgMTBNYiwgMTAwTWIsIGdpZ2FiaXQgKi8KKwlfX3U4CWR1cGxleDsJCS8qIER1cGxleCwgaGFsZiBvciBmdWxsICovCisJX191OAlwb3J0OwkJLyogV2hpY2ggY29ubmVjdG9yIHBvcnQgKi8KKwlfX3U4CXBoeV9hZGRyZXNzOworCV9fdTgJdHJhbnNjZWl2ZXI7CS8qIFdoaWNoIHRyYW5zY2VpdmVyIHRvIHVzZSAqLworCV9fdTgJYXV0b25lZzsJLyogRW5hYmxlIG9yIGRpc2FibGUgYXV0b25lZ290aWF0aW9uICovCisJX191MzIJbWF4dHhwa3Q7CS8qIFR4IHBrdHMgYmVmb3JlIGdlbmVyYXRpbmcgdHggaW50ICovCisJX191MzIJbWF4cnhwa3Q7CS8qIFJ4IHBrdHMgYmVmb3JlIGdlbmVyYXRpbmcgcnggaW50ICovCisJX191MzIJcmVzZXJ2ZWRbNF07CiB9OwogCiAjZGVmaW5lIEVUSFRPT0xfQlVTSU5GT19MRU4JMzIKIC8qIHRoZXNlIHN0cmluZ3MgYXJlIHNldCB0byB3aGF0ZXZlciB0aGUgZHJpdmVyIGF1dGhvciBkZWNpZGVzLi4uICovCiBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIHsKLQl1MzIJY21kOworCV9fdTMyCWNtZDsKIAljaGFyCWRyaXZlclszMl07CS8qIGRyaXZlciBzaG9ydCBuYW1lLCAidHVsaXAiLCAiZWVwcm8xMDAiICovCiAJY2hhcgl2ZXJzaW9uWzMyXTsJLyogZHJpdmVyIHZlcnNpb24gc3RyaW5nICovCiAJY2hhcglmd192ZXJzaW9uWzMyXTsJLyogZmlybXdhcmUgdmVyc2lvbiBzdHJpbmcsIGlmIGFwcGxpY2FibGUgKi8KQEAgLTQwLDUzICs0MCw1MyBAQAogCQkJCS8qIEZvciBQQ0kgZGV2aWNlcywgdXNlIHBjaV9uYW1lKHBjaV9kZXYpLiAqLwogCWNoYXIJcmVzZXJ2ZWQxWzMyXTsKIAljaGFyCXJlc2VydmVkMlsxNl07Ci0JdTMyCW5fc3RhdHM7CS8qIG51bWJlciBvZiB1NjQncyBmcm9tIEVUSFRPT0xfR1NUQVRTICovCi0JdTMyCXRlc3RpbmZvX2xlbjsKLQl1MzIJZWVkdW1wX2xlbjsJLyogU2l6ZSBvZiBkYXRhIGZyb20gRVRIVE9PTF9HRUVQUk9NIChieXRlcykgKi8KLQl1MzIJcmVnZHVtcF9sZW47CS8qIFNpemUgb2YgZGF0YSBmcm9tIEVUSFRPT0xfR1JFR1MgKGJ5dGVzKSAqLworCV9fdTMyCW5fc3RhdHM7CS8qIG51bWJlciBvZiB1NjQncyBmcm9tIEVUSFRPT0xfR1NUQVRTICovCisJX191MzIJdGVzdGluZm9fbGVuOworCV9fdTMyCWVlZHVtcF9sZW47CS8qIFNpemUgb2YgZGF0YSBmcm9tIEVUSFRPT0xfR0VFUFJPTSAoYnl0ZXMpICovCisJX191MzIJcmVnZHVtcF9sZW47CS8qIFNpemUgb2YgZGF0YSBmcm9tIEVUSFRPT0xfR1JFR1MgKGJ5dGVzKSAqLwogfTsKIAogI2RlZmluZSBTT1BBU1NfTUFYCTYKIC8qIHdha2Utb24tbGFuIHNldHRpbmdzICovCiBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvIHsKLQl1MzIJY21kOwotCXUzMglzdXBwb3J0ZWQ7Ci0JdTMyCXdvbG9wdHM7Ci0JdTgJc29wYXNzW1NPUEFTU19NQVhdOyAvKiBTZWN1cmVPbih0bSkgcGFzc3dvcmQgKi8KKwlfX3UzMgljbWQ7CisJX191MzIJc3VwcG9ydGVkOworCV9fdTMyCXdvbG9wdHM7CisJX191OAlzb3Bhc3NbU09QQVNTX01BWF07IC8qIFNlY3VyZU9uKHRtKSBwYXNzd29yZCAqLwogfTsKIAogLyogZm9yIHBhc3Npbmcgc2luZ2xlIHZhbHVlcyAqLwogc3RydWN0IGV0aHRvb2xfdmFsdWUgewotCXUzMgljbWQ7Ci0JdTMyCWRhdGE7CisJX191MzIJY21kOworCV9fdTMyCWRhdGE7CiB9OwogCiAvKiBmb3IgcGFzc2luZyBiaWcgY2h1bmtzIG9mIGRhdGEgKi8KIHN0cnVjdCBldGh0b29sX3JlZ3MgewotCXUzMgljbWQ7Ci0JdTMyCXZlcnNpb247IC8qIGRyaXZlci1zcGVjaWZpYywgaW5kaWNhdGVzIGRpZmZlcmVudCBjaGlwcy9yZXZzICovCi0JdTMyCWxlbjsgLyogYnl0ZXMgKi8KLQl1OAlkYXRhWzBdOworCV9fdTMyCWNtZDsKKwlfX3UzMgl2ZXJzaW9uOyAvKiBkcml2ZXItc3BlY2lmaWMsIGluZGljYXRlcyBkaWZmZXJlbnQgY2hpcHMvcmV2cyAqLworCV9fdTMyCWxlbjsgLyogYnl0ZXMgKi8KKwlfX3U4CWRhdGFbMF07CiB9OwogCiAvKiBmb3IgcGFzc2luZyBFRVBST00gY2h1bmtzICovCiBzdHJ1Y3QgZXRodG9vbF9lZXByb20gewotCXUzMgljbWQ7Ci0JdTMyCW1hZ2ljOwotCXUzMglvZmZzZXQ7IC8qIGluIGJ5dGVzICovCi0JdTMyCWxlbjsgLyogaW4gYnl0ZXMgKi8KLQl1OAlkYXRhWzBdOworCV9fdTMyCWNtZDsKKwlfX3UzMgltYWdpYzsKKwlfX3UzMglvZmZzZXQ7IC8qIGluIGJ5dGVzICovCisJX191MzIJbGVuOyAvKiBpbiBieXRlcyAqLworCV9fdTgJZGF0YVswXTsKIH07CiAKIC8qIGZvciBjb25maWd1cmluZyBjb2FsZXNjaW5nIHBhcmFtZXRlcnMgb2YgY2hpcCAqLwogc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgewotCXUzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31DT0FMRVNDRSAqLworCV9fdTMyCWNtZDsJLyogRVRIVE9PTF97RyxTfUNPQUxFU0NFICovCiAKIAkvKiBIb3cgbWFueSB1c2VjcyB0byBkZWxheSBhbiBSWCBpbnRlcnJ1cHQgYWZ0ZXIKIAkgKiBhIHBhY2tldCBhcnJpdmVzLiAgSWYgMCwgb25seSByeF9tYXhfY29hbGVzY2VkX2ZyYW1lcwogCSAqIGlzIHVzZWQuCiAJICovCi0JdTMyCXJ4X2NvYWxlc2NlX3VzZWNzOworCV9fdTMyCXJ4X2NvYWxlc2NlX3VzZWNzOwogCiAJLyogSG93IG1hbnkgcGFja2V0cyB0byBkZWxheSBhbiBSWCBpbnRlcnJ1cHQgYWZ0ZXIKIAkgKiBhIHBhY2tldCBhcnJpdmVzLiAgSWYgMCwgb25seSByeF9jb2FsZXNjZV91c2VjcyBpcwpAQCAtOTQsMjEgKzk0LDIxIEBACiAJICogdG8gemVybyBhcyB0aGlzIHdvdWxkIGNhdXNlIFJYIGludGVycnVwdHMgdG8gbmV2ZXIgYmUKIAkgKiBnZW5lcmF0ZWQuCiAJICovCi0JdTMyCXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCV9fdTMyCXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOwogCiAJLyogU2FtZSBhcyBhYm92ZSB0d28gcGFyYW1ldGVycywgZXhjZXB0IHRoYXQgdGhlc2UgdmFsdWVzCiAJICogYXBwbHkgd2hpbGUgYW4gSVJRIGlzIGJlaW5nIHNlcnZpY2VkIGJ5IHRoZSBob3N0LiAgTm90CiAJICogYWxsIGNhcmRzIHN1cHBvcnQgdGhpcyBmZWF0dXJlIGFuZCB0aGUgdmFsdWVzIGFyZSBpZ25vcmVkCiAJICogaW4gdGhhdCBjYXNlLgogCSAqLwotCXUzMglyeF9jb2FsZXNjZV91c2Vjc19pcnE7Ci0JdTMyCXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKKwlfX3UzMglyeF9jb2FsZXNjZV91c2Vjc19pcnE7CisJX191MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxOwogCiAJLyogSG93IG1hbnkgdXNlY3MgdG8gZGVsYXkgYSBUWCBpbnRlcnJ1cHQgYWZ0ZXIKIAkgKiBhIHBhY2tldCBpcyBzZW50LiAgSWYgMCwgb25seSB0eF9tYXhfY29hbGVzY2VkX2ZyYW1lcwogCSAqIGlzIHVzZWQuCiAJICovCi0JdTMyCXR4X2NvYWxlc2NlX3VzZWNzOworCV9fdTMyCXR4X2NvYWxlc2NlX3VzZWNzOwogCiAJLyogSG93IG1hbnkgcGFja2V0cyB0byBkZWxheSBhIFRYIGludGVycnVwdCBhZnRlcgogCSAqIGEgcGFja2V0IGlzIHNlbnQuICBJZiAwLCBvbmx5IHR4X2NvYWxlc2NlX3VzZWNzIGlzCkBAIC0xMTYsMjIgKzExNiwyMiBAQAogCSAqIHRvIHplcm8gYXMgdGhpcyB3b3VsZCBjYXVzZSBUWCBpbnRlcnJ1cHRzIHRvIG5ldmVyIGJlCiAJICogZ2VuZXJhdGVkLgogCSAqLwotCXUzMgl0eF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKKwlfX3UzMgl0eF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKIAogCS8qIFNhbWUgYXMgYWJvdmUgdHdvIHBhcmFtZXRlcnMsIGV4Y2VwdCB0aGF0IHRoZXNlIHZhbHVlcwogCSAqIGFwcGx5IHdoaWxlIGFuIElSUSBpcyBiZWluZyBzZXJ2aWNlZCBieSB0aGUgaG9zdC4gIE5vdAogCSAqIGFsbCBjYXJkcyBzdXBwb3J0IHRoaXMgZmVhdHVyZSBhbmQgdGhlIHZhbHVlcyBhcmUgaWdub3JlZAogCSAqIGluIHRoYXQgY2FzZS4KIAkgKi8KLQl1MzIJdHhfY29hbGVzY2VfdXNlY3NfaXJxOwotCXUzMgl0eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CisJX191MzIJdHhfY29hbGVzY2VfdXNlY3NfaXJxOworCV9fdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKIAogCS8qIEhvdyBtYW55IHVzZWNzIHRvIGRlbGF5IGluLW1lbW9yeSBzdGF0aXN0aWNzCiAJICogYmxvY2sgdXBkYXRlcy4gIFNvbWUgZHJpdmVycyBkbyBub3QgaGF2ZSBhbiBpbi1tZW1vcnkKIAkgKiBzdGF0aXN0aWMgYmxvY2ssIGFuZCBpbiBzdWNoIGNhc2VzIHRoaXMgdmFsdWUgaXMgaWdub3JlZC4KIAkgKiBUaGlzIHZhbHVlIG11c3Qgbm90IGJlIHplcm8uCiAJICovCi0JdTMyCXN0YXRzX2Jsb2NrX2NvYWxlc2NlX3VzZWNzOworCV9fdTMyCXN0YXRzX2Jsb2NrX2NvYWxlc2NlX3VzZWNzOwogCiAJLyogQWRhcHRpdmUgUlgvVFggY29hbGVzY2luZyBpcyBhbiBhbGdvcml0aG0gaW1wbGVtZW50ZWQgYnkKIAkgKiBzb21lIGRyaXZlcnMgdG8gaW1wcm92ZSBsYXRlbmN5IHVuZGVyIGxvdyBwYWNrZXQgcmF0ZXMgYW5kCkBAIC0xNDAsMTggKzE0MCwxOCBAQAogCSAqIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgZHJpdmVyIGNhdXNlcyB0aGVzZSB2YWx1ZXMgdG8gYmUKIAkgKiBzaWxlbnRseSBpZ25vcmVkLgogCSAqLwotCXUzMgl1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2U7Ci0JdTMyCXVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZTsKKwlfX3UzMgl1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2U7CisJX191MzIJdXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlOwogCiAJLyogV2hlbiB0aGUgcGFja2V0IHJhdGUgKG1lYXN1cmVkIGluIHBhY2tldHMgcGVyIHNlY29uZCkKIAkgKiBpcyBiZWxvdyBwa3RfcmF0ZV9sb3csIHRoZSB7cngsdHh9XypfbG93IHBhcmFtZXRlcnMgYXJlCiAJICogdXNlZC4KIAkgKi8KLQl1MzIJcGt0X3JhdGVfbG93OwotCXUzMglyeF9jb2FsZXNjZV91c2Vjc19sb3c7Ci0JdTMyCXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdzsKLQl1MzIJdHhfY29hbGVzY2VfdXNlY3NfbG93OwotCXUzMgl0eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3c7CisJX191MzIJcGt0X3JhdGVfbG93OworCV9fdTMyCXJ4X2NvYWxlc2NlX3VzZWNzX2xvdzsKKwlfX3UzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3c7CisJX191MzIJdHhfY29hbGVzY2VfdXNlY3NfbG93OworCV9fdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdzsKIAogCS8qIFdoZW4gdGhlIHBhY2tldCByYXRlIGlzIGJlbG93IHBrdF9yYXRlX2hpZ2ggYnV0IGFib3ZlCiAJICogcGt0X3JhdGVfbG93IChib3RoIG1lYXN1cmVkIGluIHBhY2tldHMgcGVyIHNlY29uZCkgdGhlCkBAIC0xNjIsNDMgKzE2Miw0MyBAQAogCSAqIGlzIGFib3ZlIHBrdF9yYXRlX2hpZ2gsIHRoZSB7cngsdHh9XypfaGlnaCBwYXJhbWV0ZXJzIGFyZQogCSAqIHVzZWQuCiAJICovCi0JdTMyCXBrdF9yYXRlX2hpZ2g7Ci0JdTMyCXJ4X2NvYWxlc2NlX3VzZWNzX2hpZ2g7Ci0JdTMyCXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2g7Ci0JdTMyCXR4X2NvYWxlc2NlX3VzZWNzX2hpZ2g7Ci0JdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2g7CisJX191MzIJcGt0X3JhdGVfaGlnaDsKKwlfX3UzMglyeF9jb2FsZXNjZV91c2Vjc19oaWdoOworCV9fdTMyCXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2g7CisJX191MzIJdHhfY29hbGVzY2VfdXNlY3NfaGlnaDsKKwlfX3UzMgl0eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoOwogCiAJLyogSG93IG9mdGVuIHRvIGRvIGFkYXB0aXZlIGNvYWxlc2NpbmcgcGFja2V0IHJhdGUgc2FtcGxpbmcsCiAJICogbWVhc3VyZWQgaW4gc2Vjb25kcy4gIE11c3Qgbm90IGJlIHplcm8uCiAJICovCi0JdTMyCXJhdGVfc2FtcGxlX2ludGVydmFsOworCV9fdTMyCXJhdGVfc2FtcGxlX2ludGVydmFsOwogfTsKIAogLyogZm9yIGNvbmZpZ3VyaW5nIFJYL1RYIHJpbmcgcGFyYW1ldGVycyAqLwogc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtIHsKLQl1MzIJY21kOwkvKiBFVEhUT09MX3tHLFN9UklOR1BBUkFNICovCisJX191MzIJY21kOwkvKiBFVEhUT09MX3tHLFN9UklOR1BBUkFNICovCiAKIAkvKiBSZWFkIG9ubHkgYXR0cmlidXRlcy4gIFRoZXNlIGluZGljYXRlIHRoZSBtYXhpbXVtIG51bWJlcgogCSAqIG9mIHBlbmRpbmcgUlgvVFggcmluZyBlbnRyaWVzIHRoZSBkcml2ZXIgd2lsbCBhbGxvdyB0aGUKIAkgKiB1c2VyIHRvIHNldC4KIAkgKi8KLQl1MzIJcnhfbWF4X3BlbmRpbmc7Ci0JdTMyCXJ4X21pbmlfbWF4X3BlbmRpbmc7Ci0JdTMyCXJ4X2p1bWJvX21heF9wZW5kaW5nOwotCXUzMgl0eF9tYXhfcGVuZGluZzsKKwlfX3UzMglyeF9tYXhfcGVuZGluZzsKKwlfX3UzMglyeF9taW5pX21heF9wZW5kaW5nOworCV9fdTMyCXJ4X2p1bWJvX21heF9wZW5kaW5nOworCV9fdTMyCXR4X21heF9wZW5kaW5nOwogCiAJLyogVmFsdWVzIGNoYW5nZWFibGUgYnkgdGhlIHVzZXIuICBUaGUgdmFsaWQgdmFsdWVzIGFyZQogCSAqIGluIHRoZSByYW5nZSAxIHRvIHRoZSAiKl9tYXhfcGVuZGluZyIgY291bnRlcnBhcnQgYWJvdmUuCiAJICovCi0JdTMyCXJ4X3BlbmRpbmc7Ci0JdTMyCXJ4X21pbmlfcGVuZGluZzsKLQl1MzIJcnhfanVtYm9fcGVuZGluZzsKLQl1MzIJdHhfcGVuZGluZzsKKwlfX3UzMglyeF9wZW5kaW5nOworCV9fdTMyCXJ4X21pbmlfcGVuZGluZzsKKwlfX3UzMglyeF9qdW1ib19wZW5kaW5nOworCV9fdTMyCXR4X3BlbmRpbmc7CiB9OwogCiAvKiBmb3IgY29uZmlndXJpbmcgbGluayBmbG93IGNvbnRyb2wgcGFyYW1ldGVycyAqLwogc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSB7Ci0JdTMyCWNtZDsJLyogRVRIVE9PTF97RyxTfVBBVVNFUEFSQU0gKi8KKwlfX3UzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31QQVVTRVBBUkFNICovCiAKIAkvKiBJZiB0aGUgbGluayBpcyBiZWluZyBhdXRvLW5lZ290aWF0ZWQgKHZpYSBldGh0b29sX2NtZC5hdXRvbmVnCiAJICogYmVpbmcgdHJ1ZSkgdGhlIHVzZXIgbWF5IHNldCAnYXV0b25ldCcgaGVyZSBub24temVybyB0byBoYXZlIHRoZQpAQCAtMjEwLDkgKzIxMCw5IEBACiAJICogdGhlbiB7cngsdHh9X3BhdXNlIGZvcmNlIHRoZSBkcml2ZXIgdG8gdXNlL25vdC11c2UgcGF1c2UKIAkgKiBmbG93IGNvbnRyb2wuCiAJICovCi0JdTMyCWF1dG9uZWc7Ci0JdTMyCXJ4X3BhdXNlOwotCXUzMgl0eF9wYXVzZTsKKwlfX3UzMglhdXRvbmVnOworCV9fdTMyCXJ4X3BhdXNlOworCV9fdTMyCXR4X3BhdXNlOwogfTsKIAogI2RlZmluZSBFVEhfR1NUUklOR19MRU4JCTMyCkBAIC0yMjMsMTAgKzIyMywxMCBAQAogCiAvKiBmb3IgcGFzc2luZyBzdHJpbmcgc2V0cyBmb3IgZGF0YSB0YWdnaW5nICovCiBzdHJ1Y3QgZXRodG9vbF9nc3RyaW5ncyB7Ci0JdTMyCWNtZDsJCS8qIEVUSFRPT0xfR1NUUklOR1MgKi8KLQl1MzIJc3RyaW5nX3NldDsJLyogc3RyaW5nIHNldCBpZCBlLmMuIEVUSF9TU19URVNULCBldGMqLwotCXUzMglsZW47CQkvKiBudW1iZXIgb2Ygc3RyaW5ncyBpbiB0aGUgc3RyaW5nIHNldCAqLwotCXU4CWRhdGFbMF07CisJX191MzIJY21kOwkJLyogRVRIVE9PTF9HU1RSSU5HUyAqLworCV9fdTMyCXN0cmluZ19zZXQ7CS8qIHN0cmluZyBzZXQgaWQgZS5jLiBFVEhfU1NfVEVTVCwgZXRjKi8KKwlfX3UzMglsZW47CQkvKiBudW1iZXIgb2Ygc3RyaW5ncyBpbiB0aGUgc3RyaW5nIHNldCAqLworCV9fdTgJZGF0YVswXTsKIH07CiAKIGVudW0gZXRodG9vbF90ZXN0X2ZsYWdzIHsKQEAgLTIzNiwyNiArMjM2LDI4IEBACiAKIC8qIGZvciByZXF1ZXN0aW5nIE5JQyB0ZXN0IGFuZCBnZXR0aW5nIHJlc3VsdHMqLwogc3RydWN0IGV0aHRvb2xfdGVzdCB7Ci0JdTMyCWNtZDsJCS8qIEVUSFRPT0xfVEVTVCAqLwotCXUzMglmbGFnczsJCS8qIEVUSF9URVNUX0ZMX3h4eCAqLwotCXUzMglyZXNlcnZlZDsKLQl1MzIJbGVuOwkJLyogcmVzdWx0IGxlbmd0aCwgaW4gbnVtYmVyIG9mIHU2NCBlbGVtZW50cyAqLwotCXU2NAlkYXRhWzBdOworCV9fdTMyCWNtZDsJCS8qIEVUSFRPT0xfVEVTVCAqLworCV9fdTMyCWZsYWdzOwkJLyogRVRIX1RFU1RfRkxfeHh4ICovCisJX191MzIJcmVzZXJ2ZWQ7CisJX191MzIJbGVuOwkJLyogcmVzdWx0IGxlbmd0aCwgaW4gbnVtYmVyIG9mIHU2NCBlbGVtZW50cyAqLworCV9fdTY0CWRhdGFbMF07CiB9OwogCiAvKiBmb3IgZHVtcGluZyBOSUMtc3BlY2lmaWMgc3RhdGlzdGljcyAqLwogc3RydWN0IGV0aHRvb2xfc3RhdHMgewotCXUzMgljbWQ7CQkvKiBFVEhUT09MX0dTVEFUUyAqLwotCXUzMgluX3N0YXRzOwkvKiBudW1iZXIgb2YgdTY0J3MgYmVpbmcgcmV0dXJuZWQgKi8KLQl1NjQJZGF0YVswXTsKKwlfX3UzMgljbWQ7CQkvKiBFVEhUT09MX0dTVEFUUyAqLworCV9fdTMyCW5fc3RhdHM7CS8qIG51bWJlciBvZiB1NjQncyBiZWluZyByZXR1cm5lZCAqLworCV9fdTY0CWRhdGFbMF07CiB9OwogCiBzdHJ1Y3QgZXRodG9vbF9wZXJtX2FkZHIgewotCXUzMgljbWQ7CQkvKiBFVEhUT09MX0dQRVJNQUREUiAqLwotCXUzMglzaXplOwotCXU4CWRhdGFbMF07CisJX191MzIJY21kOwkJLyogRVRIVE9PTF9HUEVSTUFERFIgKi8KKwlfX3UzMglzaXplOworCV9fdTgJZGF0YVswXTsKIH07CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIHN0cnVjdCBuZXRfZGV2aWNlOwogCiAvKiBTb21lIGdlbmVyaWMgbWV0aG9kcyBkcml2ZXJzIG1heSB1c2UgaW4gdGhlaXIgZXRodG9vbF9vcHMgKi8KQEAgLTM3MSw2ICszNzMsNyBAQAogCXUzMiAgICAgKCpnZXRfdWZvKShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAlpbnQgICAgICgqc2V0X3Vmbykoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyKTsKIH07CisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKiBDTURzIGN1cnJlbnRseSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgRVRIVE9PTF9HU0VUCQkweDAwMDAwMDAxIC8qIEdldCBzZXR0aW5ncy4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oIGIvaW5jbHVkZS9saW51eC9leHQyX2ZzLmgKaW5kZXggZjdiZDFjNy4uZmFjZjM0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQyX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQyX2ZzLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNkZWZpbmUgX0xJTlVYX0VYVDJfRlNfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9leHQyX2ZzX3NiLmg+CiAKIC8qCiAgKiBUaGUgc2Vjb25kIGV4dGVuZGVkIGZpbGVzeXN0ZW0gY29uc3RhbnRzL3N0cnVjdHVyZXMKQEAgLTcwLDYgKzY5LDcgQEAKICNkZWZpbmUgRVhUMl9TVVBFUl9NQUdJQwkweEVGNTMKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9leHQyX2ZzX3NiLmg+CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHQyX3NiX2luZm8gKkVYVDJfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKaW5kZXggM2FkZTZhNC4uNzU3ZDU0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKQEAgLTE3LDExICsxNyw2IEBACiAjZGVmaW5lIF9MSU5VWF9FWFQzX0ZTX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZXh0M19mc19pLmg+Ci0jaW5jbHVkZSA8bGludXgvZXh0M19mc19zYi5oPgotCi0KLXN0cnVjdCBzdGF0ZnM7CiAKIC8qCiAgKiBUaGUgc2Vjb25kIGV4dGVuZGVkIGZpbGVzeXN0ZW0gY29uc3RhbnRzL3N0cnVjdHVyZXMKQEAgLTQ4Nyw2ICs0ODIsOCBAQAogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9leHQzX2ZzX2kuaD4KKyNpbmNsdWRlIDxsaW51eC9leHQzX2ZzX3NiLmg+CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHQzX3NiX2luZm8gKiBFWFQzX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIHNiLT5zX2ZzX2luZm87CkBAIC02NjQsNiArNjYxLDggQEAKICNkZWZpbmUgRFhfSEFTSF9IQUxGX01ENAkxCiAjZGVmaW5lIERYX0hBU0hfVEVBCQkyCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIC8qIGhhc2ggaW5mbyBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgZGlyZWN0b3J5IGhhc2ggKi8KIHN0cnVjdCBkeF9oYXNoX2luZm8KIHsKQEAgLTY3NSw3ICs2NzQsNiBAQAogCiAjZGVmaW5lIEVYVDNfSFRSRUVfRU9GCTB4N2ZmZmZmZmYKIAotI2lmZGVmIF9fS0VSTkVMX18KIC8qCiAgKiBDb250cm9sIHBhcmFtZXRlcnMgdXNlZCBieSBleHQzX2h0cmVlX25leHRfYmxvY2sKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDFkODBiYTcuLjJkNWExMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTYsNyArNiw2IEBACiAgKiBzdHJ1Y3R1cmVzIGV0Yy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oIGIvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCmluZGV4IDExNDM4ZWYuLmNjNWRlYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKQEAgLTU0LDE5ICs1NCwyMCBAQAogCiAJaWYgKGlzZGlyKQogCQlpc2RpciA9IElOX0lTRElSOwotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQob2xkX2RpciwgSU5fTU9WRURfRlJPTXxpc2Rpcixjb29raWUsb2xkX25hbWUpOwotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQobmV3X2RpciwgSU5fTU9WRURfVE98aXNkaXIsIGNvb2tpZSwgbmV3X25hbWUpOworCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQob2xkX2RpciwgSU5fTU9WRURfRlJPTXxpc2Rpcixjb29raWUsb2xkX25hbWUsCisJCQkJICBzb3VyY2UpOworCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQobmV3X2RpciwgSU5fTU9WRURfVE98aXNkaXIsIGNvb2tpZSwgbmV3X25hbWUsCisJCQkJICBzb3VyY2UpOwogCiAJaWYgKHRhcmdldCkgewotCQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KHRhcmdldCwgSU5fREVMRVRFX1NFTEYsIDAsIE5VTEwpOworCQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KHRhcmdldCwgSU5fREVMRVRFX1NFTEYsIDAsIE5VTEwsIE5VTEwpOwogCQlpbm90aWZ5X2lub2RlX2lzX2RlYWQodGFyZ2V0KTsKIAl9CiAKIAlpZiAoc291cmNlKSB7Ci0JCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoc291cmNlLCBJTl9NT1ZFX1NFTEYsIDAsIE5VTEwpOworCQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KHNvdXJjZSwgSU5fTU9WRV9TRUxGLCAwLCBOVUxMLCBOVUxMKTsKIAl9Ci0JYXVkaXRfaW5vZGVfY2hpbGQob2xkX25hbWUsIHNvdXJjZSwgb2xkX2Rpci0+aV9pbm8pOwotCWF1ZGl0X2lub2RlX2NoaWxkKG5ld19uYW1lLCB0YXJnZXQsIG5ld19kaXItPmlfaW5vKTsKKwlhdWRpdF9pbm9kZV9jaGlsZChuZXdfbmFtZSwgc291cmNlLCBuZXdfZGlyLT5pX2lubyk7CiB9CiAKIC8qCkBAIC04NSw3ICs4Niw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBmc25vdGlmeV9pbm9kZXJlbW92ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIElOX0RFTEVURV9TRUxGLCAwLCBOVUxMKTsKKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBJTl9ERUxFVEVfU0VMRiwgMCwgTlVMTCwgTlVMTCk7CiAJaW5vdGlmeV9pbm9kZV9pc19kZWFkKGlub2RlKTsKIH0KIApAQCAtOTUsNyArOTYsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJaW5vZGVfZGlyX25vdGlmeShpbm9kZSwgRE5fQ1JFQVRFKTsKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBJTl9DUkVBVEUsIDAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIElOX0NSRUFURSwgMCwgZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkgIGRlbnRyeS0+ZF9pbm9kZSk7CiAJYXVkaXRfaW5vZGVfY2hpbGQoZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLCBpbm9kZS0+aV9pbm8pOwogfQogCkBAIC0xMDYsNyArMTA4LDcgQEAKIHsKIAlpbm9kZV9kaXJfbm90aWZ5KGlub2RlLCBETl9DUkVBVEUpOwogCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIElOX0NSRUFURSB8IElOX0lTRElSLCAwLCAKLQkJCQkgIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkJCSAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlKTsKIAlhdWRpdF9pbm9kZV9jaGlsZChkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfaW5vZGUsIGlub2RlLT5pX2lubyk7CiB9CiAKQEAgLTEyMyw3ICsxMjUsNyBAQAogCiAJZG5vdGlmeV9wYXJlbnQoZGVudHJ5LCBETl9BQ0NFU1MpOwogCWlub3RpZnlfZGVudHJ5X3BhcmVudF9xdWV1ZV9ldmVudChkZW50cnksIG1hc2ssIDAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwpOworCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwsIE5VTEwpOwogfQogCiAvKgpAQCAtMTM5LDcgKzE0MSw3IEBACiAKIAlkbm90aWZ5X3BhcmVudChkZW50cnksIEROX01PRElGWSk7CiAJaW5vdGlmeV9kZW50cnlfcGFyZW50X3F1ZXVlX2V2ZW50KGRlbnRyeSwgbWFzaywgMCwgZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCk7CisJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCwgTlVMTCk7CiB9CiAKIC8qCkBAIC0xNTQsNyArMTU2LDcgQEAKIAkJbWFzayB8PSBJTl9JU0RJUjsKIAogCWlub3RpZnlfZGVudHJ5X3BhcmVudF9xdWV1ZV9ldmVudChkZW50cnksIG1hc2ssIDAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwpOwkKKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMLCBOVUxMKTsKIH0KIAogLyoKQEAgLTE3Miw3ICsxNzQsNyBAQAogCQltYXNrIHw9IElOX0lTRElSOwogCiAJaW5vdGlmeV9kZW50cnlfcGFyZW50X3F1ZXVlX2V2ZW50KGRlbnRyeSwgbWFzaywgMCwgbmFtZSk7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCk7CisJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCwgTlVMTCk7CiB9CiAKIC8qCkBAIC0xODcsNyArMTg5LDcgQEAKIAkJbWFzayB8PSBJTl9JU0RJUjsKIAogCWlub3RpZnlfZGVudHJ5X3BhcmVudF9xdWV1ZV9ldmVudChkZW50cnksIG1hc2ssIDAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwpOworCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwsIE5VTEwpOwogfQogCiAvKgpAQCAtMjM0LDcgKzIzNiw3IEBACiAJaWYgKGluX21hc2spIHsKIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCQlpbl9tYXNrIHw9IElOX0lTRElSOwotCQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBpbl9tYXNrLCAwLCBOVUxMKTsKKwkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgaW5fbWFzaywgMCwgTlVMTCwgTlVMTCk7CiAJCWlub3RpZnlfZGVudHJ5X3BhcmVudF9xdWV1ZV9ldmVudChkZW50cnksIGluX21hc2ssIDAsCiAJCQkJCQkgIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRhcGUuaCBiL2luY2x1ZGUvbGludXgvZnRhcGUuaAppbmRleCA3MmZhZWVjLi43ZTcwMzhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0YXBlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdGFwZS5oCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbXRpby5oPgogCiAjZGVmaW5lIEZUX1NFQ1RPUih4KQkJKHgrMSkJLyogc2VjdG9yIG9mZnNldCBpbnRvIHJlYWwgc2VjdG9yICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmggYi9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKaW5kZXggNzFlN2IyOC4uMmNkYmEwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaApAQCAtOSw2ICs5LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTE1NCw2ICsxNTUsOCBAQAogCiB2b2lkIGdhbWVwb3J0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydik7CiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNkZWZpbmUgR0FNRVBPUlRfTU9ERV9ESVNBQkxFRAkJMAogI2RlZmluZSBHQU1FUE9SVF9NT0RFX1JBVwkJMQogI2RlZmluZSBHQU1FUE9SVF9NT0RFX0NPT0tFRAkJMgpAQCAtMTY5LDYgKzE3Miw4IEBACiAjZGVmaW5lIEdBTUVQT1JUX0lEX1ZFTkRPUl9HUkFWSVMJMHgwMDA5CiAjZGVmaW5lIEdBTUVQT1JUX0lEX1ZFTkRPUl9HVUlMTEVNT1QJMHgwMDBhCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBnYW1lcG9ydF90cmlnZ2VyKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCiB7CiAJaWYgKGdhbWVwb3J0LT50cmlnZ2VyKQpAQCAtMjE5LDQgKzIyNCw1IEBACiB2b2lkIGdhbWVwb3J0X3N0YXJ0X3BvbGxpbmcoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCk7CiB2b2lkIGdhbWVwb3J0X3N0b3BfcG9sbGluZyhzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KTsKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5lcmljX3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC9nZW5lcmljX3NlcmlhbC5oCmluZGV4IDY1MjYxMWEuLmUyNTM4NDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuZXJpY19zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNpZm5kZWYgR0VORVJJQ19TRVJJQUxfSAogI2RlZmluZSBHRU5FUklDX1NFUklBTF9ICiAKKyNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogc3RydWN0IHJlYWxfZHJpdmVyIHsKQEAgLTU0LDYgKzU1LDcgQEAKICAgc3BpbmxvY2tfdCAgICAgICAgICAgICAgZHJpdmVyX2xvY2s7CiB9OwogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKiBGbGFncyAqLwogLyogV2FybmluZzogc2VyaWFsLmggZGVmaW5lcyBzb21lIEFTWU5DXyBmbGFncywgdGhleSBzYXkgdGhleSBhcmUgIm9ubHkiCkBAIC03NSw3ICs3Nyw3IEBACiAjZGVmaW5lIEdTX0RFQlVHX0ZMT1cgICAgMHgwMDAwMDAyMAogI2RlZmluZSBHU19ERUJVR19XUklURSAgIDB4MDAwMDAwNDAKIAotCisjaWZkZWYgX19LRVJORUxfXwogdm9pZCBnc19wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKTsKIGludCAgZ3Nfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgCiAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwpAQCAtOTQsNSArOTYsNSBAQAogaW50ICBnc19zZXRzZXJpYWwoc3RydWN0IGdzX3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApOwogaW50ICBnc19nZXRzZXJpYWwoc3RydWN0IGdzX3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApOwogdm9pZCBnc19nb3RfYnJlYWsoc3RydWN0IGdzX3BvcnQgKnBvcnQpOwotCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmggYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKaW5kZXggMmVmODQ1Yi4uMzQ5OGEwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5oZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaApAQCAtOSwxMyArOSw3IEBACiAgKgkJPGRyZXdAY29sb3JhZG8uZWR1PgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KIAogZW51bSB7CiAvKiBUaGVzZSB0aHJlZSBoYXZlIGlkZW50aWNhbCBiZWhhdmlvdXI7IHVzZSB0aGUgc2Vjb25kIG9uZSBpZiBET1MgRkRJU0sgZ2V0cwpAQCAtNjEsNiArNTUsMTIgQEAKICNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKwogc3RydWN0IHBhcnRpdGlvbiB7CiAJdW5zaWduZWQgY2hhciBib290X2luZDsJCS8qIDB4ODAgLSBhY3RpdmUgKi8KIAl1bnNpZ25lZCBjaGFyIGhlYWQ7CQkvKiBzdGFydGluZyBoZWFkICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCAzYWM0NTI5Li5jYzllNjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGFyZGlycS5oIGIvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKaW5kZXggZWFiNTM3MC4uMTE0YWU1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIExJTlVYX0hBUkRJUlFfSAogI2RlZmluZSBMSU5VWF9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS9oYXJkaXJxLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCmluZGV4IDg5MmM0ZWEuLjg1Y2U3ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfSElHSE1FTV9ICiAjZGVmaW5lIF9MSU5VWF9ISUdITUVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWdodWlkLmggYi9pbmNsdWRlL2xpbnV4L2hpZ2h1aWQuaAppbmRleCA1M2VjYWMzLi40MzRlNTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZ2h1aWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZ2h1aWQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX0hJR0hVSURfSAogI2RlZmluZSBfTElOVVhfSElHSFVJRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmggYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAppbmRleCAzMDZhY2YxLi43ZDJhMWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaApAQCAtMTI3LDcgKzEyNyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfYWN0aXZlKGNvbnN0IHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKLQlyZXR1cm4gdGltZXItPm5vZGUucmJfcGFyZW50ICE9IEhSVElNRVJfSU5BQ1RJVkU7CisJcmV0dXJuIHJiX3BhcmVudCgmdGltZXItPm5vZGUpICE9ICZ0aW1lci0+bm9kZTsKIH0KIAogLyogRm9yd2FyZCBhIGhydGltZXIgc28gaXQgZXhwaXJlcyBhZnRlciBub3c6ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWl0ZS5oIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1pdGUuaAppbmRleCAyNmE4Yjg5Li4wMDczZmU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWl0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28taXRlLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgSTJDX0FMR09fSVRFX0gKICNkZWZpbmUgSTJDX0FMR09fSVRFX0ggMQogCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyogRXhhbXBsZSBvZiBhIHNlcXVlbnRpYWwgcmVhZCByZXF1ZXN0OgogCXN0cnVjdCBpMmNfaWljX21zZyBzX21zZzsgCkBAIC00OSw2ICs0OSw5IEBACiAJY2hhciAqYnVmOwkvKiBwb2ludGVyIHRvIG1zZyBkYXRhICovCiB9OwogCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IGkyY19hZGFwdGVyOworCiBzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgewogCXZvaWQgKmRhdGE7CQkvKiBwcml2YXRlIGRhdGEgZm9yIGxvbGV2ZWwgcm91dGluZXMJKi8KIAl2b2lkICgqc2V0aWljKSAodm9pZCAqZGF0YSwgaW50IGN0bCwgaW50IHZhbCk7CkBAIC02NSw1ICs2OCw1IEBACiAKIGludCBpMmNfaWljX2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICopOwogaW50IGkyY19paWNfZGVsX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7Ci0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogSTJDX0FMR09fSVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDE2MzVlZTIuLjA1MTA0MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtMjAsMTQgKzIwLDE1IEBACiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCQkgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZAorLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQKICAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4gKi8KIAogI2lmbmRlZiBfTElOVVhfSTJDX0gKICNkZWZpbmUgX0xJTlVYX0kyQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2lmZGVmIF9fS0VSTkVMX18gCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CS8qIGZvciBzdHJ1Y3QgZGV2aWNlICovCkBAIC0zNTQsNiArMzU1LDcgQEAKIHsKIAlyZXR1cm4gYWRhcC0+bnI7CiB9CisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKgogICogSTJDIE1lc3NhZ2UgLSB1c2VkIGZvciBwdXJlIGkyYyB0cmFuc2FjdGlvbiwgYWxzbyBmcm9tIC9kZXYgaW50ZXJmYWNlCkBAIC00NjksNiArNDcxLDcgQEAKICNkZWZpbmUgSTJDX1NNQlVTCTB4MDcyMAkvKiBTTUJ1cy1sZXZlbCBhY2Nlc3MgKi8KIAogLyogLS0tLS0gSTJDLURFVjogY2hhciBkZXZpY2UgaW50ZXJmYWNlIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZmRlZiBfX0tFUk5FTF9fCiAKICNkZWZpbmUgSTJDX01BSk9SCTg5CQkvKiBEZXZpY2UgbWFqb3IgbnVtYmVyCQkqLwogCkBAIC02NDYsNSArNjQ5LDUgQEAKIAkJCQkgICAgZm9yY2VfIyNjaGlwNiwgZm9yY2VfIyNjaGlwNywJXAogCQkJCSAgICBmb3JjZV8jI2NoaXA4LCBOVUxMIH07CQlcCiBJMkNfQ0xJRU5UX0lOU01PRF9DT01NT04KLQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfSTJDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJvLWRldi5oIGIvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKaW5kZXggMzZmZDE4Yy4uYzI1MTlkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKQEAgLTEzLDcgKzEzLDcgQEAKICAqIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyB0aGUgSTJPIEFQSXMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIGJvdGgKICAqIHRoZSBrZXJuZWwgYW5kIHVzZXIgbGV2ZWwgYXBwbGljYXRpb25zLiAgS2VybmVsIHNwZWNpZmljIHN0cnVjdHVyZXMKICAqIGFyZSBkZWZpbmVkIGluIGkyb19vc20uIE9TTXMgc2hvdWxkIGluY2x1ZGUgX29ubHlfIGkyb19vc20uaCB3aGljaAotICogYXV0b21hdGljYWxseSBpbmNsdWRzIHRoaXMgZmlsZS4KKyAqIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhpcyBmaWxlLgogICoKICAqLwogCkBAIC0yMywxNCArMjMsNyBAQAogLyogSG93IG1hbnkgY29udHJvbGxlcnMgYXJlIHdlIGFsbG93aW5nICovCiAjZGVmaW5lIE1BWF9JMk9fQ09OVFJPTExFUlMJMzIKIAotLy8jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpZm5kZWYgX19LRVJORUxfXwotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKLXR5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKLQotI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogCiAvKgogICogSTJPIENvbnRyb2wgSU9DVExzIGFuZCBzdHJ1Y3R1cmVzCkBAIC01Myw3ICs0Niw3IEBACiAKIHN0cnVjdCBpMm9fY21kX3Bhc3N0aHJ1MzIgewogCXVuc2lnbmVkIGludCBpb3A7CS8qIElPUCB1bml0IG51bWJlciAqLwotCXUzMiBtc2c7CQkvKiBtZXNzYWdlICovCisJX191MzIgbXNnOwkJLyogbWVzc2FnZSAqLwogfTsKIAogc3RydWN0IGkyb19jbWRfcGFzc3RocnUgewpAQCAtMTM4LDUzICsxMzEsNTMgQEAKICNkZWZpbmUgSTJPX0JVU19VTktOT1dOIDB4ODAKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19wY2lfYnVzIHsKLQl1OCBQY2lGdW5jdGlvbk51bWJlcjsKLQl1OCBQY2lEZXZpY2VOdW1iZXI7Ci0JdTggUGNpQnVzTnVtYmVyOwotCXU4IHJlc2VydmVkOwotCXUxNiBQY2lWZW5kb3JJRDsKLQl1MTYgUGNpRGV2aWNlSUQ7CisJX191OCBQY2lGdW5jdGlvbk51bWJlcjsKKwlfX3U4IFBjaURldmljZU51bWJlcjsKKwlfX3U4IFBjaUJ1c051bWJlcjsKKwlfX3U4IHJlc2VydmVkOworCV9fdTE2IFBjaVZlbmRvcklEOworCV9fdTE2IFBjaURldmljZUlEOwogfSBpMm9fcGNpX2J1czsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19sb2NhbF9idXMgewotCXUxNiBMYkJhc2VJT1BvcnQ7Ci0JdTE2IHJlc2VydmVkOwotCXUzMiBMYkJhc2VNZW1vcnlBZGRyZXNzOworCV9fdTE2IExiQmFzZUlPUG9ydDsKKwlfX3UxNiByZXNlcnZlZDsKKwlfX3UzMiBMYkJhc2VNZW1vcnlBZGRyZXNzOwogfSBpMm9fbG9jYWxfYnVzOwogCiB0eXBlZGVmIHN0cnVjdCBfaTJvX2lzYV9idXMgewotCXUxNiBJc2FCYXNlSU9Qb3J0OwotCXU4IENTTjsKLQl1OCByZXNlcnZlZDsKLQl1MzIgSXNhQmFzZU1lbW9yeUFkZHJlc3M7CisJX191MTYgSXNhQmFzZUlPUG9ydDsKKwlfX3U4IENTTjsKKwlfX3U4IHJlc2VydmVkOworCV9fdTMyIElzYUJhc2VNZW1vcnlBZGRyZXNzOwogfSBpMm9faXNhX2J1czsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19laXNhX2J1c19pbmZvIHsKLQl1MTYgRWlzYUJhc2VJT1BvcnQ7Ci0JdTggcmVzZXJ2ZWQ7Ci0JdTggRWlzYVNsb3ROdW1iZXI7Ci0JdTMyIEVpc2FCYXNlTWVtb3J5QWRkcmVzczsKKwlfX3UxNiBFaXNhQmFzZUlPUG9ydDsKKwlfX3U4IHJlc2VydmVkOworCV9fdTggRWlzYVNsb3ROdW1iZXI7CisJX191MzIgRWlzYUJhc2VNZW1vcnlBZGRyZXNzOwogfSBpMm9fZWlzYV9idXM7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9fbWNhX2J1cyB7Ci0JdTE2IE1jYUJhc2VJT1BvcnQ7Ci0JdTggcmVzZXJ2ZWQ7Ci0JdTggTWNhU2xvdE51bWJlcjsKLQl1MzIgTWNhQmFzZU1lbW9yeUFkZHJlc3M7CisJX191MTYgTWNhQmFzZUlPUG9ydDsKKwlfX3U4IHJlc2VydmVkOworCV9fdTggTWNhU2xvdE51bWJlcjsKKwlfX3UzMiBNY2FCYXNlTWVtb3J5QWRkcmVzczsKIH0gaTJvX21jYV9idXM7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9fb3RoZXJfYnVzIHsKLQl1MTYgQmFzZUlPUG9ydDsKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTMyIEJhc2VNZW1vcnlBZGRyZXNzOworCV9fdTE2IEJhc2VJT1BvcnQ7CisJX191MTYgcmVzZXJ2ZWQ7CisJX191MzIgQmFzZU1lbW9yeUFkZHJlc3M7CiB9IGkyb19vdGhlcl9idXM7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9faHJ0X2VudHJ5IHsKLQl1MzIgYWRhcHRlcl9pZDsKLQl1MzIgcGFyZW50X3RpZDoxMjsKLQl1MzIgc3RhdGU6NDsKLQl1MzIgYnVzX251bTo4OwotCXUzMiBidXNfdHlwZTo4OworCV9fdTMyIGFkYXB0ZXJfaWQ7CisJX191MzIgcGFyZW50X3RpZDoxMjsKKwlfX3UzMiBzdGF0ZTo0OworCV9fdTMyIGJ1c19udW06ODsKKwlfX3UzMiBidXNfdHlwZTo4OwogCXVuaW9uIHsKIAkJaTJvX3BjaV9idXMgcGNpX2J1czsKIAkJaTJvX2xvY2FsX2J1cyBsb2NhbF9idXM7CkBAIC0xOTYsNjYgKzE4OSw2NiBAQAogfSBpMm9faHJ0X2VudHJ5OwogCiB0eXBlZGVmIHN0cnVjdCBfaTJvX2hydCB7Ci0JdTE2IG51bV9lbnRyaWVzOwotCXU4IGVudHJ5X2xlbjsKLQl1OCBocnRfdmVyc2lvbjsKLQl1MzIgY2hhbmdlX2luZDsKKwlfX3UxNiBudW1fZW50cmllczsKKwlfX3U4IGVudHJ5X2xlbjsKKwlfX3U4IGhydF92ZXJzaW9uOworCV9fdTMyIGNoYW5nZV9pbmQ7CiAJaTJvX2hydF9lbnRyeSBocnRfZW50cnlbMV07CiB9IGkyb19ocnQ7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9fbGN0X2VudHJ5IHsKLQl1MzIgZW50cnlfc2l6ZToxNjsKLQl1MzIgdGlkOjEyOwotCXUzMiByZXNlcnZlZDo0OwotCXUzMiBjaGFuZ2VfaW5kOwotCXUzMiBkZXZpY2VfZmxhZ3M7Ci0JdTMyIGNsYXNzX2lkOjEyOwotCXUzMiB2ZXJzaW9uOjQ7Ci0JdTMyIHZlbmRvcl9pZDoxNjsKLQl1MzIgc3ViX2NsYXNzOwotCXUzMiB1c2VyX3RpZDoxMjsKLQl1MzIgcGFyZW50X3RpZDoxMjsKLQl1MzIgYmlvc19pbmZvOjg7Ci0JdTggaWRlbnRpdHlfdGFnWzhdOwotCXUzMiBldmVudF9jYXBhYmlsaXRpZXM7CisJX191MzIgZW50cnlfc2l6ZToxNjsKKwlfX3UzMiB0aWQ6MTI7CisJX191MzIgcmVzZXJ2ZWQ6NDsKKwlfX3UzMiBjaGFuZ2VfaW5kOworCV9fdTMyIGRldmljZV9mbGFnczsKKwlfX3UzMiBjbGFzc19pZDoxMjsKKwlfX3UzMiB2ZXJzaW9uOjQ7CisJX191MzIgdmVuZG9yX2lkOjE2OworCV9fdTMyIHN1Yl9jbGFzczsKKwlfX3UzMiB1c2VyX3RpZDoxMjsKKwlfX3UzMiBwYXJlbnRfdGlkOjEyOworCV9fdTMyIGJpb3NfaW5mbzo4OworCV9fdTggaWRlbnRpdHlfdGFnWzhdOworCV9fdTMyIGV2ZW50X2NhcGFiaWxpdGllczsKIH0gaTJvX2xjdF9lbnRyeTsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19sY3QgewotCXUzMiB0YWJsZV9zaXplOjE2OwotCXUzMiBib290X3RpZDoxMjsKLQl1MzIgbGN0X3Zlcjo0OwotCXUzMiBpb3BfZmxhZ3M7Ci0JdTMyIGNoYW5nZV9pbmQ7CisJX191MzIgdGFibGVfc2l6ZToxNjsKKwlfX3UzMiBib290X3RpZDoxMjsKKwlfX3UzMiBsY3RfdmVyOjQ7CisJX191MzIgaW9wX2ZsYWdzOworCV9fdTMyIGNoYW5nZV9pbmQ7CiAJaTJvX2xjdF9lbnRyeSBsY3RfZW50cnlbMV07CiB9IGkyb19sY3Q7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9fc3RhdHVzX2Jsb2NrIHsKLQl1MTYgb3JnX2lkOwotCXUxNiByZXNlcnZlZDsKLQl1MTYgaW9wX2lkOjEyOwotCXUxNiByZXNlcnZlZDE6NDsKLQl1MTYgaG9zdF91bml0X2lkOwotCXUxNiBzZWdtZW50X251bWJlcjoxMjsKLQl1MTYgaTJvX3ZlcnNpb246NDsKLQl1OCBpb3Bfc3RhdGU7Ci0JdTggbXNnX3R5cGU7Ci0JdTE2IGluYm91bmRfZnJhbWVfc2l6ZTsKLQl1OCBpbml0X2NvZGU7Ci0JdTggcmVzZXJ2ZWQyOwotCXUzMiBtYXhfaW5ib3VuZF9mcmFtZXM7Ci0JdTMyIGN1cl9pbmJvdW5kX2ZyYW1lczsKLQl1MzIgbWF4X291dGJvdW5kX2ZyYW1lczsKKwlfX3UxNiBvcmdfaWQ7CisJX191MTYgcmVzZXJ2ZWQ7CisJX191MTYgaW9wX2lkOjEyOworCV9fdTE2IHJlc2VydmVkMTo0OworCV9fdTE2IGhvc3RfdW5pdF9pZDsKKwlfX3UxNiBzZWdtZW50X251bWJlcjoxMjsKKwlfX3UxNiBpMm9fdmVyc2lvbjo0OworCV9fdTggaW9wX3N0YXRlOworCV9fdTggbXNnX3R5cGU7CisJX191MTYgaW5ib3VuZF9mcmFtZV9zaXplOworCV9fdTggaW5pdF9jb2RlOworCV9fdTggcmVzZXJ2ZWQyOworCV9fdTMyIG1heF9pbmJvdW5kX2ZyYW1lczsKKwlfX3UzMiBjdXJfaW5ib3VuZF9mcmFtZXM7CisJX191MzIgbWF4X291dGJvdW5kX2ZyYW1lczsKIAljaGFyIHByb2R1Y3RfaWRbMjRdOwotCXUzMiBleHBlY3RlZF9sY3Rfc2l6ZTsKLQl1MzIgaW9wX2NhcGFiaWxpdGllczsKLQl1MzIgZGVzaXJlZF9tZW1fc2l6ZTsKLQl1MzIgY3VycmVudF9tZW1fc2l6ZTsKLQl1MzIgY3VycmVudF9tZW1fYmFzZTsKLQl1MzIgZGVzaXJlZF9pb19zaXplOwotCXUzMiBjdXJyZW50X2lvX3NpemU7Ci0JdTMyIGN1cnJlbnRfaW9fYmFzZTsKLQl1MzIgcmVzZXJ2ZWQzOjI0OwotCXUzMiBjbWRfc3RhdHVzOjg7CisJX191MzIgZXhwZWN0ZWRfbGN0X3NpemU7CisJX191MzIgaW9wX2NhcGFiaWxpdGllczsKKwlfX3UzMiBkZXNpcmVkX21lbV9zaXplOworCV9fdTMyIGN1cnJlbnRfbWVtX3NpemU7CisJX191MzIgY3VycmVudF9tZW1fYmFzZTsKKwlfX3UzMiBkZXNpcmVkX2lvX3NpemU7CisJX191MzIgY3VycmVudF9pb19zaXplOworCV9fdTMyIGN1cnJlbnRfaW9fYmFzZTsKKwlfX3UzMiByZXNlcnZlZDM6MjQ7CisJX191MzIgY21kX3N0YXR1czo4OwogfSBpMm9fc3RhdHVzX2Jsb2NrOwogCiAvKiBFdmVudCBpbmRpY2F0b3IgbWFzayBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggYThiZWYxZC4uNzdlNjZkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC02LDcgKzYsNiBAQAogICogIENvcHlyaWdodCAoQykgMTk5NC0yMDAyICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaCBiL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCmluZGV4IDEyODhhMTYuLmUwYTE1MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCkBAIC0xMDIsNiArMTAyLDcgQEAKIAkJfSBoZHI7CiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNpZmRlZiBfX0tFUk5FTF9fCiAvKiBEZWZpbmUgRkRESSBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwogc3RydWN0IGZkZGlfc3RhdGlzdGljcyB7CiAKQEAgLTE5Myw1ICsxOTQsNiBAQAogCV9fdTMyCXBvcnRfbGVyX2ZsYWdbMl07CiAJX191MzIJcG9ydF9oYXJkd2FyZV9wcmVzZW50WzJdOwogCX07CisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX0xJTlVYX0lGX0ZERElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9mcmFkLmggYi9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaAppbmRleCAzOTVmMGFhLi5mMjcyYTgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaApAQCAtMjQsNyArMjQsNiBAQAogI2lmbmRlZiBfRlJBRF9IXwogI2RlZmluZSBfRlJBRF9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0RMQ0kpIHx8IGRlZmluZWQoQ09ORklHX0RMQ0lfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90ci5oIGIvaW5jbHVkZS9saW51eC9pZl90ci5oCmluZGV4IDU1MDJmNTkuLjJmOTRjZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3RyLmgKQEAgLTQzLDcgKzQzLDYgQEAKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRyaF9oZHIgKnRyX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0LmggYi9pbmNsdWRlL2xpbnV4L2luaXQuaAppbmRleCA5M2RjYmUxLi42NjY3Nzg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX0lOSVRfSAogI2RlZmluZSBfTElOVVhfSU5JVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAvKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgdG8gbWFyayBzb21lIGZ1bmN0aW9ucyBvciAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5vdGlmeS5oIGIvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKaW5kZXggMDllMDA0My4uZDRmNDhjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKQEAgLTY3LDIwICs2Nyw2NiBAQAogCiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIHN0cnVjdCBpbm90aWZ5X3dhdGNoIC0gcmVwcmVzZW50cyBhIHdhdGNoIHJlcXVlc3Qgb24gYSBzcGVjaWZpYyBpbm9kZQorICoKKyAqIGhfbGlzdCBpcyBwcm90ZWN0ZWQgYnkgaWgtPm11dGV4IG9mIHRoZSBhc3NvY2lhdGVkIGlub3RpZnlfaGFuZGxlLgorICogaV9saXN0LCBtYXNrIGFyZSBwcm90ZWN0ZWQgYnkgaW5vZGUtPmlub3RpZnlfbXV0ZXggb2YgdGhlIGFzc29jaWF0ZWQgaW5vZGUuCisgKiBpaCwgaW5vZGUsIGFuZCB3ZCBhcmUgbmV2ZXIgd3JpdHRlbiB0byBvbmNlIHRoZSB3YXRjaCBpcyBjcmVhdGVkLgorICoKKyAqIENhbGxlcnMgbXVzdCB1c2UgdGhlIGVzdGFibGlzaGVkIGlub3RpZnkgaW50ZXJmYWNlcyB0byBhY2Nlc3MgaW5vdGlmeV93YXRjaAorICogY29udGVudHMuICBUaGUgY29udGVudCBvZiB0aGlzIHN0cnVjdHVyZSBpcyBwcml2YXRlIHRvIHRoZSBpbm90aWZ5CisgKiBpbXBsZW1lbnRhdGlvbi4KKyAqLworc3RydWN0IGlub3RpZnlfd2F0Y2ggeworCXN0cnVjdCBsaXN0X2hlYWQJaF9saXN0OwkvKiBlbnRyeSBpbiBpbm90aWZ5X2hhbmRsZSdzIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWlfbGlzdDsJLyogZW50cnkgaW4gaW5vZGUncyBsaXN0ICovCisJYXRvbWljX3QJCWNvdW50OwkvKiByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUJKmloOwkvKiBhc3NvY2lhdGVkIGlub3RpZnkgaGFuZGxlICovCisJc3RydWN0IGlub2RlCQkqaW5vZGU7CS8qIGFzc29jaWF0ZWQgaW5vZGUgKi8KKwlfX3MzMgkJCXdkOwkvKiB3YXRjaCBkZXNjcmlwdG9yICovCisJX191MzIJCQltYXNrOwkvKiBldmVudCBtYXNrIGZvciB0aGlzIHdhdGNoICovCit9OworCitzdHJ1Y3QgaW5vdGlmeV9vcGVyYXRpb25zIHsKKwl2b2lkICgqaGFuZGxlX2V2ZW50KShzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqLCB1MzIsIHUzMiwgdTMyLAorCQkJICAgICBjb25zdCBjaGFyICosIHN0cnVjdCBpbm9kZSAqKTsKKwl2b2lkICgqZGVzdHJveV93YXRjaCkoc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7Cit9OwogCiAjaWZkZWYgQ09ORklHX0lOT1RJRlkKIAorLyogS2VybmVsIEFQSSBmb3IgcHJvZHVjaW5nIGV2ZW50cyAqLworCiBleHRlcm4gdm9pZCBpbm90aWZ5X2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBpbm90aWZ5X2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIHZvaWQgaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzdHJ1Y3QgaW5vZGUgKiwgX191MzIsIF9fdTMyLAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKik7CisJCQkJICAgICAgY29uc3QgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoc3RydWN0IGRlbnRyeSAqLCBfX3UzMiwgX191MzIsCiAJCQkJCSAgICAgIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCBpbm90aWZ5X3VubW91bnRfaW5vZGVzKHN0cnVjdCBsaXN0X2hlYWQgKik7CiBleHRlcm4gdm9pZCBpbm90aWZ5X2lub2RlX2lzX2RlYWQoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHUzMiBpbm90aWZ5X2dldF9jb29raWUodm9pZCk7CiAKKy8qIEtlcm5lbCBDb25zdW1lciBBUEkgKi8KKworZXh0ZXJuIHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaW5vdGlmeV9pbml0KGNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgKik7CitleHRlcm4gdm9pZCBpbm90aWZ5X2luaXRfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7CitleHRlcm4gdm9pZCBpbm90aWZ5X2Rlc3Ryb3koc3RydWN0IGlub3RpZnlfaGFuZGxlICopOworZXh0ZXJuIF9fczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKiwgc3RydWN0IGlub2RlICosCisJCQkJc3RydWN0IGlub3RpZnlfd2F0Y2ggKiopOworZXh0ZXJuIF9fczMyIGlub3RpZnlfZmluZF91cGRhdGVfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICosIHN0cnVjdCBpbm9kZSAqLAorCQkJCSAgICAgICB1MzIpOworZXh0ZXJuIF9fczMyIGlub3RpZnlfYWRkX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqLCBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqLAorCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqLCBfX3UzMik7CitleHRlcm4gaW50IGlub3RpZnlfcm1fd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICosIHN0cnVjdCBpbm90aWZ5X3dhdGNoICopOworZXh0ZXJuIGludCBpbm90aWZ5X3JtX3dkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqLCBfX3UzMik7CitleHRlcm4gdm9pZCBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoc3RydWN0IGlub3RpZnlfaGFuZGxlICosCisJCQkJCXN0cnVjdCBpbm90aWZ5X3dhdGNoICopOworZXh0ZXJuIHZvaWQgZ2V0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7CitleHRlcm4gdm9pZCBwdXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKTsKKwogI2Vsc2UKIAogc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC05NCw3ICsxNDAsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgIF9fdTMyIG1hc2ssIF9fdTMyIGNvb2tpZSwKLQkJCQkJICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKKwkJCQkJICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKm5faW5vZGUpCiB7CiB9CiAKQEAgLTExNyw2ICsxNjQsNjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmlub3RpZnlfaW5pdChjb25zdCBzdHJ1Y3QgaW5vdGlmeV9vcGVyYXRpb25zICpvcHMpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9pbml0X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfZGVzdHJveShzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQoreworfQorCitzdGF0aWMgaW5saW5lIF9fczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKndhdGNocCkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19zMzIgaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19zMzIgaW5vdGlmeV9hZGRfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkgICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsCisJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgX191MzIgbWFzaykKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlub3RpZnlfcm1fd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbm90aWZ5X3JtX3dkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsIF9fdTMyIHdkKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkJCQkgICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQoreworfQorCiAjZW5kaWYJLyogQ09ORklHX0lOT1RJRlkgKi8KIAogI2VuZGlmCS8qIF9fS0VSTkVMIF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggY2UxYTc1Ni4uYjMyYzJiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtMTUsNiArMTUsNyBAQAogI2Vsc2UKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDJjMDhmZGMuLjllMGZlZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX0xJTlVYX0lOVEVSUlVQVF9ICiAjZGVmaW5lIF9MSU5VWF9JTlRFUlJVUFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcG1pLmggYi9pbmNsdWRlL2xpbnV4L2lwbWkuaAppbmRleCAwYTg0YjU2Li41NjUzYjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwbWkuaApAQCAtMzYsNyArMzYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaXBtaV9tc2dkZWZzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogLyoKICAqIFRoaXMgZmlsZSBkZXNjcmliZXMgYW4gaW50ZXJmYWNlIHRvIGFuIElQTUkgZHJpdmVyLiAgWW91IGhhdmUgdG8KQEAgLTIxMCw2ICsyMDksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwdjYuaCBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCmluZGV4IDEyNjNkOGMuLjI5Nzg1M2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSVBWNl9ICiAjZGVmaW5lIF9JUFY2X0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggZWUyYTgyYS4uNDJjOWNkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC05LDcgKzksNiBAQAogICogVGhhbmtzLiAtLXJtawogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAogI2lmICFkZWZpbmVkKENPTkZJR19TMzkwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFfY3B1c3RhdC5oIGIvaW5jbHVkZS9saW51eC9pcnFfY3B1c3RhdC5oCmluZGV4IGFmOTM1MDUuLjc3ZTRiYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxX2NwdXN0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycV9jcHVzdGF0LmgKQEAgLTksNyArOSw2IEBACiAgKiBLZWl0aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiBKdWx5IDIwMDAuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogU2ltcGxlIHdyYXBwZXJzIHJlZHVjaW5nIHNvdXJjZSBibG9hdC4gIERlZmluZSBhbGwgaXJxX3N0YXQgZmllbGRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzYXBucC5oIGIvaW5jbHVkZS9saW51eC9pc2FwbnAuaAppbmRleCAyNmM2NGMyLi4xZTg3MjhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzYXBucC5oCisrKyBiL2luY2x1ZGUvbGludXgvaXNhcG5wLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpZm5kZWYgTElOVVhfSVNBUE5QX0gKICNkZWZpbmUgTElOVVhfSVNBUE5QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi5oIGIvaW5jbHVkZS9saW51eC9pc2RuLmgKaW5kZXggNTNlYWVlOS4uNjI5OTExNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc2RuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuLmgKQEAgLTE0Niw3ICsxNDYsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzZG4vdHBhbS5oIGIvaW5jbHVkZS9saW51eC9pc2RuL3RwYW0uaAppbmRleCA5ZjY1YmVhLi5kMThkZDBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzZG4vdHBhbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXNkbi90cGFtLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNkZWZpbmUgX1RQQU1fSF8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKIC8qIElPQ1RMIGNvbW1hbmRzICovCiAjZGVmaW5lIFRQQU1fQ01EX0RTUExPQUQJMHgwMDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzZG5fcHBwLmggYi9pbmNsdWRlL2xpbnV4L2lzZG5fcHBwLmgKaW5kZXggMjZiMDBhNy4uODY4N2E3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc2RuX3BwcC5oCisrKyBiL2luY2x1ZGUvbGludXgvaXNkbl9wcHAuaApAQCAtNjcsNyArNjcsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfSVBQUF9GSUxURVIKICNpbmNsdWRlIDxsaW51eC9maWx0ZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbmlmLmggYi9pbmNsdWRlL2xpbnV4L2lzZG5pZi5oCmluZGV4IDA0ZTEwZjkuLmI5YjVhNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXNkbmlmLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuaWYuaApAQCAtNTQsNyArNTQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2pmZnMyLmggYi9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKaW5kZXggY2Y3OTJiYi4uYzZmNzA2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qZmZzMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamZmczIuaApAQCAtNjUsNiArNjUsMTggQEAKIAogI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9TVU1NQVJZIChKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0RFTEVURSB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCA2KQogCisjZGVmaW5lIEpGRlMyX05PREVUWVBFX1hBVFRSIChKRkZTMl9GRUFUVVJFX0lOQ09NUEFUIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDgpCisjZGVmaW5lIEpGRlMyX05PREVUWVBFX1hSRUYgKEpGRlMyX0ZFQVRVUkVfSU5DT01QQVQgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgOSkKKworLyogWEFUVFIgUmVsYXRlZCAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX1VTRVIJCTEJLyogZm9yICJ1c2VyLiIgKi8KKyNkZWZpbmUgSkZGUzJfWFBSRUZJWF9TRUNVUklUWQkJMgkvKiBmb3IgInNlY3VyaXR5LiIgKi8KKyNkZWZpbmUgSkZGUzJfWFBSRUZJWF9BQ0xfQUNDRVNTCTMJLyogZm9yICJzeXN0ZW0ucG9zaXhfYWNsX2FjY2VzcyIgKi8KKyNkZWZpbmUgSkZGUzJfWFBSRUZJWF9BQ0xfREVGQVVMVAk0CS8qIGZvciAic3lzdGVtLnBvc2l4X2FjbF9kZWZhdWx0IiAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX1RSVVNURUQJCTUJLyogZm9yICJ0cnVzdGVkLioiICovCisKKyNkZWZpbmUgSkZGUzJfQUNMX1ZFUlNJT04JCTB4MDAwMQorCiAvLyBNYXliZSBsYXRlci4uLgogLy8jZGVmaW5lIEpGRlMyX05PREVUWVBFX0NIRUNLUE9JTlQgKEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfREVMRVRFIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDMpCiAvLyNkZWZpbmUgSkZGUzJfTk9ERVRZUEVfT1BUSU9OUyAoSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9DT1BZIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDQpCkBAIC04MiwxMSArOTQsMTEgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXVpbnQzMl90IHYzMjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgIGppbnQzMl90OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqaW50MzJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXVpbnQzMl90IG07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpICBqbW9kZV90OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqbW9kZV90OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdWludDE2X3QgdjE2OwpAQCAtOTksNyArMTExLDcgQEAKIAlqaW50MTZfdCBub2RldHlwZTsKIAlqaW50MzJfdCB0b3RsZW47IC8qIFNvIHdlIGNhbiBza2lwIG92ZXIgbm9kZXMgd2UgZG9uJ3QgZ3JvayAqLwogCWppbnQzMl90IGhkcl9jcmM7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQKIHsKQEAgLTExNyw3ICsxMjksNyBAQAogCWppbnQzMl90IG5vZGVfY3JjOwogCWppbnQzMl90IG5hbWVfY3JjOwogCXVpbnQ4X3QgbmFtZVswXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OwogCiAvKiBUaGUgSkZGUzIgcmF3IGlub2RlIHN0cnVjdHVyZTogVXNlZCBmb3Igc3RvcmFnZSBvbiBwaHlzaWNhbCBtZWRpYS4gICovCiAvKiBUaGUgdWlkLCBnaWQsIGF0aW1lLCBtdGltZSBhbmQgY3RpbWUgbWVtYmVycyBjb3VsZCBiZSBsb25nZXIsIGJ1dApAQCAtMTQ5LDYgKzE2MSwzMiBAQAogCWppbnQzMl90IGRhdGFfY3JjOyAgIC8qIENSQyBmb3IgdGhlIChjb21wcmVzc2VkKSBkYXRhLiAgKi8KIAlqaW50MzJfdCBub2RlX2NyYzsgICAvKiBDUkMgZm9yIHRoZSByYXcgaW5vZGUgKGV4Y2x1ZGluZyBkYXRhKSAgKi8KIAl1aW50OF90IGRhdGFbMF07Cit9OworCitzdHJ1Y3QgamZmczJfcmF3X3hhdHRyIHsKKwlqaW50MTZfdCBtYWdpYzsKKwlqaW50MTZfdCBub2RldHlwZTsJLyogPSBKRkZTMl9OT0RFVFlQRV9YQVRUUiAqLworCWppbnQzMl90IHRvdGxlbjsKKwlqaW50MzJfdCBoZHJfY3JjOworCWppbnQzMl90IHhpZDsJCS8qIFhBVFRSIGlkZW50aWZpZXIgbnVtYmVyICovCisJamludDMyX3QgdmVyc2lvbjsKKwl1aW50OF90IHhwcmVmaXg7CisJdWludDhfdCBuYW1lX2xlbjsKKwlqaW50MTZfdCB2YWx1ZV9sZW47CisJamludDMyX3QgZGF0YV9jcmM7CisJamludDMyX3Qgbm9kZV9jcmM7CisJdWludDhfdCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGpmZnMyX3Jhd194cmVmCit7CisJamludDE2X3QgbWFnaWM7CisJamludDE2X3Qgbm9kZXR5cGU7CS8qID0gSkZGUzJfTk9ERVRZUEVfWFJFRiAqLworCWppbnQzMl90IHRvdGxlbjsKKwlqaW50MzJfdCBoZHJfY3JjOworCWppbnQzMl90IGlubzsJCS8qIGlub2RlIG51bWJlciAqLworCWppbnQzMl90IHhpZDsJCS8qIFhBVFRSIGlkZW50aWZpZXIgbnVtYmVyICovCisJamludDMyX3Qgbm9kZV9jcmM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgamZmczJfcmF3X3N1bW1hcnkKQEAgLTE2MywxNCArMjAxLDIyIEBACiAJamludDMyX3Qgc3VtX2NyYzsJLyogc3VtbWFyeSBpbmZvcm1hdGlvbiBjcmMgKi8KIAlqaW50MzJfdCBub2RlX2NyYzsgCS8qIG5vZGUgY3JjICovCiAJamludDMyX3Qgc3VtWzBdOyAJLyogaW5vZGUgc3VtbWFyeSBpbmZvICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogdW5pb24gamZmczJfbm9kZV91bmlvbgogewogCXN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgaTsKIAlzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCBkOworCXN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgeDsKKwlzdHJ1Y3QgamZmczJfcmF3X3hyZWYgcjsKIAlzdHJ1Y3QgamZmczJfcmF3X3N1bW1hcnkgczsKIAlzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlIHU7CiB9OwogCisvKiBEYXRhIHBheWxvYWQgZm9yIGRldmljZSBub2Rlcy4gKi8KK3VuaW9uIGpmZnMyX2RldmljZV9ub2RlIHsKKwlqaW50MTZfdCBvbGQ7CisJamludDMyX3QgbmV3OworfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfSkZGUzJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2pveXN0aWNrLmggYi9pbmNsdWRlL2xpbnV4L2pveXN0aWNrLmgKaW5kZXggNWZkMjBkZC4uZTJkM2ExOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qb3lzdGljay5oCisrKyBiL2luY2x1ZGUvbGludXgvam95c3RpY2suaApAQCAtMTExLDI1ICsxMTEsMjUgQEAKICNkZWZpbmUgSlNfU0VUX0FMTAkJOAogCiBzdHJ1Y3QgSlNfREFUQV9UWVBFIHsKLQlpbnQzMl90IGJ1dHRvbnM7Ci0JaW50MzJfdCB4OwotCWludDMyX3QgeTsKKwlfX3MzMiBidXR0b25zOworCV9fczMyIHg7CisJX19zMzIgeTsKIH07CiAKIHN0cnVjdCBKU19EQVRBX1NBVkVfVFlQRV8zMiB7Ci0JaW50MzJfdCBKU19USU1FT1VUOwotCWludDMyX3QgQlVTWTsKLQlpbnQzMl90IEpTX0VYUElSRVRJTUU7Ci0JaW50MzJfdCBKU19USU1FTElNSVQ7CisJX19zMzIgSlNfVElNRU9VVDsKKwlfX3MzMiBCVVNZOworCV9fczMyIEpTX0VYUElSRVRJTUU7CisJX19zMzIgSlNfVElNRUxJTUlUOwogCXN0cnVjdCBKU19EQVRBX1RZUEUgSlNfU0FWRTsKIAlzdHJ1Y3QgSlNfREFUQV9UWVBFIEpTX0NPUlI7CiB9OwogCiBzdHJ1Y3QgSlNfREFUQV9TQVZFX1RZUEVfNjQgewotCWludDMyX3QgSlNfVElNRU9VVDsKLQlpbnQzMl90IEJVU1k7Ci0JaW50NjRfdCBKU19FWFBJUkVUSU1FOwotCWludDY0X3QgSlNfVElNRUxJTUlUOworCV9fczMyIEpTX1RJTUVPVVQ7CisJX19zMzIgQlVTWTsKKwlfX3M2NCBKU19FWFBJUkVUSU1FOworCV9fczY0IEpTX1RJTUVMSU1JVDsKIAlzdHJ1Y3QgSlNfREFUQV9UWVBFIEpTX1NBVkU7CiAJc3RydWN0IEpTX0RBVEFfVFlQRSBKU19DT1JSOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaCBiL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaAppbmRleCA5YmJkMDQwLi41NGUyNTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKKysrIGIvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCkBAIC01LDcgKzUsNiBAQAogI2lmbmRlZiBfTElOVVhfS0FMTFNZTVNfSAogI2RlZmluZSBfTElOVVhfS0FMTFNZTVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgS1NZTV9OQU1FX0xFTiAxMjcKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCmluZGV4IGI0NjI0OTAuLjQzZTg5NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9LRVJORUxfU1RBVF9ICiAjZGVmaW5lIF9MSU5VWF9LRVJORUxfU1RBVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbW9kLmggYi9pbmNsdWRlL2xpbnV4L2ttb2QuaAppbmRleCBlNGEyMzE1Li4wZGIyMmExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttb2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ttb2QuaApAQCAtMjAsNyArMjAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKaW5kZXggNzc4YWRjMC4uOGJmNjcwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKQEAgLTI5LDcgKzI5LDYgQEAKICAqCQk8amtlbmlzdG9AdXMuaWJtLmNvbT4gIGFuZCBQcmFzYW5uYSBTIFBhbmNoYW11a2hpCiAgKgkJPHByYXNhbm5hQGluLmlibS5jb20+IGFkZGVkIGZ1bmN0aW9uLXJldHVybiBwcm9iZXMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKaW5kZXggYzA4Yzk5OC4uOTMyMDIxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9MSU5LQUdFX0gKICNkZWZpbmUgX0xJTlVYX0xJTktBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKaW5kZXggNmIyNjg0Ny4uYWE0ZmU5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaApAQCAtMTEsNyArMTEsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QvbmxtLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL25sbS5oCmluZGV4IDg2OWI2MzAuLmQ5ZDQ2ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2QvbmxtLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZC9ubG0uaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgTElOVVhfTE9DS0RfTkxNX0gKICNkZWZpbmUgTElOVVhfTE9DS0RfTkxNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBNYXhpbXVtIGZpbGUgb2Zmc2V0IGluIGZpbGVfbG9jay5mbF9lbmQgKi8KICMgZGVmaW5lIE5MTV9PRkZTRVRfTUFYCQkoKHMzMikgMHg3ZmZmZmZmZikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCmluZGV4IGY1ZmRjYTEuLjcyNDQwZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAppbmRleCBmZjBhNjQwLi42Nzg5YzQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX01JR1JBVEVfSAogI2RlZmluZSBfTElOVVhfTUlHUkFURV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaWZkZWYgQ09ORklHX01JR1JBVElPTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWkuaCBiL2luY2x1ZGUvbGludXgvbWlpLmgKaW5kZXggNjhmNWEwZi4uYmVkZGM2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L21paS5oCkBAIC05LDcgKzksNiBAQAogI2RlZmluZSBfX0xJTlVYX01JSV9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaWYuaD4KIAogLyogR2VuZXJpYyBNSUkgcmVnaXN0ZXJzLiAqLwogCkBAIC0xMzYsNiArMTM1LDIwIEBACiAjZGVmaW5lIExQQV8xMDAwRlVMTCAgICAgICAgICAgIDB4MDgwMCAgLyogTGluayBwYXJ0bmVyIDEwMDBCQVNFLVQgZnVsbCBkdXBsZXggKi8KICNkZWZpbmUgTFBBXzEwMDBIQUxGICAgICAgICAgICAgMHgwNDAwICAvKiBMaW5rIHBhcnRuZXIgMTAwMEJBU0UtVCBoYWxmIGR1cGxleCAqLwogCisvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGluIGFsbCBTSU9DeE1JSXh4eCBpb2N0bCBjYWxscyAqLworc3RydWN0IG1paV9pb2N0bF9kYXRhIHsKKwlfX3UxNgkJcGh5X2lkOworCV9fdTE2CQlyZWdfbnVtOworCV9fdTE2CQl2YWxfaW47CisJX191MTYJCXZhbF9vdXQ7Cit9OworCisjaWZkZWYgX19LRVJORUxfXyAKKworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisKK3N0cnVjdCBldGh0b29sX2NtZDsKKwogc3RydWN0IG1paV9pZl9pbmZvIHsKIAlpbnQgcGh5X2lkOwogCWludCBhZHZlcnRpc2luZzsKQEAgLTE1MSw5ICsxNjQsNiBAQAogCXZvaWQgKCptZGlvX3dyaXRlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsKTsKIH07CiAKLXN0cnVjdCBldGh0b29sX2NtZDsKLXN0cnVjdCBtaWlfaW9jdGxfZGF0YTsKLQogZXh0ZXJuIGludCBtaWlfbGlua19vayAoc3RydWN0IG1paV9pZl9pbmZvICptaWkpOwogZXh0ZXJuIGludCBtaWlfbndheV9yZXN0YXJ0IChzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSk7CiBleHRlcm4gaW50IG1paV9ldGh0b29sX2dzZXQoc3RydWN0IG1paV9pZl9pbmZvICptaWksIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCk7CkBAIC0xNjgsMTYgKzE3OCw2IEBACiAJCQkgICAgIHVuc2lnbmVkIGludCAqZHVwbGV4X2NoYW5nZWQpOwogCiAKLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBpbiBhbGwgU0lPQ3hNSUl4eHggaW9jdGwgY2FsbHMgKi8KLXN0cnVjdCBtaWlfaW9jdGxfZGF0YSB7Ci0JdTE2CQlwaHlfaWQ7Ci0JdTE2CQlyZWdfbnVtOwotCXUxNgkJdmFsX2luOwotCXUxNgkJdmFsX291dDsKLX07Ci0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmlmX21paShzdHJ1Y3QgaWZyZXEgKnJxKQogewogCXJldHVybiAoc3RydWN0IG1paV9pb2N0bF9kYXRhICopICZycS0+aWZyX2lmcnU7CkBAIC0yMzUsNSArMjM1LDUgQEAKIAlyZXR1cm4gMDsKIH0KIAotCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fTElOVVhfTUlJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDExNTQ2ODQuLmUyZmEzNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTcsNyArNyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYW4uaCBiL2luY2x1ZGUvbGludXgvbW1hbi5oCmluZGV4IDE4YTU2ODkuLjg3OTIwYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1hbi5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1hbi5oCkBAIC0xLDEwICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX01NQU5fSAogI2RlZmluZSBfTElOVVhfTU1BTl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9tbWFuLmg+CiAKICNkZWZpbmUgTVJFTUFQX01BWU1PVkUJMQpAQCAtMTMsNiArOSwxMiBAQAogI2RlZmluZSBPVkVSQ09NTUlUX0dVRVNTCQkwCiAjZGVmaW5lIE9WRVJDT01NSVRfQUxXQVlTCQkxCiAjZGVmaW5lIE9WRVJDT01NSVRfTkVWRVIJCTIKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCiBleHRlcm4gaW50IHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeTsKIGV4dGVybiBpbnQgc3lzY3RsX292ZXJjb21taXRfcmF0aW87CiBleHRlcm4gYXRvbWljX3Qgdm1fY29tbWl0dGVkX3NwYWNlOwpAQCAtNjMsNSArNjUsNSBAQAogCSAgICAgICBfY2FsY192bV90cmFucyhmbGFncywgTUFQX0VYRUNVVEFCTEUsIFZNX0VYRUNVVEFCTEUpIHwKIAkgICAgICAgX2NhbGNfdm1fdHJhbnMoZmxhZ3MsIE1BUF9MT0NLRUQsICAgICBWTV9MT0NLRUQgICAgKTsKIH0KLQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfTU1BTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCAyZDgzMzcxLi45NzQyZTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTQsNyArNCw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IGVhZWMxM2QuLmMyZDg5ZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtNiw3ICs2LDYgQEAKICAqIFJld3JpdHRlbiBieSBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQHRhbXUuZWR1PiBEZWMgMTk5NgogICogUmV3cml0dGVuIGFnYWluIGJ5IFJ1c3R5IFJ1c3NlbGwsIDIwMDIKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC01NTcsMTMgKzU1Niw0IEBACiAKICNkZWZpbmUgX19NT0RVTEVfU1RSSU5HKHgpIF9fc3RyaW5naWZ5KHgpCiAKLS8qIFVzZSBzeW1ib2xfZ2V0IGFuZCBzeW1ib2xfcHV0IGluc3RlYWQuICBZb3UnbGwgdGhhbmsgbWUuICovCi0jZGVmaW5lIEhBVkVfSU5URVJfTU9EVUxFCi1leHRlcm4gdm9pZCBfX2RlcHJlY2F0ZWQgaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKiwKLQkJc3RydWN0IG1vZHVsZSAqLCBjb25zdCB2b2lkICopOwotZXh0ZXJuIHZvaWQgX19kZXByZWNhdGVkIGludGVyX21vZHVsZV91bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gY29uc3Qgdm9pZCAqIF9fZGVwcmVjYXRlZCBpbnRlcl9tb2R1bGVfZ2V0X3JlcXVlc3QoY29uc3QgY2hhciAqLAotCQljb25zdCBjaGFyICopOwotZXh0ZXJuIHZvaWQgX19kZXByZWNhdGVkIGludGVyX21vZHVsZV9wdXQoY29uc3QgY2hhciAqKTsKLQogI2VuZGlmIC8qIF9MSU5VWF9NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tc2cuaCBiL2luY2x1ZGUvbGludXgvbXNnLmgKaW5kZXggOTAzZTBhYi4uYWNjN2MxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tc2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L21zZy5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfTElOVVhfTVNHX0gKIAogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogLyogaXBjcyBjdGwgY29tbWFuZHMgKi8KICNkZWZpbmUgTVNHX1NUQVQgMTEKQEAgLTYzLDYgKzYyLDcgQEAKICNkZWZpbmUgTVNHU0VHIChfX01TR1NFRyA8PSAweGZmZmYgPyBfX01TR1NFRyA6IDB4ZmZmZikKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKIC8qIG9uZSBtc2dfbXNnIHN0cnVjdHVyZSBmb3IgZWFjaCBtZXNzYWdlICovCiBzdHJ1Y3QgbXNnX21zZyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCmluZGV4IDIzYTU2ODkuLjA5YmZhZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfX01URF9DRklfSF9fCiAjZGVmaW5lIF9fTVREX0NGSV9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2luZnRsLmggYi9pbmNsdWRlL2xpbnV4L210ZC9pbmZ0bC5oCmluZGV4IGQ3ZWFhNDAuLjY5Nzc3ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2luZnRsLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvaW5mdGwuaApAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgbmJfYmxvY2tzOwkJLyogbnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyAqLwogICAgICAgICB1bnNpZ25lZCBpbnQgbmJfYm9vdF9ibG9ja3M7CS8qIG51bWJlciBvZiBibG9ja3MgdXNlZCBieSB0aGUgYmlvcyAqLwogICAgICAgICBzdHJ1Y3QgZXJhc2VfaW5mbyBpbnN0cjsKLSAgICAgICAgc3RydWN0IG5hbmRfb29iaW5mbyBvb2JpbmZvOworICAgICAgICBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgb29iaW5mbzsKIH07CiAKIGludCBJTkZUTF9tb3VudChzdHJ1Y3QgSU5GVExyZWNvcmQgKnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbWFwLmggYi9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaAppbmRleCA3ZGZkNmUxLi4yOGQ0NjFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaApAQCAtNSw3ICs1LDYgQEAKICNpZm5kZWYgX19MSU5VWF9NVERfTUFQX0hfXwogI2RlZmluZSBfX0xJTlVYX01URF9NQVBfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKaW5kZXggYjZmMmZkYS4uOWI3YTJiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNlcnJvciBUaGlzIGlzIGEga2VybmVsIGhlYWRlci4gUGVyaGFwcyBpbmNsdWRlIG10ZC11c2VyLmggaW5zdGVhZD8KICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KQEAgLTU2LDE4ICs1NSw2OSBAQAogCXVfaW50MzJfdCBudW1ibG9ja3M7CQkvKiBOdW1iZXIgb2YgYmxvY2tzIG9mIGVyYXNlc2l6ZSBpbiB0aGlzIHJlZ2lvbiAqLwogfTsKIAorLyoKKyAqIG9vYiBvcGVyYXRpb24gbW9kZXMKKyAqCisgKiBNVERfT09CX1BMQUNFOglvb2IgZGF0YSBhcmUgcGxhY2VkIGF0IHRoZSBnaXZlbiBvZmZzZXQKKyAqIE1URF9PT0JfQVVUTzoJb29iIGRhdGEgYXJlIGF1dG9tYXRpY2FsbHkgcGxhY2VkIGF0IHRoZSBmcmVlIGFyZWFzCisgKgkJCXdoaWNoIGFyZSBkZWZpbmVkIGJ5IHRoZSBlY2NsYXlvdXQKKyAqIE1URF9PT0JfUkFXOgkJbW9kZSB0byByZWFkIHJhdyBkYXRhK29vYiBpbiBvbmUgY2h1bmsuIFRoZSBvb2IgZGF0YQorICoJCQlpcyBpbnNlcnRlZCBpbnRvIHRoZSBkYXRhLiBUaGF0cyBhIHJhdyBpbWFnZSBvZiB0aGUKKyAqCQkJZmxhc2ggY29udGVudHMuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJTVREX09PQl9QTEFDRSwKKwlNVERfT09CX0FVVE8sCisJTVREX09PQl9SQVcsCit9IG10ZF9vb2JfbW9kZV90OworCisvKioKKyAqIHN0cnVjdCBtdGRfb29iX29wcyAtIG9vYiBvcGVyYXRpb24gb3BlcmFuZHMKKyAqIEBtb2RlOglvcGVyYXRpb24gbW9kZQorICoKKyAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byB3cml0ZS9yZWFkLiBXaGVuIGEgZGF0YSBidWZmZXIgaXMgZ2l2ZW4KKyAqCQkoZGF0YnVmICE9IE5VTEwpIHRoaXMgaXMgdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzLiBXaGVuCisgKwkJbm8gZGF0YSBidWZmZXIgaXMgYXZhaWxhYmxlIHRoaXMgaXMgdGhlIG51bWJlciBvZiBvb2IgYnl0ZXMuCisgKgorICogQHJldGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4vcmVhZC4gV2hlbiBhIGRhdGEgYnVmZmVyIGlzIGdpdmVuCisgKgkJKGRhdGJ1ZiAhPSBOVUxMKSB0aGlzIGlzIHRoZSBudW1iZXIgb2YgZGF0YSBieXRlcy4gV2hlbgorICsJCW5vIGRhdGEgYnVmZmVyIGlzIGF2YWlsYWJsZSB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygb29iIGJ5dGVzLgorICoKKyAqIEBvb2JsZW46CW51bWJlciBvZiBvb2IgYnl0ZXMgcGVyIHBhZ2UKKyAqIEBvb2JvZmZzOglvZmZzZXQgb2Ygb29iIGRhdGEgaW4gdGhlIG9vYiBhcmVhIChvbmx5IHJlbGV2YW50IHdoZW4KKyAqCQltb2RlID0gTVREX09PQl9QTEFDRSkKKyAqIEBkYXRidWY6CWRhdGEgYnVmZmVyIC0gaWYgTlVMTCBvbmx5IG9vYiBkYXRhIGFyZSByZWFkL3dyaXR0ZW4KKyAqIEBvb2JidWY6CW9vYiBkYXRhIGJ1ZmZlcgorICovCitzdHJ1Y3QgbXRkX29vYl9vcHMgeworCW10ZF9vb2JfbW9kZV90CW1vZGU7CisJc2l6ZV90CQlsZW47CisJc2l6ZV90CQlyZXRsZW47CisJc2l6ZV90CQlvb2JsZW47CisJdWludDMyX3QJb29ib2ZmczsKKwl1aW50OF90CQkqZGF0YnVmOworCXVpbnQ4X3QJCSpvb2JidWY7Cit9OworCiBzdHJ1Y3QgbXRkX2luZm8gewogCXVfY2hhciB0eXBlOwogCXVfaW50MzJfdCBmbGFnczsKIAl1X2ludDMyX3Qgc2l6ZTsJIC8vIFRvdGFsIHNpemUgb2YgdGhlIE1URAogCi0JLyogIk1ham9yIiBlcmFzZSBzaXplIGZvciB0aGUgZGV2aWNlLiBOYe92ZSB1c2VycyBtYXkgdGFrZSB0aGlzCisJLyogIk1ham9yIiBlcmFzZSBzaXplIGZvciB0aGUgZGV2aWNlLiBOYcOvdmUgdXNlcnMgbWF5IHRha2UgdGhpcwogCSAqIHRvIGJlIHRoZSBvbmx5IGVyYXNlIHNpemUgYXZhaWxhYmxlLCBvciBtYXkgdXNlIHRoZSBtb3JlIGRldGFpbGVkCiAJICogaW5mb3JtYXRpb24gYmVsb3cgaWYgdGhleSBkZXNpcmUKIAkgKi8KIAl1X2ludDMyX3QgZXJhc2VzaXplOworCS8qIE1pbmltYWwgd3JpdGFibGUgZmxhc2ggdW5pdCBzaXplLiBJbiBjYXNlIG9mIE5PUiBmbGFzaCBpdCBpcyAxIChldmVuCisJICogdGhvdWdoIGluZGl2aWR1YWwgYml0cyBjYW4gYmUgY2xlYXJlZCksIGluIGNhc2Ugb2YgTkFORCBmbGFzaCBpdCBpcworCSAqIG9uZSBOQU5EIHBhZ2UgKG9yIGhhbGYsIG9yIG9uZS1mb3VydGhzIG9mIGl0KSwgaW4gY2FzZSBvZiBFQ0MtZWQgTk9SCisJICogaXQgaXMgb2YgRUNDIGJsb2NrIHNpemUsIGV0Yy4gSXQgaXMgaWxsZWdhbCB0byBoYXZlIHdyaXRlc2l6ZSA9IDAuCisJICogQW55IGRyaXZlciByZWdpc3RlcmluZyBhIHN0cnVjdCBtdGRfaW5mbyBtdXN0IGVuc3VyZSBhIHdyaXRlc2l6ZSBvZgorCSAqIDEgb3IgbGFyZ2VyLgorCSAqLworCXVfaW50MzJfdCB3cml0ZXNpemU7CiAKLQl1X2ludDMyX3Qgb29iYmxvY2s7ICAvLyBTaXplIG9mIE9PQiBibG9ja3MgKGUuZy4gNTEyKQogCXVfaW50MzJfdCBvb2JzaXplOyAgIC8vIEFtb3VudCBvZiBPT0IgZGF0YSBwZXIgYmxvY2sgKGUuZy4gMTYpCiAJdV9pbnQzMl90IGVjY3R5cGU7CiAJdV9pbnQzMl90IGVjY3NpemU7CkBAIC03OSw3ICsxMjksNiBAQAogCSAqIE1URF9QUk9HUkFNX1JFR0lPTlMgZmxhZyBpcyBzZXQuCiAJICogKE1heWJlIHdlIHNob3VsZCBoYXZlIGFuIHVuaW9uIGZvciB0aG9zZT8pCiAJICovCi0jZGVmaW5lIE1URF9QUk9HUkVHSU9OX1NJWkUobXRkKSAgKG10ZCktPm9vYmJsb2NrCiAjZGVmaW5lIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX1ZBTElEKG10ZCkgIChtdGQpLT5vb2JzaXplCiAjZGVmaW5lIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX0lOVkFMSUQobXRkKSAgKG10ZCktPmVjY3R5cGUKIApAQCAtODcsOSArMTM2LDggQEAKIAljaGFyICpuYW1lOwogCWludCBpbmRleDsKIAotCS8vIG9vYmluZm8gaXMgYSBuYW5kX29vYmluZm8gc3RydWN0dXJlLCB3aGljaCBjYW4gYmUgc2V0IGJ5IGlvdGNsIChNRU1TRVRPT0JJTkZPKQotCXN0cnVjdCBuYW5kX29vYmluZm8gb29iaW5mbzsKLQl1X2ludDMyX3Qgb29iYXZhaWw7ICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gT09CIGFyZWEgYXZhaWxhYmxlIGZvciBmcworCS8qIGVjYyBsYXlvdXQgc3RydWN0dXJlIHBvaW50ZXIgLSByZWFkIG9ubHkgISAqLworCXN0cnVjdCBuYW5kX2VjY2xheW91dCAqZWNjbGF5b3V0OwogCiAJLyogRGF0YSBmb3IgdmFyaWFibGUgZXJhc2UgcmVnaW9ucy4gSWYgbnVtZXJhc2VyZWdpb25zIGlzIHplcm8sCiAJICogaXQgbWVhbnMgdGhhdCB0aGUgd2hvbGUgZGV2aWNlIGhhcyBlcmFzZXNpemUgYXMgZ2l2ZW4gYWJvdmUuCkBAIC0xMTIsMTEgKzE2MCwxMCBAQAogCWludCAoKnJlYWQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CiAJaW50ICgqd3JpdGUpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOwogCi0JaW50ICgqcmVhZF9lY2MpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7Ci0JaW50ICgqd3JpdGVfZWNjKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKLQotCWludCAoKnJlYWRfb29iKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwotCWludCAoKndyaXRlX29vYikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CisJaW50ICgqcmVhZF9vb2IpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOworCWludCAoKndyaXRlX29vYikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOwogCiAJLyoKIAkgKiBNZXRob2RzIHRvIGFjY2VzcyB0aGUgcHJvdGVjdGlvbiByZWdpc3RlciBhcmVhLCBwcmVzZW50IGluIHNvbWUKQEAgLTEzMCwxNyArMTc3LDExIEBACiAJaW50ICgqd3JpdGVfdXNlcl9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKIAlpbnQgKCpsb2NrX3VzZXJfcHJvdF9yZWcpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4pOwogCi0JLyoga3ZlYy1iYXNlZCByZWFkL3dyaXRlIG1ldGhvZHMuIFdlIG5lZWQgdGhlc2UgZXNwZWNpYWxseSBmb3IgTkFORCBmbGFzaCwKLQkgICB3aXRoIGl0cyBsaW1pdGVkIG51bWJlciBvZiB3cml0ZSBjeWNsZXMgcGVyIGVyYXNlLgorCS8qIGt2ZWMtYmFzZWQgcmVhZC93cml0ZSBtZXRob2RzLgogCSAgIE5COiBUaGUgJ2NvdW50JyBwYXJhbWV0ZXIgaXMgdGhlIG51bWJlciBvZiBfdmVjdG9yc18sIGVhY2ggb2YKIAkgICB3aGljaCBjb250YWlucyBhbiAob2ZzLCBsZW4pIHR1cGxlLgogCSovCi0JaW50ICgqcmVhZHYpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGt2ZWMgKnZlY3MsIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLCBzaXplX3QgKnJldGxlbik7Ci0JaW50ICgqcmVhZHZfZWNjKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgZnJvbSwKLQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwogCWludCAoKndyaXRldikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbik7Ci0JaW50ICgqd3JpdGV2X2VjYykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLAotCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7CiAKIAkvKiBTeW5jICovCiAJdm9pZCAoKnN5bmMpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CkBAIC0xNTksNiArMjAwLDkgQEAKIAogCXN0cnVjdCBub3RpZmllcl9ibG9jayByZWJvb3Rfbm90aWZpZXI7ICAvKiBkZWZhdWx0IG1vZGUgYmVmb3JlIHJlYm9vdCAqLwogCisJLyogRUNDIHN0YXR1cyBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBtdGRfZWNjX3N0YXRzIGVjY19zdGF0czsKKwogCXZvaWQgKnByaXY7CiAKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKQEAgLTE5MiwyMCArMjM2LDYgQEAKIGludCBkZWZhdWx0X210ZF9yZWFkdihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGt2ZWMgKnZlY3MsCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLCBzaXplX3QgKnJldGxlbik7CiAKLSNkZWZpbmUgTVREX0VSQVNFKG10ZCwgYXJncy4uLikgKCoobXRkLT5lcmFzZSkpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1BPSU5UKG10ZCwgYSxiLGMsZCkgKCoobXRkLT5wb2ludCkpKG10ZCwgYSxiLGMsICh1X2NoYXIgKiopKGQpKQotI2RlZmluZSBNVERfVU5QT0lOVChtdGQsIGFyZykgKCoobXRkLT51bnBvaW50KSkobXRkLCAodV9jaGFyICopYXJnKQotI2RlZmluZSBNVERfUkVBRChtdGQsIGFyZ3MuLi4pICgqKG10ZC0+cmVhZCkpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1dSSVRFKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZSkpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1JFQURWKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkdikpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1dSSVRFVihtdGQsIGFyZ3MuLi4pICgqKG10ZC0+d3JpdGV2KSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfUkVBREVDQyhtdGQsIGFyZ3MuLi4pICgqKG10ZC0+cmVhZF9lY2MpKShtdGQsIGFyZ3MpCi0jZGVmaW5lIE1URF9XUklURUVDQyhtdGQsIGFyZ3MuLi4pICgqKG10ZC0+d3JpdGVfZWNjKSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfUkVBRE9PQihtdGQsIGFyZ3MuLi4pICgqKG10ZC0+cmVhZF9vb2IpKShtdGQsIGFyZ3MpCi0jZGVmaW5lIE1URF9XUklURU9PQihtdGQsIGFyZ3MuLi4pICgqKG10ZC0+d3JpdGVfb29iKSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfU1lOQyhtdGQpIGRvIHsgaWYgKG10ZC0+c3luYykgKCoobXRkLT5zeW5jKSkobXRkKTsgIH0gd2hpbGUgKDApCi0KLQogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogdm9pZCBtdGRfZXJhc2VfY2FsbGJhY2soc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKTsKICNlbHNlCkBAIC0yMjYsNyArMjU2LDcgQEAKIAogI2lmZGVmIENPTkZJR19NVERfREVCVUcKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikJCQkJXAotIAlkbyB7CQkJCQkJXAorCWRvIHsJCQkJCQlcCiAJCWlmIChuIDw9IENPTkZJR19NVERfREVCVUdfVkVSQk9TRSkJXAogCQkJcHJpbnRrKEtFUk5fSU5GTyBhcmdzKTsJCVwKIAl9IHdoaWxlKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKaW5kZXggZGE1ZTY3Yi4uNjY1NTkyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaApAQCAtMTEsNTIgKzExLDE1IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogIEluZm86Ci0gKiAgIENvbnRhaW5zIHN0YW5kYXJkIGRlZmluZXMgYW5kIElEcyBmb3IgTkFORCBmbGFzaCBkZXZpY2VzCisgKiBJbmZvOgorICoJQ29udGFpbnMgc3RhbmRhcmQgZGVmaW5lcyBhbmQgSURzIGZvciBOQU5EIGZsYXNoIGRldmljZXMKICAqCi0gKiAgQ2hhbmdlbG9nOgotICogICAwMS0zMS0yMDAwIERNVyAgICAgQ3JlYXRlZAotICogICAwOS0xOC0yMDAwIFNKSCAgICAgTW92ZWQgc3RydWN0dXJlIG91dCBvZiB0aGUgRGlzay1Pbi1DaGlwIGRyaXZlcnMKLSAqCQkJc28gaXQgY2FuIGJlIHVzZWQgYnkgb3RoZXIgTkFORCBmbGFzaCBkZXZpY2UKLSAqCQkJZHJpdmVycy4gSSBhbHNvIGNoYW5nZWQgdGhlIGNvcHlyaWdodCBzaW5jZSBub25lCi0gKgkJCW9mIHRoZSBvcmlnaW5hbCBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHNwZWNpZmljCi0gKgkJCXRvIERvQyBkZXZpY2VzLiBEYXZpZCBjYW4gd2hhY2sgbWUgd2l0aCBhIGJhc2ViYWxsCi0gKgkJCWJhdCBsYXRlciBpZiBJIGRpZCBzb21ldGhpbmcgbmF1Z2h0eS4KLSAqICAgMTAtMTEtMjAwMCBTSkggICAgIEFkZGVkIHByaXZhdGUgTkFORCBmbGFzaCBzdHJ1Y3R1cmUgZm9yIGRyaXZlcgotICogICAxMC0yNC0yMDAwIFNKSCAgICAgQWRkZWQgcHJvdG90eXBlIGZvciAnbmFuZF9zY2FuJyBmdW5jdGlvbgotICogICAxMC0yOS0yMDAxIFRHCWNoYW5nZWQgbmFuZF9jaGlwIHN0cnVjdHVyZSB0byBzdXBwb3J0Ci0gKgkJCWhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGFjY2Vzc2luZyBjb250cm9sIGxpbmVzCi0gKiAgIDAyLTIxLTIwMDIgVEcJYWRkZWQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHJlYWQvd3JpdGUgYWRyZXNzIGFuZAotICoJCQlyZWFkeS9idXN5IGxpbmUgYWNjZXNzIGZ1bmN0aW9uCi0gKiAgIDAyLTI2LTIwMDIgVEcJYWRkZWQgY2hpcF9kZWxheSB0byBuYW5kX2NoaXAgc3RydWN0dXJlIHRvIG9wdGltaXplCi0gKgkJCWNvbW1hbmQgZGVsYXkgdGltZXMgZm9yIGRpZmZlcmVudCBjaGlwcwotICogICAwNC0yOC0yMDAyIFRHCU9PQiBjb25maWcgZGVmaW5lcyBtb3ZlZCBmcm9tIG5hbmQuYyB0byBhdm9pZCBkdXBsaWNhdGUKLSAqCQkJZGVmaW5lcyBpbiBqZmZzMi93YnVmLmMKLSAqICAgMDgtMDctMjAwMiBURwlmb3JjZWQgYmFkIGJsb2NrIGxvY2F0aW9uIHRvIGJ5dGUgNSBvZiBPT0IsIGV2ZW4gaWYKLSAqCQkJQ09ORklHX01URF9OQU5EX0VDQ19KRkZTMiBpcyBub3Qgc2V0Ci0gKiAgIDA4LTEwLTIwMDIgVEcJZXh0ZW5zaW9ucyB0byBuYW5kX2NoaXAgc3RydWN0dXJlIHRvIHN1cHBvcnQgSFctRUNDCi0gKgotICogICAwOC0yOS0yMDAyIHRnbHggCW5hbmRfY2hpcCBzdHJ1Y3R1cmU6IGRhdGFfcG9pIGZvciBzZWxlY3RpbmcKLSAqCQkJaW50ZXJuYWwgLyBmcy1kcml2ZXIgYnVmZmVyCi0gKgkJCXN1cHBvcnQgZm9yIDZieXRlLzUxMmJ5dGUgaGFyZHdhcmUgRUNDCi0gKgkJCXJlYWRfZWNjLCB3cml0ZV9lY2MgZXh0ZW5kZWQgZm9yIGRpZmZlcmVudCBvb2ItbGF5b3V0Ci0gKgkJCW9vYiBsYXlvdXQgc2VsZWN0aW9uczogTkFORF9OT05FX09PQiwgTkFORF9KRkZTMl9PT0IsCi0gKgkJCU5BTkRfWUFGRlNfT09CCi0gKiAgMTEtMjUtMjAwMiB0Z2x4CUFkZGVkIE1hbnVmYWN0dXJlciBjb2RlIEZVSklUU1UsIE5BVElPTkFMCi0gKgkJCVNwbGl0IG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEIHN0cnVjdHVyZXMKLSAqCi0gKiAgMDItMDgtMjAwNCB0Z2x4IAlhZGRlZCBvcHRpb24gZmllbGQgdG8gbmFuZCBzdHJ1Y3R1cmUgZm9yIGNoaXAgYW5vbWFsaXRpZXMKLSAqICAwNS0yNS0yMDA0IHRnbHggCWFkZGVkIGJhZCBibG9jayB0YWJsZSBzdXBwb3J0LCBTVC1NSUNSTyBtYW51ZmFjdHVyZXIgaWQKLSAqCQkJdXBkYXRlIG9mIG5hbmRfY2hpcCBzdHJ1Y3R1cmUgZGVzY3JpcHRpb24KLSAqICAwMS0xNy0yMDA1IGRtYXJsaW4JYWRkZWQgZXh0ZW5kZWQgY29tbWFuZHMgZm9yIEFHLUFORCBkZXZpY2UgYW5kIGFkZGVkIG9wdGlvbgotICogCQkJZm9yIEJCVF9BVVRPX1JFRlJFU0guCi0gKiAgMDEtMjAtMjAwNSBkbWFybGluCWFkZGVkIG9wdGlvbmFsIHBvaW50ZXIgdG8gaGFyZHdhcmUgc3BlY2lmaWMgY2FsbGJhY2sgZm9yCi0gKgkJCWV4dHJhIGVycm9yIHN0YXR1cyBjaGVja3MuCisgKiBDaGFuZ2Vsb2c6CisgKglTZWUgZ2l0IGNoYW5nZWxvZy4KICAqLwogI2lmbmRlZiBfX0xJTlVYX01URF9OQU5EX0gKICNkZWZpbmUgX19MSU5VWF9NVERfTkFORF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CkBAIC02NywxMCArMzAsNiBAQAogLyogRnJlZSByZXNvdXJjZXMgaGVsZCBieSB0aGUgTkFORCBkZXZpY2UgKi8KIGV4dGVybiB2b2lkIG5hbmRfcmVsZWFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQpOwogCi0vKiBSZWFkIHJhdyBkYXRhIGZyb20gdGhlIGRldmljZSB3aXRob3V0IEVDQyAqLwotZXh0ZXJuIGludCBuYW5kX3JlYWRfcmF3IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90IG9vYmxlbik7Ci0KLQogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIE5BTkQgY2hpcHMgaW4gYW4gYXJyYXkgKi8KICNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCTgKIApAQCAtNzksNDQgKzM4LDQ1IEBACiAgKiBhZGp1c3QgdGhpcyBhY2NvcmRpbmdseS4KICAqLwogI2RlZmluZSBOQU5EX01BWF9PT0JTSVpFCTY0CisjZGVmaW5lIE5BTkRfTUFYX1BBR0VTSVpFCTIwNDgKIAogLyoKICAqIENvbnN0YW50cyBmb3IgaGFyZHdhcmUgc3BlY2lmaWMgQ0xFL0FMRS9OQ0UgZnVuY3Rpb24KLSovCisgKgorICogVGhlc2UgYXJlIGJpdHMgd2hpY2ggY2FuIGJlIG9yJ2VkIHRvIHNldC9jbGVhciBtdWx0aXBsZQorICogYml0cyBpbiBvbmUgZ28uCisgKi8KIC8qIFNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBsb3cgKi8KLSNkZWZpbmUgTkFORF9DVExfU0VUTkNFIAkxCi0vKiBEZXNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBoaWdoICovCi0jZGVmaW5lIE5BTkRfQ1RMX0NMUk5DRQkJMgorI2RlZmluZSBOQU5EX05DRQkJMHgwMQogLyogU2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoIGJ5IHNldHRpbmcgQ0xFIHRvIGhpZ2ggKi8KLSNkZWZpbmUgTkFORF9DVExfU0VUQ0xFCQkzCi0vKiBEZXNlbGVjdCB0aGUgY29tbWFuZCBsYXRjaCBieSBzZXR0aW5nIENMRSB0byBsb3cgKi8KLSNkZWZpbmUgTkFORF9DVExfQ0xSQ0xFCQk0CisjZGVmaW5lIE5BTkRfQ0xFCQkweDAyCiAvKiBTZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggYnkgc2V0dGluZyBBTEUgdG8gaGlnaCAqLwotI2RlZmluZSBOQU5EX0NUTF9TRVRBTEUJCTUKLS8qIERlc2VsZWN0IHRoZSBhZGRyZXNzIGxhdGNoIGJ5IHNldHRpbmcgQUxFIHRvIGxvdyAqLwotI2RlZmluZSBOQU5EX0NUTF9DTFJBTEUJCTYKLS8qIFNldCB3cml0ZSBwcm90ZWN0aW9uIGJ5IHNldHRpbmcgV1AgdG8gaGlnaC4gTm90IHVzZWQhICovCi0jZGVmaW5lIE5BTkRfQ1RMX1NFVFdQCQk3Ci0vKiBDbGVhciB3cml0ZSBwcm90ZWN0aW9uIGJ5IHNldHRpbmcgV1AgdG8gbG93LiBOb3QgdXNlZCEgKi8KLSNkZWZpbmUgTkFORF9DVExfQ0xSV1AJCTgKKyNkZWZpbmUgTkFORF9BTEUJCTB4MDQKKworI2RlZmluZSBOQU5EX0NUUkxfQ0xFCQkoTkFORF9OQ0UgfCBOQU5EX0NMRSkKKyNkZWZpbmUgTkFORF9DVFJMX0FMRQkJKE5BTkRfTkNFIHwgTkFORF9BTEUpCisjZGVmaW5lIE5BTkRfQ1RSTF9DSEFOR0UJMHg4MAogCiAvKgogICogU3RhbmRhcmQgTkFORCBmbGFzaCBjb21tYW5kcwogICovCiAjZGVmaW5lIE5BTkRfQ01EX1JFQUQwCQkwCiAjZGVmaW5lIE5BTkRfQ01EX1JFQUQxCQkxCisjZGVmaW5lIE5BTkRfQ01EX1JORE9VVAkJNQogI2RlZmluZSBOQU5EX0NNRF9QQUdFUFJPRwkweDEwCiAjZGVmaW5lIE5BTkRfQ01EX1JFQURPT0IJMHg1MAogI2RlZmluZSBOQU5EX0NNRF9FUkFTRTEJCTB4NjAKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTCQkweDcwCiAjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19NVUxUSQkweDcxCiAjZGVmaW5lIE5BTkRfQ01EX1NFUUlOCQkweDgwCisjZGVmaW5lIE5BTkRfQ01EX1JORElOCQkweDg1CiAjZGVmaW5lIE5BTkRfQ01EX1JFQURJRAkJMHg5MAogI2RlZmluZSBOQU5EX0NNRF9FUkFTRTIJCTB4ZDAKICNkZWZpbmUgTkFORF9DTURfUkVTRVQJCTB4ZmYKIAogLyogRXh0ZW5kZWQgY29tbWFuZHMgZm9yIGxhcmdlIHBhZ2UgZGV2aWNlcyAqLwogI2RlZmluZSBOQU5EX0NNRF9SRUFEU1RBUlQJMHgzMAorI2RlZmluZSBOQU5EX0NNRF9STkRPVVRTVEFSVAkweEUwCiAjZGVmaW5lIE5BTkRfQ01EX0NBQ0hFRFBST0cJMHgxNQogCiAvKiBFeHRlbmRlZCBjb21tYW5kcyBmb3IgQUctQU5EIGRldmljZSAqLwpAQCAtMTM4LDYgKzk4LDggQEAKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTX1JFU0VUCTB4N2YKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTX0NMRUFSCTB4ZmYKIAorI2RlZmluZSBOQU5EX0NNRF9OT05FCQktMQorCiAvKiBTdGF0dXMgYml0cyAqLwogI2RlZmluZSBOQU5EX1NUQVRVU19GQUlMCTB4MDEKICNkZWZpbmUgTkFORF9TVEFUVVNfRkFJTF9OMQkweDAyCkBAIC0xNDgsMjEgKzExMCwxMiBAQAogLyoKICAqIENvbnN0YW50cyBmb3IgRUNDX01PREVTCiAgKi8KLQotLyogTm8gRUNDLiBVc2FnZSBpcyBub3QgcmVjb21tZW5kZWQgISAqLwotI2RlZmluZSBOQU5EX0VDQ19OT05FCQkwCi0vKiBTb2Z0d2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgMjU2IEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19TT0ZUCQkxCi0vKiBIYXJkd2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgMjU2IEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19IVzNfMjU2CTIKLS8qIEhhcmR3YXJlIEVDQyAzIGJ5dGUgRUNDIHBlciA1MTIgQnl0ZSBkYXRhICovCi0jZGVmaW5lIE5BTkRfRUNDX0hXM181MTIJMwotLyogSGFyZHdhcmUgRUNDIDMgYnl0ZSBFQ0MgcGVyIDUxMiBCeXRlIGRhdGEgKi8KLSNkZWZpbmUgTkFORF9FQ0NfSFc2XzUxMgk0Ci0vKiBIYXJkd2FyZSBFQ0MgOCBieXRlIEVDQyBwZXIgNTEyIEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19IVzhfNTEyCTYKLS8qIEhhcmR3YXJlIEVDQyAxMiBieXRlIEVDQyBwZXIgMjA0OCBCeXRlIGRhdGEgKi8KLSNkZWZpbmUgTkFORF9FQ0NfSFcxMl8yMDQ4CTcKK3R5cGVkZWYgZW51bSB7CisJTkFORF9FQ0NfTk9ORSwKKwlOQU5EX0VDQ19TT0ZULAorCU5BTkRfRUNDX0hXLAorCU5BTkRfRUNDX0hXX1NZTkRST01FLAorfSBuYW5kX2VjY19tb2Rlc190OwogCiAvKgogICogQ29uc3RhbnRzIGZvciBIYXJkd2FyZSBFQ0MKQEAgLTIwMSw2ICsxNTQsMTAgQEAKICAqIGJpdHMgZnJvbSBhZGphY2VudCBibG9ja3MgZnJvbSAnbGVha2luZycgaW4gYWx0ZXJpbmcgZGF0YS4KICAqIFRoaXMgaGFwcGVucyB3aXRoIHRoZSBSZW5lc2FzIEFHLUFORCBjaGlwcywgcG9zc2libHkgb3RoZXJzLiAgKi8KICNkZWZpbmUgQkJUX0FVVE9fUkVGUkVTSAkweDAwMDAwMDgwCisvKiBDaGlwIGRvZXMgbm90IHJlcXVpcmUgcmVhZHkgY2hlY2sgb24gcmVhZC4gVHJ1ZQorICogZm9yIGFsbCBsYXJnZSBwYWdlIGRldmljZXMsIGFzIHRoZXkgZG8gbm90IHN1cHBvcnQKKyAqIGF1dG9pbmNyZW1lbnQuKi8KKyNkZWZpbmUgTkFORF9OT19SRUFEUkRZCQkweDAwMDAwMTAwCiAKIC8qIE9wdGlvbnMgdmFsaWQgZm9yIFNhbXN1bmcgbGFyZ2UgcGFnZSBkZXZpY2VzICovCiAjZGVmaW5lIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIFwKQEAgLTIxOSwxOCArMTc2LDEyIEBACiAvKiBVc2UgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUuIFRoaXMgb3B0aW9uIGlzIHBhc3NlZCB0byB0aGUKICAqIGRlZmF1bHQgYmFkIGJsb2NrIHRhYmxlIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBOQU5EX1VTRV9GTEFTSF9CQlQJMHgwMDAxMDAwMAotLyogVGhlIGh3IGVjYyBnZW5lcmF0b3IgcHJvdmlkZXMgYSBzeW5kcm9tZSBpbnN0ZWFkIGEgZWNjIHZhbHVlIG9uIHJlYWQKLSAqIFRoaXMgY2FuIG9ubHkgd29yayBpZiB3ZSBoYXZlIHRoZSBlY2MgYnl0ZXMgZGlyZWN0bHkgYmVoaW5kIHRoZQotICogZGF0YSBieXRlcy4gQXBwbGllcyBmb3IgRE9DIGFuZCBBRy1BTkQgUmVuZXNhcyBIVyBSZWVkIFNvbG9tb24gZ2VuZXJhdG9ycyAqLwotI2RlZmluZSBOQU5EX0hXRUNDX1NZTkRST01FCTB4MDAwMjAwMDAKIC8qIFRoaXMgb3B0aW9uIHNraXBzIHRoZSBiYnQgc2NhbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICovCi0jZGVmaW5lIE5BTkRfU0tJUF9CQlRTQ0FOCTB4MDAwNDAwMDAKKyNkZWZpbmUgTkFORF9TS0lQX0JCVFNDQU4JMHgwMDAyMDAwMAogCiAvKiBPcHRpb25zIHNldCBieSBuYW5kIHNjYW4gKi8KLS8qIE5hbmQgc2NhbiBoYXMgYWxsb2NhdGVkIG9vYl9idWYgKi8KLSNkZWZpbmUgTkFORF9PT0JCVUZfQUxMT0MJMHg0MDAwMDAwMAotLyogTmFuZCBzY2FuIGhhcyBhbGxvY2F0ZWQgZGF0YV9idWYgKi8KLSNkZWZpbmUgTkFORF9EQVRBQlVGX0FMTE9DCTB4ODAwMDAwMDAKKy8qIE5hbmQgc2NhbiBoYXMgYWxsb2NhdGVkIGNvbnRyb2xsZXIgc3RydWN0ICovCisjZGVmaW5lIE5BTkRfQ09OVFJPTExFUl9BTExPQwkweDgwMDAwMDAwCiAKIAogLyoKQEAgLTI2NCw0NSArMjE1LDEwMiBAQAogfTsKIAogLyoqCisgKiBzdHJ1Y3QgbmFuZF9lY2NfY3RybCAtIENvbnRyb2wgc3RydWN0dXJlIGZvciBlY2MKKyAqIEBtb2RlOgllY2MgbW9kZQorICogQHN0ZXBzOgludW1iZXIgb2YgZWNjIHN0ZXBzIHBlciBwYWdlCisgKiBAc2l6ZToJZGF0YSBieXRlcyBwZXIgZWNjIHN0ZXAKKyAqIEBieXRlczoJZWNjIGJ5dGVzIHBlciBzdGVwCisgKiBAdG90YWw6CXRvdGFsIG51bWJlciBvZiBlY2MgYnl0ZXMgcGVyIHBhZ2UKKyAqIEBwcmVwYWQ6CXBhZGRpbmcgaW5mb3JtYXRpb24gZm9yIHN5bmRyb21lIGJhc2VkIGVjYyBnZW5lcmF0b3JzCisgKiBAcG9zdHBhZDoJcGFkZGluZyBpbmZvcm1hdGlvbiBmb3Igc3luZHJvbWUgYmFzZWQgZWNjIGdlbmVyYXRvcnMKKyAqIEBod2N0bDoJZnVuY3Rpb24gdG8gY29udHJvbCBoYXJkd2FyZSBlY2MgZ2VuZXJhdG9yLiBNdXN0IG9ubHkKKyAqCQliZSBwcm92aWRlZCBpZiBhbiBoYXJkd2FyZSBFQ0MgaXMgYXZhaWxhYmxlCisgKiBAY2FsY3VsYXRlOglmdW5jdGlvbiBmb3IgZWNjIGNhbGN1bGF0aW9uIG9yIHJlYWRiYWNrIGZyb20gZWNjIGhhcmR3YXJlCisgKiBAY29ycmVjdDoJZnVuY3Rpb24gZm9yIGVjYyBjb3JyZWN0aW9uLCBtYXRjaGluZyB0byBlY2MgZ2VuZXJhdG9yIChzdy9odykKKyAqIEByZWFkX3BhZ2U6CWZ1bmN0aW9uIHRvIHJlYWQgYSBwYWdlIGFjY29yZGluZyB0byB0aGUgZWNjIGdlbmVyYXRvciByZXF1aXJlbWVudHMKKyAqIEB3cml0ZV9wYWdlOglmdW5jdGlvbiB0byB3cml0ZSBhIHBhZ2UgYWNjb3JkaW5nIHRvIHRoZSBlY2MgZ2VuZXJhdG9yIHJlcXVpcmVtZW50cworICovCitzdHJ1Y3QgbmFuZF9lY2NfY3RybCB7CisJbmFuZF9lY2NfbW9kZXNfdAltb2RlOworCWludAkJCXN0ZXBzOworCWludAkJCXNpemU7CisJaW50CQkJYnl0ZXM7CisJaW50CQkJdG90YWw7CisJaW50CQkJcHJlcGFkOworCWludAkJCXBvc3RwYWQ7CisJc3RydWN0IG5hbmRfZWNjbGF5b3V0CSpsYXlvdXQ7CisJdm9pZAkJCSgqaHdjdGwpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSk7CisJaW50CQkJKCpjYWxjdWxhdGUpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQkgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdCwKKwkJCQkJICAgICB1aW50OF90ICplY2NfY29kZSk7CisJaW50CQkJKCpjb3JyZWN0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqZGF0LAorCQkJCQkgICB1aW50OF90ICpyZWFkX2VjYywKKwkJCQkJICAgdWludDhfdCAqY2FsY19lY2MpOworCWludAkJCSgqcmVhZF9wYWdlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJICAgICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCQkgICAgIHVpbnQ4X3QgKmJ1Zik7CisJdm9pZAkJCSgqd3JpdGVfcGFnZSkoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJCSAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJCSAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1Zik7CisJaW50CQkJKCpyZWFkX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJCSAgICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCQkgICAgaW50IHBhZ2UsCisJCQkJCSAgICBpbnQgc25kY21kKTsKKwlpbnQJCQkoKndyaXRlX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJCSAgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQkJICAgICBpbnQgcGFnZSk7Cit9OworCisvKioKKyAqIHN0cnVjdCBuYW5kX2J1ZmZlcnMgLSBidWZmZXIgc3RydWN0dXJlIGZvciByZWFkL3dyaXRlCisgKiBAZWNjY2FsYzoJYnVmZmVyIGZvciBjYWxjdWxhdGVkIGVjYworICogQGVjY2NvZGU6CWJ1ZmZlciBmb3IgZWNjIHJlYWQgZnJvbSBmbGFzaAorICogQG9vYndidWY6CWJ1ZmZlciBmb3Igd3JpdGUgb29iIGRhdGEKKyAqIEBkYXRhYnVmOglidWZmZXIgZm9yIGRhdGEgLSBkeW5hbWljYWxseSBzaXplZAorICogQG9vYnJidWY6CWJ1ZmZlciB0byByZWFkIG9vYiBkYXRhCisgKgorICogRG8gbm90IGNoYW5nZSB0aGUgb3JkZXIgb2YgYnVmZmVycy4gZGF0YWJ1ZiBhbmQgb29icmJ1ZiBtdXN0IGJlIGluCisgKiBjb25zZWN1dGl2ZSBvcmRlci4KKyAqLworc3RydWN0IG5hbmRfYnVmZmVycyB7CisJdWludDhfdAllY2NjYWxjW05BTkRfTUFYX09PQlNJWkVdOworCXVpbnQ4X3QJZWNjY29kZVtOQU5EX01BWF9PT0JTSVpFXTsKKwl1aW50OF90CW9vYndidWZbTkFORF9NQVhfT09CU0laRV07CisJdWludDhfdCBkYXRhYnVmW05BTkRfTUFYX1BBR0VTSVpFXTsKKwl1aW50OF90CW9vYnJidWZbTkFORF9NQVhfT09CU0laRV07Cit9OworCisvKioKICAqIHN0cnVjdCBuYW5kX2NoaXAgLSBOQU5EIFByaXZhdGUgRmxhc2ggQ2hpcCBEYXRhCiAgKiBASU9fQUREUl9SOgkJW0JPQVJEU1BFQ0lGSUNdIGFkZHJlc3MgdG8gcmVhZCB0aGUgOCBJL08gbGluZXMgb2YgdGhlIGZsYXNoIGRldmljZQogICogQElPX0FERFJfVzoJCVtCT0FSRFNQRUNJRklDXSBhZGRyZXNzIHRvIHdyaXRlIHRoZSA4IEkvTyBsaW5lcyBvZiB0aGUgZmxhc2ggZGV2aWNlCiAgKiBAcmVhZF9ieXRlOgkJW1JFUExBQ0VBQkxFXSByZWFkIG9uZSBieXRlIGZyb20gdGhlIGNoaXAKLSAqIEB3cml0ZV9ieXRlOgkJW1JFUExBQ0VBQkxFXSB3cml0ZSBvbmUgYnl0ZSB0byB0aGUgY2hpcAogICogQHJlYWRfd29yZDoJCVtSRVBMQUNFQUJMRV0gcmVhZCBvbmUgd29yZCBmcm9tIHRoZSBjaGlwCi0gKiBAd3JpdGVfd29yZDoJCVtSRVBMQUNFQUJMRV0gd3JpdGUgb25lIHdvcmQgdG8gdGhlIGNoaXAKICAqIEB3cml0ZV9idWY6CQlbUkVQTEFDRUFCTEVdIHdyaXRlIGRhdGEgZnJvbSB0aGUgYnVmZmVyIHRvIHRoZSBjaGlwCiAgKiBAcmVhZF9idWY6CQlbUkVQTEFDRUFCTEVdIHJlYWQgZGF0YSBmcm9tIHRoZSBjaGlwIGludG8gdGhlIGJ1ZmZlcgogICogQHZlcmlmeV9idWY6CQlbUkVQTEFDRUFCTEVdIHZlcmlmeSBidWZmZXIgY29udGVudHMgYWdhaW5zdCB0aGUgY2hpcCBkYXRhCiAgKiBAc2VsZWN0X2NoaXA6CVtSRVBMQUNFQUJMRV0gc2VsZWN0IGNoaXAgbnIKICAqIEBibG9ja19iYWQ6CQlbUkVQTEFDRUFCTEVdIGNoZWNrLCBpZiB0aGUgYmxvY2sgaXMgYmFkCiAgKiBAYmxvY2tfbWFya2JhZDoJW1JFUExBQ0VBQkxFXSBtYXJrIHRoZSBibG9jayBiYWQKLSAqIEBod2NvbnRyb2w6CQlbQk9BUkRTUEVDSUZJQ10gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3IgYWNjZXNpbmcgY29udHJvbC1saW5lcworICogQGNtZF9jdHJsOgkJW0JPQVJEU1BFQ0lGSUNdIGhhcmR3YXJlc3BlY2lmaWMgZnVudGlvbiBmb3IgY29udHJvbGxpbmcKKyAqCQkJQUxFL0NMRS9uQ0UuIEFsc28gdXNlZCB0byB3cml0ZSBjb21tYW5kIGFuZCBhZGRyZXNzCiAgKiBAZGV2X3JlYWR5OgkJW0JPQVJEU1BFQ0lGSUNdIGhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGFjY2VzaW5nIGRldmljZSByZWFkeS9idXN5IGxpbmUKICAqCQkJSWYgc2V0IHRvIE5VTEwgbm8gYWNjZXNzIHRvIHJlYWR5L2J1c3kgaXMgYXZhaWxhYmxlIGFuZCB0aGUgcmVhZHkvYnVzeSBpbmZvcm1hdGlvbgogICoJCQlpcyByZWFkIGZyb20gdGhlIGNoaXAgc3RhdHVzIHJlZ2lzdGVyCiAgKiBAY21kZnVuYzoJCVtSRVBMQUNFQUJMRV0gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3Igd3JpdGluZyBjb21tYW5kcyB0byB0aGUgY2hpcAogICogQHdhaXRmdW5jOgkJW1JFUExBQ0VBQkxFXSBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciB3YWl0IG9uIHJlYWR5Ci0gKiBAY2FsY3VsYXRlX2VjYzogCVtSRVBMQUNFQUJMRV0gZnVuY3Rpb24gZm9yIGVjYyBjYWxjdWxhdGlvbiBvciByZWFkYmFjayBmcm9tIGVjYyBoYXJkd2FyZQotICogQGNvcnJlY3RfZGF0YToJW1JFUExBQ0VBQkxFXSBmdW5jdGlvbiBmb3IgZWNjIGNvcnJlY3Rpb24sIG1hdGNoaW5nIHRvIGVjYyBnZW5lcmF0b3IgKHN3L2h3KQotICogQGVuYWJsZV9od2VjYzoJW0JPQVJEU1BFQ0lGSUNdIGZ1bmN0aW9uIHRvIGVuYWJsZSAocmVzZXQpIGhhcmR3YXJlIGVjYyBnZW5lcmF0b3IuIE11c3Qgb25seQotICoJCQliZSBwcm92aWRlZCBpZiBhIGhhcmR3YXJlIEVDQyBpcyBhdmFpbGFibGUKKyAqIEBlY2M6CQlbQk9BUkRTUEVDSUZJQ10gZWNjIGNvbnRyb2wgY3RydWN0dXJlCiAgKiBAZXJhc2VfY21kOgkJW0lOVEVSTl0gZXJhc2UgY29tbWFuZCB3cml0ZSBmdW5jdGlvbiwgc2VsZWN0YWJsZSBkdWUgdG8gQU5EIHN1cHBvcnQKICAqIEBzY2FuX2JidDoJCVtSRVBMQUNFQUJMRV0gZnVuY3Rpb24gdG8gc2NhbiBiYWQgYmxvY2sgdGFibGUKLSAqIEBlY2Ntb2RlOgkJW0JPQVJEU1BFQ0lGSUNdIG1vZGUgb2YgZWNjLCBzZWUgZGVmaW5lcwotICogQGVjY3NpemU6IAkJW0lOVEVSTl0gZGF0YWJ5dGVzIHVzZWQgcGVyIGVjYy1jYWxjdWxhdGlvbgotICogQGVjY2J5dGVzOiAJCVtJTlRFUk5dIG51bWJlciBvZiBlY2MgYnl0ZXMgcGVyIGVjYy1jYWxjdWxhdGlvbiBzdGVwCi0gKiBAZWNjc3RlcHM6CQlbSU5URVJOXSBudW1iZXIgb2YgZWNjIGNhbGN1bGF0aW9uIHN0ZXBzIHBlciBwYWdlCiAgKiBAY2hpcF9kZWxheToJCVtCT0FSRFNQRUNJRklDXSBjaGlwIGRlcGVuZGVudCBkZWxheSBmb3IgdHJhbnNmZXJpbmcgZGF0YSBmcm9tIGFycmF5IHRvIHJlYWQgcmVncyAodFIpCi0gKiBAY2hpcF9sb2NrOgkJW0lOVEVSTl0gc3BpbmxvY2sgdXNlZCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGlzIHN0cnVjdHVyZSBhbmQgdGhlIGNoaXAKICAqIEB3cToJCQlbSU5URVJOXSB3YWl0IHF1ZXVlIHRvIHNsZWVwIG9uIGlmIGEgTkFORCBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MKLSAqIEBzdGF0ZTogCQlbSU5URVJOXSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgTkFORCBkZXZpY2UKKyAqIEBzdGF0ZToJCVtJTlRFUk5dIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBOQU5EIGRldmljZQogICogQHBhZ2Vfc2hpZnQ6CQlbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgcGFnZSAoY29sdW1uIGFkZHJlc3MgYml0cykKICAqIEBwaHlzX2VyYXNlX3NoaWZ0OglbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgcGh5c2ljYWwgZXJhc2VibG9jawogICogQGJidF9lcmFzZV9zaGlmdDoJW0lOVEVSTl0gbnVtYmVyIG9mIGFkZHJlc3MgYml0cyBpbiBhIGJidCBlbnRyeQogICogQGNoaXBfc2hpZnQ6CQlbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIG9uZSBjaGlwCi0gKiBAZGF0YV9idWY6CQlbSU5URVJOXSBpbnRlcm5hbCBidWZmZXIgZm9yIG9uZSBwYWdlICsgb29iCi0gKiBAb29iX2J1ZjoJCVtJTlRFUk5dIG9vYiBidWZmZXIgZm9yIG9uZSBlcmFzZWJsb2NrCisgKiBAZGF0YnVmOgkJW0lOVEVSTl0gaW50ZXJuYWwgYnVmZmVyIGZvciBvbmUgcGFnZSArIG9vYgorICogQG9vYmJ1ZjoJCVtJTlRFUk5dIG9vYiBidWZmZXIgZm9yIG9uZSBlcmFzZWJsb2NrCiAgKiBAb29iZGlydHk6CQlbSU5URVJOXSBpbmRpY2F0ZXMgdGhhdCBvb2JfYnVmIG11c3QgYmUgcmVpbml0aWFsaXplZAogICogQGRhdGFfcG9pOgkJW0lOVEVSTl0gcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyCiAgKiBAb3B0aW9uczoJCVtCT0FSRFNQRUNJRklDXSB2YXJpb3VzIGNoaXAgb3B0aW9ucy4gVGhleSBjYW4gcGFydGx5IGJlIHNldCB0byBpbmZvcm0gbmFuZF9zY2FuIGFib3V0CkBAIC0zMTIsMTIgKzMyMCwxMyBAQAogICogQGNoaXBzaXplOgkJW0lOVEVSTl0gdGhlIHNpemUgb2Ygb25lIGNoaXAgZm9yIG11bHRpY2hpcCBhcnJheXMKICAqIEBwYWdlbWFzazoJCVtJTlRFUk5dIHBhZ2UgbnVtYmVyIG1hc2sgPSBudW1iZXIgb2YgKHBhZ2VzIC8gY2hpcCkgLSAxCiAgKiBAcGFnZWJ1ZjoJCVtJTlRFUk5dIGhvbGRzIHRoZSBwYWdlbnVtYmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiBkYXRhX2J1ZgotICogQGF1dG9vb2I6CQlbUkVQTEFDRUFCTEVdIHRoZSBkZWZhdWx0IChhdXRvKXBsYWNlbWVudCBzY2hlbWUKKyAqIEBlY2NsYXlvdXQ6CQlbUkVQTEFDRUFCTEVdIHRoZSBkZWZhdWx0IGVjYyBwbGFjZW1lbnQgc2NoZW1lCiAgKiBAYmJ0OgkJW0lOVEVSTl0gYmFkIGJsb2NrIHRhYmxlIHBvaW50ZXIKICAqIEBiYnRfdGQ6CQlbUkVQTEFDRUFCTEVdIGJhZCBibG9jayB0YWJsZSBkZXNjcmlwdG9yIGZvciBmbGFzaCBsb29rdXAKICAqIEBiYnRfbWQ6CQlbUkVQTEFDRUFCTEVdIGJhZCBibG9jayB0YWJsZSBtaXJyb3IgZGVzY3JpcHRvcgogICogQGJhZGJsb2NrX3BhdHRlcm46CVtSRVBMQUNFQUJMRV0gYmFkIGJsb2NrIHNjYW4gcGF0dGVybiB1c2VkIGZvciBpbml0aWFsIGJhZCBibG9jayBzY2FuCi0gKiBAY29udHJvbGxlcjoJCVtPUFRJT05BTF0gYSBwb2ludGVyIHRvIGEgaGFyZHdhcmUgY29udHJvbGxlciBzdHJ1Y3R1cmUgd2hpY2ggaXMgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluZGVwZW5kZW5kIGRldmljZXMKKyAqIEBjb250cm9sbGVyOgkJW1JFUExBQ0VBQkxFXSBhIHBvaW50ZXIgdG8gYSBoYXJkd2FyZSBjb250cm9sbGVyIHN0cnVjdHVyZQorICoJCQl3aGljaCBpcyBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5kZXBlbmRlbmQgZGV2aWNlcwogICogQHByaXY6CQlbT1BUSU9OQUxdIHBvaW50ZXIgdG8gcHJpdmF0ZSBjaGlwIGRhdGUKICAqIEBlcnJzdGF0OgkJW09QVElPTkFMXSBoYXJkd2FyZSBzcGVjaWZpYyBmdW5jdGlvbiB0byBwZXJmb3JtIGFkZGl0aW9uYWwgZXJyb3Igc3RhdHVzIGNoZWNrcwogICoJCQkoZGV0ZXJtaW5lIGlmIGVycm9ycyBhcmUgY29ycmVjdGFibGUpCkBAIC0zMjUsNTggKzMzNCw1NyBAQAogCiBzdHJ1Y3QgbmFuZF9jaGlwIHsKIAl2b2lkICBfX2lvbWVtCSpJT19BRERSX1I7Ci0Jdm9pZCAgX19pb21lbSAJKklPX0FERFJfVzsKKwl2b2lkICBfX2lvbWVtCSpJT19BRERSX1c7CiAKLQl1X2NoYXIJCSgqcmVhZF9ieXRlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0Jdm9pZAkJKCp3cml0ZV9ieXRlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyIGJ5dGUpOworCXVpbnQ4X3QJCSgqcmVhZF9ieXRlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAJdTE2CQkoKnJlYWRfd29yZCkoc3RydWN0IG10ZF9pbmZvICptdGQpOwotCXZvaWQJCSgqd3JpdGVfd29yZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIHUxNiB3b3JkKTsKLQotCXZvaWQJCSgqd3JpdGVfYnVmKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pOwotCXZvaWQJCSgqcmVhZF9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7Ci0JaW50CQkoKnZlcmlmeV9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7CisJdm9pZAkJKCp3cml0ZV9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pOworCXZvaWQJCSgqcmVhZF9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW4pOworCWludAkJKCp2ZXJpZnlfYnVmKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKTsKIAl2b2lkCQkoKnNlbGVjdF9jaGlwKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApOwogCWludAkJKCpibG9ja19iYWQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgZ2V0Y2hpcCk7CiAJaW50CQkoKmJsb2NrX21hcmtiYWQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKTsKLQl2b2lkIAkJKCpod2NvbnRyb2wpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKTsKLQlpbnQgIAkJKCpkZXZfcmVhZHkpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLQl2b2lkIAkJKCpjbWRmdW5jKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcik7Ci0JaW50IAkJKCp3YWl0ZnVuYykoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSk7Ci0JaW50CQkoKmNhbGN1bGF0ZV9lY2MpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSk7Ci0JaW50IAkJKCpjb3JyZWN0X2RhdGEpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYyk7Ci0Jdm9pZAkJKCplbmFibGVfaHdlY2MpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSk7CisJdm9pZAkJKCpjbWRfY3RybCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBkYXQsCisJCQkJICAgIHVuc2lnbmVkIGludCBjdHJsKTsKKwlpbnQJCSgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisJdm9pZAkJKCpjbWRmdW5jKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcik7CisJaW50CQkoKndhaXRmdW5jKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyk7CiAJdm9pZAkJKCplcmFzZV9jbWQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZSk7CiAJaW50CQkoKnNjYW5fYmJ0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0JaW50CQllY2Ntb2RlOwotCWludAkJZWNjc2l6ZTsKLQlpbnQJCWVjY2J5dGVzOwotCWludAkJZWNjc3RlcHM7Ci0JaW50IAkJY2hpcF9kZWxheTsKLQlzcGlubG9ja190CWNoaXBfbG9jazsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKLQluYW5kX3N0YXRlX3QgCXN0YXRlOwotCWludCAJCXBhZ2Vfc2hpZnQ7CisJaW50CQkoKmVycnN0YXQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgc3RhdGUsIGludCBzdGF0dXMsIGludCBwYWdlKTsKKworCWludAkJY2hpcF9kZWxheTsKKwl1bnNpZ25lZCBpbnQJb3B0aW9uczsKKworCWludAkJcGFnZV9zaGlmdDsKIAlpbnQJCXBoeXNfZXJhc2Vfc2hpZnQ7CiAJaW50CQliYnRfZXJhc2Vfc2hpZnQ7CiAJaW50CQljaGlwX3NoaWZ0OwotCXVfY2hhciAJCSpkYXRhX2J1ZjsKLQl1X2NoYXIJCSpvb2JfYnVmOwotCWludAkJb29iZGlydHk7Ci0JdV9jaGFyCQkqZGF0YV9wb2k7Ci0JdW5zaWduZWQgaW50CW9wdGlvbnM7Ci0JaW50CQliYWRibG9ja3BvczsKIAlpbnQJCW51bWNoaXBzOwogCXVuc2lnbmVkIGxvbmcJY2hpcHNpemU7CiAJaW50CQlwYWdlbWFzazsKIAlpbnQJCXBhZ2VidWY7Ci0Jc3RydWN0IG5hbmRfb29iaW5mbwkqYXV0b29vYjsKKwlpbnQJCWJhZGJsb2NrcG9zOworCisJbmFuZF9zdGF0ZV90CXN0YXRlOworCisJdWludDhfdAkJKm9vYl9wb2k7CisJc3RydWN0IG5hbmRfaHdfY29udHJvbCAgKmNvbnRyb2xsZXI7CisJc3RydWN0IG5hbmRfZWNjbGF5b3V0CSplY2NsYXlvdXQ7CisKKwlzdHJ1Y3QgbmFuZF9lY2NfY3RybCBlY2M7CisJc3RydWN0IG5hbmRfYnVmZmVycyBidWZmZXJzOworCXN0cnVjdCBuYW5kX2h3X2NvbnRyb2wgaHdjb250cm9sOworCisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwogCXVpbnQ4X3QJCSpiYnQ7CiAJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyCSpiYnRfdGQ7CiAJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyCSpiYnRfbWQ7CisKIAlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IJKmJhZGJsb2NrX3BhdHRlcm47Ci0Jc3RydWN0IG5hbmRfaHdfY29udHJvbCAgKmNvbnRyb2xsZXI7CisKIAl2b2lkCQkqcHJpdjsKLQlpbnQJCSgqZXJyc3RhdCkoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSwgaW50IHN0YXR1cywgaW50IHBhZ2UpOwogfTsKIAogLyoKQEAgLTM4OCwxOSArMzk2LDE5IEBACiAjZGVmaW5lIE5BTkRfTUZSX05BVElPTkFMCTB4OGYKICNkZWZpbmUgTkFORF9NRlJfUkVORVNBUwkweDA3CiAjZGVmaW5lIE5BTkRfTUZSX1NUTUlDUk8JMHgyMAotI2RlZmluZSBOQU5EX01GUl9IWU5JWCAgICAgICAgICAweGFkCisjZGVmaW5lIE5BTkRfTUZSX0hZTklYCQkweGFkCiAKIC8qKgogICogc3RydWN0IG5hbmRfZmxhc2hfZGV2IC0gTkFORCBGbGFzaCBEZXZpY2UgSUQgU3RydWN0dXJlCiAgKgotICogQG5hbWU6ICAJSWRlbnRpZnkgdGhlIGRldmljZSB0eXBlCi0gKiBAaWQ6ICAgCWRldmljZSBJRCBjb2RlCi0gKiBAcGFnZXNpemU6ICAJUGFnZXNpemUgaW4gYnl0ZXMuIEVpdGhlciAyNTYgb3IgNTEyIG9yIDAKKyAqIEBuYW1lOglJZGVudGlmeSB0aGUgZGV2aWNlIHR5cGUKKyAqIEBpZDoJCWRldmljZSBJRCBjb2RlCisgKiBAcGFnZXNpemU6CVBhZ2VzaXplIGluIGJ5dGVzLiBFaXRoZXIgMjU2IG9yIDUxMiBvciAwCiAgKgkJSWYgdGhlIHBhZ2VzaXplIGlzIDAsIHRoZW4gdGhlIHJlYWwgcGFnZXNpemUKICAqCQlhbmQgdGhlIGVyYXNlaXplIGFyZSBkZXRlcm1pbmVkIGZyb20gdGhlCiAgKgkJZXh0ZW5kZWQgaWQgYnl0ZXMgaW4gdGhlIGNoaXAKLSAqIEBlcmFzZXNpemU6IAlTaXplIG9mIGFuIGVyYXNlIGJsb2NrIGluIHRoZSBmbGFzaCBkZXZpY2UuCi0gKiBAY2hpcHNpemU6ICAJVG90YWwgY2hpcHNpemUgaW4gTWVnYSBCeXRlcworICogQGVyYXNlc2l6ZToJU2l6ZSBvZiBhbiBlcmFzZSBibG9jayBpbiB0aGUgZmxhc2ggZGV2aWNlLgorICogQGNoaXBzaXplOglUb3RhbCBjaGlwc2l6ZSBpbiBNZWdhIEJ5dGVzCiAgKiBAb3B0aW9uczoJQml0ZmllbGQgdG8gc3RvcmUgY2hpcCByZWxldmFudCBvcHRpb25zCiAgKi8KIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiB7CkBAIC00MTUsNyArNDIzLDcgQEAKIC8qKgogICogc3RydWN0IG5hbmRfbWFudWZhY3R1cmVycyAtIE5BTkQgRmxhc2ggTWFudWZhY3R1cmVyIElEIFN0cnVjdHVyZQogICogQG5hbWU6CU1hbnVmYWN0dXJlciBuYW1lCi0gKiBAaWQ6IAltYW51ZmFjdHVyZXIgSUQgY29kZSBvZiBkZXZpY2UuCisgKiBAaWQ6CQltYW51ZmFjdHVyZXIgSUQgY29kZSBvZiBkZXZpY2UuCiAqLwogc3RydWN0IG5hbmRfbWFudWZhY3R1cmVycyB7CiAJaW50IGlkOwpAQCAtNDU1LDcgKzQ2Myw3IEBACiAJaW50CXZlcm9mZnM7CiAJdWludDhfdAl2ZXJzaW9uW05BTkRfTUFYX0NISVBTXTsKIAlpbnQJbGVuOwotCWludCAJbWF4YmxvY2tzOworCWludAltYXhibG9ja3M7CiAJaW50CXJlc2VydmVkX2Jsb2NrX2NvZGU7CiAJdWludDhfdAkqcGF0dGVybjsKIH07CkBAIC00OTQsMTQgKzUwMiwxNCBAQAogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB0byBzY2FuIGZvciBhIGJidCAqLwogI2RlZmluZSBOQU5EX0JCVF9TQ0FOX01BWEJMT0NLUwk0CiAKLWV4dGVybiBpbnQgbmFuZF9zY2FuX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpOwotZXh0ZXJuIGludCBuYW5kX3VwZGF0ZV9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcyk7Ci1leHRlcm4gaW50IG5hbmRfZGVmYXVsdF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLWV4dGVybiBpbnQgbmFuZF9pc2JhZF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcywgaW50IGFsbG93YmJ0KTsKLWV4dGVybiBpbnQgbmFuZF9lcmFzZV9uYW5kIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyLCBpbnQgYWxsb3diYnQpOwotZXh0ZXJuIGludCBuYW5kX2RvX3JlYWRfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBvb2JfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwsIGludCBmbGFncyk7CitleHRlcm4gaW50IG5hbmRfc2Nhbl9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpOworZXh0ZXJuIGludCBuYW5kX3VwZGF0ZV9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKTsKK2V4dGVybiBpbnQgbmFuZF9kZWZhdWx0X2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CitleHRlcm4gaW50IG5hbmRfaXNiYWRfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcywgaW50IGFsbG93YmJ0KTsKK2V4dGVybiBpbnQgbmFuZF9lcmFzZV9uYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsCisJCQkgICBpbnQgYWxsb3diYnQpOworZXh0ZXJuIGludCBuYW5kX2RvX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCQkJc2l6ZV90ICogcmV0bGVuLCB1aW50OF90ICogYnVmKTsKIAogLyoKICogQ29uc3RhbnRzIGZvciBvb2IgY29uZmlndXJhdGlvbgpAQCAtNTA5LDQgKzUxNyw1MyBAQAogI2RlZmluZSBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUwkJNQogI2RlZmluZSBOQU5EX0xBUkdFX0JBREJMT0NLX1BPUwkJMAogCisvKioKKyAqIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2NoaXAgLSBjaGlwIGxldmVsIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBAbnJfY2hpcHM6CQltYXguIG51bWJlciBvZiBjaGlwcyB0byBzY2FuIGZvcgorICogQGNoaXBfb2ZmczoJCWNoaXAgbnVtYmVyIG9mZnNldAorICogQG5yX3BhcnRpdGlvbnM6CW51bWJlciBvZiBwYXJ0aXRpb25zIHBvaW50ZWQgdG8gYnkgcGFydGl0aW9ucyAob3IgemVybykKKyAqIEBwYXJ0aXRpb25zOgkJbXRkIHBhcnRpdGlvbiBsaXN0CisgKiBAY2hpcF9kZWxheToJCVIvQiBkZWxheSB2YWx1ZSBpbiB1cworICogQG9wdGlvbnM6CQlPcHRpb24gZmxhZ3MsIGUuZy4gMTZiaXQgYnVzd2lkdGgKKyAqIEBlY2NsYXlvdXQ6CQllY2MgbGF5b3V0IGluZm8gc3RydWN0dXJlCisgKiBAcHJpdjoJCWhhcmR3YXJlIGNvbnRyb2xsZXIgc3BlY2lmaWMgc2V0dGluZ3MKKyAqLworc3RydWN0IHBsYXRmb3JtX25hbmRfY2hpcCB7CisJaW50CQkJbnJfY2hpcHM7CisJaW50CQkJY2hpcF9vZmZzZXQ7CisJaW50CQkJbnJfcGFydGl0aW9uczsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydGl0aW9uczsKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQJKmVjY2xheW91dDsKKwlpbnQJCQljaGlwX2RlbGF5OworCXVuc2lnbmVkIGludAkJb3B0aW9uczsKKwl2b2lkCQkJKnByaXY7Cit9OworCisvKioKKyAqIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2N0cmwgLSBjb250cm9sbGVyIGxldmVsIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBAaHdjb250cm9sOgkJcGxhdGZvcm0gc3BlY2lmaWMgaGFyZHdhcmUgY29udHJvbCBzdHJ1Y3R1cmUKKyAqIEBkZXZfcmVhZHk6CQlwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbiB0byByZWFkIHJlYWR5L2J1c3kgcGluCisgKiBAc2VsZWN0X2NoaXA6CXBsYXRmb3JtIHNwZWNpZmljIGNoaXAgc2VsZWN0IGZ1bmN0aW9uCisgKiBAcHJpdl9kYXRhOgkJcHJpdmF0ZSBkYXRhIHRvIHRyYW5zcG9ydCBkcml2ZXIgc3BlY2lmaWMgc2V0dGluZ3MKKyAqCisgKiBBbGwgZmllbGRzIGFyZSBvcHRpb25hbCBhbmQgZGVwZW5kIG9uIHRoZSBoYXJkd2FyZSBkcml2ZXIgcmVxdWlyZW1lbnRzCisgKi8KK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2N0cmwgeworCXZvaWQJCSgqaHdjb250cm9sKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCk7CisJaW50CQkoKmRldl9yZWFkeSkoc3RydWN0IG10ZF9pbmZvICptdGQpOworCXZvaWQJCSgqc2VsZWN0X2NoaXApKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCk7CisJdm9pZAkJKnByaXY7Cit9OworCisvKiBTb21lIGhlbHBlcnMgdG8gYWNjZXNzIHRoZSBkYXRhIHN0cnVjdHVyZXMgKi8KK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2NoaXAgKmdldF9wbGF0Zm9ybV9uYW5kY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJcmV0dXJuIGNoaXAtPnByaXY7Cit9CisKICNlbmRpZiAvKiBfX0xJTlVYX01URF9OQU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25kZmMuaCBiL2luY2x1ZGUvbGludXgvbXRkL25kZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDU1OGE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmRmYy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9tdGQvbmRmYy5oCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNiBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBJbmZvOgorICogICBDb250YWlucyBkZWZpbmVzLCBkYXRhc3RydWN0dXJlcyBmb3IgbmRmYyBuYW5kIGNvbnRyb2xsZXIKKyAqCisgKi8KKyNpZm5kZWYgX19MSU5VWF9NVERfTkRGQ19ICisjZGVmaW5lIF9fTElOVVhfTVREX05ERkNfSAorCisvKiBOREZDIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE5ERkNfQ01ECQkweDAwCisjZGVmaW5lIE5ERkNfQUxFCQkweDA0CisjZGVmaW5lIE5ERkNfREFUQQkJMHgwOAorI2RlZmluZSBOREZDX0VDQwkJMHgxMAorI2RlZmluZSBOREZDX0JDRkcwCQkweDMwCisjZGVmaW5lIE5ERkNfQkNGRzEJCTB4MzQKKyNkZWZpbmUgTkRGQ19CQ0ZHMgkJMHgzOAorI2RlZmluZSBOREZDX0JDRkczCQkweDNjCisjZGVmaW5lIE5ERkNfQ0NSCQkweDQwCisjZGVmaW5lIE5ERkNfU1RBVAkJMHg0NAorI2RlZmluZSBOREZDX0hXQ1RMCQkweDQ4CisjZGVmaW5lIE5ERkNfUkVWSUQJCTB4NTAKKworI2RlZmluZSBOREZDX1NUQVRfSVNfUkVBRFkJMHgwMTAwMDAwMAorCisjZGVmaW5lIE5ERkNfQ0NSX1JFU0VUX0NFCTB4ODAwMDAwMDAgLyogQ0UgUmVzZXQgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfUkVTRVRfRUNDCTB4NDAwMDAwMDAgLyogRUNDIFJlc2V0ICovCisjZGVmaW5lIE5ERkNfQ0NSX1JJRQkJMHgyMDAwMDAwMCAvKiBJbnRlcnJ1cHQgRW5hYmxlIG9uIERldmljZSBSZHkgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfUkVOCQkweDEwMDAwMDAwIC8qIEVuYWJsZSB3YWl0IGZvciBSZHkgaW4gTGluZWFyUiAqLworI2RlZmluZSBOREZDX0NDUl9ST01FTgkJMHgwODAwMDAwMCAvKiBFbmFibGUgUk9NIEluIExpbmVhclIgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQVJFCQkweDA0MDAwMDAwIC8qIEF1dG8tUmVhZCBFbmFibGUgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQlMoeCkJCSgoKHgpICYgMHgzKSA8PCAyNCkgLyogU2VsZWN0IEJhbmsgb24gQ0VbeF0gKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQlNfTUFTSwkweDAzMDAwMDAwIC8qIFNlbGVjdCBCYW5rICovCisjZGVmaW5lIE5ERkNfQ0NSX0FSQUMwCQkweDAwMDAwMDAwIC8qIDMgQWRkciwgMSBDb2wgMiBSb3cgNTEyYiBwYWdlICovCisjZGVmaW5lIE5ERkNfQ0NSX0FSQUMxCQkweDAwMDAxMDAwIC8qIDQgQWRkciwgMSBDb2wgMyBSb3cgNTEyYiBwYWdlICovCisjZGVmaW5lIE5ERkNfQ0NSX0FSQUMyCQkweDAwMDAyMDAwIC8qIDQgQWRkciwgMiBDb2wgMiBSb3cgMksgcGFnZSAqLworI2RlZmluZSBOREZDX0NDUl9BUkFDMwkJMHgwMDAwMzAwMCAvKiA1IEFkZHIsIDIgQ29sIDMgUm93IDJLIHBhZ2UgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQVJBQ19NQVNLCTB4MDAwMDMwMDAgLyogQXV0by1SZWFkIG1vZGUgQWRkciBDeWNsZXMgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfUlBHCQkweDAwMDBDMDAwIC8qIEF1dG8tUmVhZCBQYWdlICovCisjZGVmaW5lIE5ERkNfQ0NSX0VCQ0MJCTB4MDAwMDAwMDQgLyogRUJDIENvbmZpZ3VyYXRpb24gQ29tcGxldGVkICovCisjZGVmaW5lIE5ERkNfQ0NSX0RIQwkJMHgwMDAwMDAwMiAvKiBEaXJlY3QgSGFyZHdhcmUgQ29udHJvbCBFbmFibGUgKi8KKworI2RlZmluZSBOREZDX0J4Q0ZHX0VOCQkweDgwMDAwMDAwIC8qIEJhbmsgRW5hYmxlICovCisjZGVmaW5lIE5ERkNfQnhDRkdfQ0VECQkweDQwMDAwMDAwIC8qIG5DRSBTdHlsZSAqLworI2RlZmluZSBOREZDX0J4Q0ZHX1NaX01BU0sJMHgwODAwMDAwMCAvKiBCYW5rIFNpemUgKi8KKyNkZWZpbmUgTkRGQ19CeENGR19TWl84QklUCTB4MDAwMDAwMDAgLyogOGJpdCAqLworI2RlZmluZSBOREZDX0J4Q0ZHX1NaXzE2QklUCTB4MDgwMDAwMDAgLyogMTZiaXQgKi8KKworI2RlZmluZSBOREZDX01BWF9CQU5LUwkJNAorCitzdHJ1Y3QgbmRmY19jb250cm9sbGVyX3NldHRpbmdzIHsKKwl1aW50MzJfdAljY3Jfc2V0dGluZ3M7CisJdWludDY0X3QJbmRmY19lcnBuOworfTsKKworc3RydWN0IG5kZmNfY2hpcF9zZXR0aW5ncyB7CisJdWludDMyX3QJYmFua19zZXR0aW5nczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmZ0bC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmZ0bC5oCmluZGV4IGQzNWQyYzIuLmJjZjJmYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25mdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmgKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgdW5zaWduZWQgaW50IG5iX2Jsb2NrczsJCS8qIG51bWJlciBvZiBwaHlzaWNhbCBibG9ja3MgKi8KICAgICAgICAgdW5zaWduZWQgaW50IG5iX2Jvb3RfYmxvY2tzOwkvKiBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkgdGhlIGJpb3MgKi8KICAgICAgICAgc3RydWN0IGVyYXNlX2luZm8gaW5zdHI7Ci0Jc3RydWN0IG5hbmRfb29iaW5mbyBvb2JpbmZvOworCXN0cnVjdCBuYW5kX2VjY2xheW91dCBvb2JpbmZvOwogfTsKIAogaW50IE5GVExfbW91bnQoc3RydWN0IE5GVExyZWNvcmQgKnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oCmluZGV4IDc0MTliNWYuLjljZTlhNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgKQEAgLTM1LDYgKzM1LDggQEAKIAlGTF9TWU5DSU5HLAogCUZMX1VOTE9DS0lORywKIAlGTF9MT0NLSU5HLAorCUZMX1JFU0VUSU5HLAorCUZMX09UUElORywKIAlGTF9QTV9TVVNQRU5ERUQsCiB9IG9uZW5hbmRfc3RhdGVfdDsKIApAQCAtNzUsNyArNzcsNyBAQAogICogQHBhcmFtIGNoaXBfbG9jawlbSU5URVJOXSBzcGlubG9jayB1c2VkIHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoaXMgc3RydWN0dXJlIGFuZCB0aGUgY2hpcAogICogQHBhcmFtIHdxCQlbSU5URVJOXSB3YWl0IHF1ZXVlIHRvIHNsZWVwIG9uIGlmIGEgT25lTkFORCBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MKICAqIEBwYXJhbSBzdGF0ZQkJW0lOVEVSTl0gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIE9uZU5BTkQgZGV2aWNlCi0gKiBAcGFyYW0gYXV0b29vYglbUkVQTEFDRUFCTEVdIHRoZSBkZWZhdWx0IChhdXRvKXBsYWNlbWVudCBzY2hlbWUKKyAqIEBwYXJhbSBlY2NsYXlvdXQJW1JFUExBQ0VBQkxFXSB0aGUgZGVmYXVsdCBlY2MgcGxhY2VtZW50IHNjaGVtZQogICogQHBhcmFtIGJibQkJW1JFUExBQ0VBQkxFXSBwb2ludGVyIHRvIEJhZCBCbG9jayBNYW5hZ2VtZW50CiAgKiBAcGFyYW0gcHJpdgkJW09QVElPTkFMXSBwb2ludGVyIHRvIHByaXZhdGUgY2hpcCBkYXRlCiAgKi8KQEAgLTExMSw5ICsxMTMsOSBAQAogCW9uZW5hbmRfc3RhdGVfdAkJc3RhdGU7CiAJdW5zaWduZWQgY2hhcgkJKnBhZ2VfYnVmOwogCi0Jc3RydWN0IG5hbmRfb29iaW5mbwkqYXV0b29vYjsKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQJKmVjY2xheW91dDsKIAotCXZvaWQgCQkJKmJibTsKKwl2b2lkCQkJKmJibTsKIAogCXZvaWQJCQkqcHJpdjsKIH07CkBAIC0xMzAsNiArMTMyLDkgQEAKICNkZWZpbmUgT05FTkFORF9TRVRfU1lTX0NGRzEodiwgdGhpcykJCQkJCVwKIAkodGhpcy0+d3JpdGVfd29yZCh2LCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1lTX0NGRzEpKQogCisvKiBDaGVjayBieXRlIGFjY2VzcyBpbiBPbmVOQU5EICovCisjZGVmaW5lIE9ORU5BTkRfQ0hFQ0tfQllURV9BQ0NFU1MoYWRkcikJCShhZGRyICYgMHgxKQorCiAvKgogICogT3B0aW9ucyBiaXRzCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKaW5kZXggZDc4MzJlZi4uNGE3MjgxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKQEAgLTExMiw2ICsxMTIsNyBAQAogI2RlZmluZSBPTkVOQU5EX0NNRF9MT0NLX1RJR0hUCQkoMHgyQykKICNkZWZpbmUgT05FTkFORF9DTURfRVJBU0UJCSgweDk0KQogI2RlZmluZSBPTkVOQU5EX0NNRF9SRVNFVAkJKDB4RjApCisjZGVmaW5lIE9ORU5BTkRfQ01EX09UUF9BQ0NFU1MJCSgweDY1KQogI2RlZmluZSBPTkVOQU5EX0NNRF9SRUFESUQJCSgweDkwKQogCiAvKiBOT1RFOiBUaG9zZSBhcmUgbm90ICpSRUFMKiBjb21tYW5kcyAqLwpAQCAtMTUyLDYgKzE1Myw4IEBACiAjZGVmaW5lIE9ORU5BTkRfQ1RSTF9FUkFTRQkJKDEgPDwgMTEpCiAjZGVmaW5lIE9ORU5BTkRfQ1RSTF9FUlJPUgkJKDEgPDwgMTApCiAjZGVmaW5lIE9ORU5BTkRfQ1RSTF9SU1RCCQkoMSA8PCA3KQorI2RlZmluZSBPTkVOQU5EX0NUUkxfT1RQX0wJCSgxIDw8IDYpCisjZGVmaW5lIE9ORU5BTkRfQ1RSTF9PVFBfQkwJCSgxIDw8IDUpCiAKIC8qCiAgKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIEYyNDFoIChSKQpAQCAtMTc3LDQgKzE4MCw5IEBACiAjZGVmaW5lIE9ORU5BTkRfRUNDXzJCSVQJCSgxIDw8IDEpCiAjZGVmaW5lIE9ORU5BTkRfRUNDXzJCSVRfQUxMCQkoMHhBQUFBKQogCisvKgorICogT25lLVRpbWUgUHJvZ3JhbW1hYmxlIChPVFApCisgKi8KKyNkZWZpbmUgT05FTkFORF9PVFBfTE9DS19PRkZTRVQJCSgxNCkKKwogI2VuZGlmCS8qIF9fT05FTkFORF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCmluZGV4IGIwM2Y1MTIuLmRhNmIzZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKQEAgLTQxLDcgKzQxLDcgQEAKIAl1X2ludDMyX3Qgc2l6ZTsJCQkvKiBwYXJ0aXRpb24gc2l6ZSAqLwogCXVfaW50MzJfdCBvZmZzZXQ7CQkvKiBvZmZzZXQgd2l0aGluIHRoZSBtYXN0ZXIgTVREIHNwYWNlICovCiAJdV9pbnQzMl90IG1hc2tfZmxhZ3M7CQkvKiBtYXN0ZXIgTVREIGZsYWdzIHRvIG1hc2sgb3V0IGZvciB0aGlzIHBhcnRpdGlvbiAqLwotCXN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbDsJLyogb3V0IG9mIGJhbmQgbGF5b3V0IGZvciB0aGlzIHBhcnRpdGlvbiAoTkFORCBvbmx5KSovCisJc3RydWN0IG5hbmRfZWNjbGF5b3V0ICplY2NsYXlvdXQ7CS8qIG91dCBvZiBiYW5kIGxheW91dCBmb3IgdGhpcyBwYXJ0aXRpb24gKE5BTkQgb25seSkqLwogCXN0cnVjdCBtdGRfaW5mbyAqKm10ZHA7CQkvKiBwb2ludGVyIHRvIHN0b3JlIHRoZSBNVEQgb2JqZWN0ICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmggYi9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmgKaW5kZXggYzdiOGJjZC4uODY4MzFlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvcGh5c21hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3BoeXNtYXAuaApAQCAtMTUsMzMgKzE1LDI2IEBACiAgKi8KIAogI2lmbmRlZiBfX0xJTlVYX01URF9QSFlTTUFQX18KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApCisjZGVmaW5lIF9fTElOVVhfTVREX1BIWVNNQVBfXwogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCi0vKgotICogVGhlIG1hcF9pbmZvIGZvciBwaHlzbWFwLiAgQm9hcmQgY2FuIG92ZXJyaWRlIHNpemUsIGJ1c3dpZHRoLCBwaHlzLAotICogKCpzZXRfdnBwKSgpLCBldGMgaW4gdGhlaXIgaW5pdGlhbCBzZXR1cCByb3V0aW5lLgotICovCi1leHRlcm4gc3RydWN0IG1hcF9pbmZvIHBoeXNtYXBfbWFwOworc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSB7CisJdW5zaWduZWQgaW50CQl3aWR0aDsKKwl2b2lkCQkJKCpzZXRfdnBwKShzdHJ1Y3QgbWFwX2luZm8gKiwgaW50KTsKKwl1bnNpZ25lZCBpbnQJCW5yX3BhcnRzOworCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0czsKK307CiAKIC8qCiAgKiBCb2FyZCBuZWVkcyB0byBzcGVjaWZ5IHRoZSBleGFjdCBtYXBwaW5nIGR1cmluZyB0aGVpciBzZXR1cCB0aW1lLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGh5c21hcF9jb25maWd1cmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBiYW5rd2lkdGgsIHZvaWQgKCpzZXRfdnBwKShzdHJ1Y3QgbWFwX2luZm8gKiwgaW50KSApCi17Ci0JcGh5c21hcF9tYXAucGh5cyA9IGFkZHI7Ci0JcGh5c21hcF9tYXAuc2l6ZSA9IHNpemU7Ci0JcGh5c21hcF9tYXAuYmFua3dpZHRoID0gYmFua3dpZHRoOwotCXBoeXNtYXBfbWFwLnNldF92cHAgPSBzZXRfdnBwOwotfQordm9pZCBwaHlzbWFwX2NvbmZpZ3VyZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJaW50IGJhbmt3aWR0aCwgdm9pZCAoKnNldF92cHApKHN0cnVjdCBtYXBfaW5mbyAqLCBpbnQpICk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfUEFSVElUSU9OUykKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAogLyoKICAqIE1hY2hpbmVzIHRoYXQgd2lzaCB0byBkbyBmbGFzaCBwYXJ0aXRpb24gbWF5IHdhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGluCkBAIC01NSw3ICs0OCw1IEBACiB2b2lkIHBoeXNtYXBfc2V0X3BhcnRpdGlvbnMoc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzLCBpbnQgbnVtX3BhcnRzKTsKIAogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01URF9QQVJUSVRJT05TKSAqLwotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01URCkgKi8KIAogI2VuZGlmIC8qIF9fTElOVVhfTVREX1BIWVNNQVBfXyAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC94aXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL3hpcC5oCmluZGV4IDIyMGQ1MGIuLmU5ZDQwYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3hpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3hpcC5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaWZuZGVmIF9fTElOVVhfTVREX1hJUF9IX18KICNkZWZpbmUgX19MSU5VWF9NVERfWElQX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfTVREX1hJUAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25iZC5oIGIvaW5jbHVkZS9saW51eC9uYmQuaAppbmRleCBhNmNlNDA5Li4xZDdjZGQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25iZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmJkLmgKQEAgLTc3LDExICs3NywxMSBAQAogICogc2VydmVyLiBBbGwgZGF0YSBhcmUgaW4gbmV0d29yayBieXRlIG9yZGVyLgogICovCiBzdHJ1Y3QgbmJkX3JlcXVlc3QgewotCXUzMiBtYWdpYzsKLQl1MzIgdHlwZTsJLyogPT0gUkVBRCB8fCA9PSBXUklURSAJKi8KKwlfX3UzMiBtYWdpYzsKKwlfX3UzMiB0eXBlOwkvKiA9PSBSRUFEIHx8ID09IFdSSVRFIAkqLwogCWNoYXIgaGFuZGxlWzhdOwotCXU2NCBmcm9tOwotCXUzMiBsZW47CisJX191NjQgZnJvbTsKKwlfX3UzMiBsZW47CiB9CiAjaWZkZWYgX19HTlVDX18KIAlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKQEAgLTkzLDggKzkzLDggQEAKICAqIGl0IGhhcyBjb21wbGV0ZWQgYW4gSS9PIHJlcXVlc3QgKG9yIGFuIGVycm9yIG9jY3VycykuCiAgKi8KIHN0cnVjdCBuYmRfcmVwbHkgewotCXUzMiBtYWdpYzsKLQl1MzIgZXJyb3I7CQkvKiAwID0gb2ssIGVsc2UgZXJyb3IJKi8KKwlfX3UzMiBtYWdpYzsKKwlfX3UzMiBlcnJvcjsJCS8qIDAgPSBvaywgZWxzZSBlcnJvcgkqLwogCWNoYXIgaGFuZGxlWzhdOwkJLyogaGFuZGxlIHlvdSBnb3QgZnJvbSByZXF1ZXN0CSovCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9mcy5oIGIvaW5jbHVkZS9saW51eC9uY3BfZnMuaAppbmRleCA5NmRjMjM3Li5iMjA4ZjBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25jcF9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmNwX2ZzLmgKQEAgLTEyLDggKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9uY3BfZnNfaS5oPgotI2luY2x1ZGUgPGxpbnV4L25jcF9mc19zYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lweC5oPgogI2luY2x1ZGUgPGxpbnV4L25jcF9uby5oPgogCkBAIC0xNDYsNyArMTQ0LDggQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L25jcF9mc19pLmg+CisjaW5jbHVkZSA8bGludXgvbmNwX2ZzX3NiLmg+CiAKIC8qIHVuZGVmIGJlY2F1c2UgcHVibGljIGRlZmluZSBpbiB1bXNkb3NfZnMuaCAobmNwX2ZzLmggaXNuJ3QgcHVibGljKSAqLwogI3VuZGVmIFBSSU5USwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKaW5kZXggODRhNDkwZS4uMzg1ZTY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oCkBAIC0xOCw5ICsxOCw3IEBACiAjaWZuZGVmIF9MSU5VWF9ORVRfSAogI2RlZmluZSBfTElOVVhfTkVUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxhc20vc29ja2V0Lmg+CiAKIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKQEAgLTU3LDYgKzU1LDcgQEAKICNkZWZpbmUgX19TT19BQ0NFUFRDT04JKDEgPDwgMTYpCS8qIHBlcmZvcm1lZCBhIGxpc3RlbgkJKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAogI2RlZmluZSBTT0NLX0FTWU5DX05PU1BBQ0UJMAogI2RlZmluZSBTT0NLX0FTWU5DX1dBSVREQVRBCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IGU0MzJiNzQuLjVlOGUyZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKaW5kZXggYjMxYTliYy4uMTAxNjhlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCkBAIC00MCw3ICs0MCw2IEBACiAjZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAKIGV4dGVybiB2b2lkIG5ldGZpbHRlcl9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaAppbmRleCAzNGY2M2NmLi40YzJkOTk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaApAQCAtNDIsNyArNDIsNyBAQAogCQl9IHU7CiAKIAkJLyogVGhlIHByb3RvY29sLiAqLwotCQl1MTYgcHJvdG9udW07CisJCV9fdTE2IHByb3RvbnVtOwogCX0gZHN0OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAuaAppbmRleCBhM2Y4OTc3Li45MmJjNmRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAuaApAQCAtNSw3ICs1LDYgQEAKICAqIChDKTIwMDIgUnVzdHkgUnVzc2VsbCBJQk0gLS0gVGhpcyBjb2RlIGlzIEdQTC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAKIC8qIFRoZXJlIGlzIG5vIFBGX0FSUC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKaW5kZXggYTc1Yjg0Yi4uODc3NjQwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKQEAgLTQsNyArNCw2IEBACiAvKiBicmlkZ2Utc3BlY2lmaWMgZGVmaW5lcyBmb3IgbmV0ZmlsdGVyLiAKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiBkZWZpbmVkKENPTkZJR19CUklER0VfTkVURklMVEVSKQogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaAppbmRleCA4NTMwMWM1Li5jZTAyYzk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCkBAIC01LDcgKzUsNiBAQAogICogKEMpMTk5OCBSdXN0eSBSdXNzZWxsIC0tIFRoaXMgY29kZSBpcyBHUEwuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogCiAvKiBvbmx5IGZvciB1c2Vyc3BhY2UgY29tcGF0aWJpbGl0eSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKaW5kZXggZTBlOTk1MS4uNTFkYmVjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaAppbmRleCAzNjA0MjlmLi41ZDkyY2YwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2xpc3RoZWxwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oCkBAIC0xLDYgKzEsNSBAQAogI2lmbmRlZiBfTElTVEhFTFBfSAogI2RlZmluZSBfTElTVEhFTFBfSAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogLyogSGVhZGVyIHRvIGRvIG1vcmUgY29tcHJlaGVuc2l2ZSBqb2IgdGhhbiBsaW51eC9saXN0Lmg7IGFzc3VtZSBsaXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mcy5oIGIvaW5jbHVkZS9saW51eC9uZnMuaAppbmRleCBjYTJmZmE2Li41NGFmOTJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzLmgKQEAgLTcsOSArNyw2IEBACiAjaWZuZGVmIF9MSU5VWF9ORlNfSAogI2RlZmluZSBfTElOVVhfTkZTX0gKIAotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9tc2dfcHJvdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCiAjZGVmaW5lIE5GU19QUk9HUkFNCTEwMDAwMwogI2RlZmluZSBORlNfUE9SVAkyMDQ5CiAjZGVmaW5lIE5GU19NQVhEQVRBCTgxOTIKQEAgLTEyOSw3ICsxMjYsMTAgQEAKIAlORkZJRk8gPSA4CiB9OwogCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbXNnX3Byb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKwogLyoKICAqIFRoaXMgaXMgdGhlIGtlcm5lbCBORlMgY2xpZW50IGZpbGUgaGFuZGxlIHJlcHJlc2VudGF0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzNC5oIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKaW5kZXggMTQ3N2ZjOC4uNWY2ODFkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKQEAgLTE0LDcgKzE0LDYgQEAKICNkZWZpbmUgX0xJTlVYX05GUzRfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKICNkZWZpbmUgTkZTNF9WRVJJRklFUl9TSVpFCTgKICNkZWZpbmUgTkZTNF9GSFNJWkUJCTEyOApAQCAtOTcsNiArOTYsOSBAQAogCU5GUzRfQUNMX1dIT19FVkVSWU9ORSwKIH07CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCiBzdHJ1Y3QgbmZzNF9hY2UgewogCXVpbnQzMl90CXR5cGU7CiAJdWludDMyX3QJZmxhZzsKQEAgLTM0NSw4ICszNDcsNiBAQAogI2RlZmluZSBORlM0X01JTk9SX1ZFUlNJT04gMAogI2RlZmluZSBORlM0X0RFQlVHIDEKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogLyogSW5kZXggb2YgcHJlZGVmaW5lZCBMaW51eCBjbGllbnQgb3BlcmF0aW9ucyAqLwogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmggYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCmluZGV4IGVjN2MyZTguLjJkY2FkMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBMSU5VWF9ORlNEX05GU0RfSAogI2RlZmluZSBMSU5VWF9ORlNEX05GU0RfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9kaXJlbnQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKaW5kZXggMDc5OGI3Ny4uZjllZGNkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2lmZGVmIF9fS0VSTkVMX18KLSMgaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjIGluY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjIGluY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogIyBpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL3N5c2NhbGwuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmgKaW5kZXggNzgxZWZiZi4uZGFlMGZhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL3N5c2NhbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2Qvc3lzY2FsbC5oCkBAIC0xMSw3ICsxMSw2IEBACiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpZmRlZiBfX0tFUk5FTF9fCi0jIGluY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogIyBpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogIyBpbmNsdWRlIDxsaW51eC9pbi5oPgogI2VuZGlmIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9udW1hLmggYi9pbmNsdWRlL2xpbnV4L251bWEuaAppbmRleCBlNDgxZmViLi5hMzFhNzMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L251bWEuaAorKysgYi9pbmNsdWRlL2xpbnV4L251bWEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX05VTUFfSAogI2RlZmluZSBfTElOVVhfTlVNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19OT0RFU19TSElGVAogI2RlZmluZSBOT0RFU19TSElGVCAgICAgQ09ORklHX05PREVTX1NISUZUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaCBiL2luY2x1ZGUvbGludXgvcGFycG9ydC5oCmluZGV4IDAwOGQ3MzYuLmQ0MjczN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFycG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFycG9ydC5oCkBAIC05Niw3ICs5Niw2IEBACiAvKiBUaGUgcmVzdCBpcyBmb3IgdGhlIGtlcm5lbCBvbmx5ICovCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggNmZkMzZjYi4uNmM0YmM3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0xNyw4ICsxNyw2IEBACiAjaWZuZGVmIExJTlVYX1BDSV9ICiAjZGVmaW5lIExJTlVYX1BDSV9ICiAKLSNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KLQogLyogSW5jbHVkZSB0aGUgcGNpIHJlZ2lzdGVyIGRlZmluZXMgKi8KICNpbmNsdWRlIDxsaW51eC9wY2lfcmVncy5oPgogCkBAIC00Niw4ICs0NCw5IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKaW5kZXggNjgyNTI1NS4uNjZiNWRlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaApAQCAtNiw3ICs2LDYgQEAKICAqIFdBUk5JTkc6IHRoZXNlIHRoaW5ncyBhcmUgSFVHRS4gIDQga2J5dGVzIHBlciBjb3VudGVyIG9uIDMyLXdheSBQNC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNjZiZTU4OS4uNjU4YzFiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMjMsNyArMjMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbV9sZWdhY3kuaCBiL2luY2x1ZGUvbGludXgvcG1fbGVnYWN5LmgKaW5kZXggMDA4OTMyZC4uNzgwMjdjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbV9sZWdhY3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtX2xlZ2FjeS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0xJTlVYX1BNX0xFR0FDWV9IX18KICNkZWZpbmUgX19MSU5VWF9QTV9MRUdBQ1lfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QTV9MRUdBQ1kKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbXUuaCBiL2luY2x1ZGUvbGludXgvcG11LmgKaW5kZXggMjE3ZDNkYS4uZWNjZTU5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtdS5oCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk4IFBhdWwgTWFja2VycmFzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBQTVVfRFJJVkVSX1ZFUlNJT04JMgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmggYi9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmgKaW5kZXggNDAyMDU2Yy4uYzZiMTNmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaApAQCAtNDIsOCArNDIsNiBAQAogI2lmbmRlZiBfUFBQX0RFRlNfSF8KICNkZWZpbmUgX1BQUF9ERUZTX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KLQogLyoKICAqIFRoZSBiYXNpYyBQUFAgZnJhbWUuCiAgKi8KQEAgLTk3LDcgKzk1LDExIEBACiAKICNkZWZpbmUgUFBQX0lOSVRGQ1MJMHhmZmZmCS8qIEluaXRpYWwgRkNTIHZhbHVlICovCiAjZGVmaW5lIFBQUF9HT09ERkNTCTB4ZjBiOAkvKiBHb29kIGZpbmFsIEZDUyB2YWx1ZSAqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2NyYy1jY2l0dC5oPgogI2RlZmluZSBQUFBfRkNTKGZjcywgYykgY3JjX2NjaXR0X2J5dGUoZmNzLCBjKQorI2VuZGlmCiAKIC8qCiAgKiBFeHRlbmRlZCBhc3luY21hcCAtIGFsbG93cyBhbnkgY2hhcmFjdGVyIHRvIGJlIGVzY2FwZWQuCkBAIC0xNzksMTIgKzE4MSw0IEBACiAgICAgdGltZV90IHJlY3ZfaWRsZTsJCS8qIHRpbWUgc2luY2UgbGFzdCBOUCBwYWNrZXQgcmVjZWl2ZWQgKi8KIH07CiAKLSNpZm5kZWYgX19QCi0jaWZkZWYgX19TVERDX18KLSNkZWZpbmUgX19QKHgpCXgKLSNlbHNlCi0jZGVmaW5lIF9fUCh4KQkoKQotI2VuZGlmCi0jZW5kaWYKLQogI2VuZGlmIC8qIF9QUFBfREVGU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcmVlbXB0LmggYi9pbmNsdWRlL2xpbnV4L3ByZWVtcHQuaAppbmRleCA1NzY5ZDE0Li5kMDkyNmQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ByZWVtcHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ByZWVtcHQuaApAQCAtNiw3ICs2LDYgQEAKICAqIHByZWVtcHRfY291bnQgKHVzZWQgZm9yIGtlcm5lbCBwcmVlbXB0aW9uLCBpbnRlcnJ1cHQgY291bnQsIGV0Yy4pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IDRiNDdhMDIuLjU4MTBkMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfUFJPQ19GU19ICiAjZGVmaW5lIF9MSU5VWF9QUk9DX0ZTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvcHJvZmlsZS5oCmluZGV4IDFmMmZlYTYuLmU2MzMwMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvZmlsZS5oCkBAIC00LDcgKzQsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKaW5kZXggMmRhYjcxZS4uYjhmYmYyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGEuaApAQCAtMzcsOCArMzcsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBfX0RRVU9UX1ZFUlNJT05fXwkiZHF1b3RfNi41LjEiCiAjZGVmaW5lIF9fRFFVT1RfTlVNX1ZFUlNJT05fXwk2KjEwMDAwKzUqMTAwKzEKQEAgLTEzMyw2ICsxMzEsOCBAQAogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9kcWJsa194ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kcWJsa192MS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCmluZGV4IDIxZTVhOTEuLjUxMTAyMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0xJTlVYX1FVT1RBT1BTXwogI2RlZmluZSBfTElOVVhfUVVPVEFPUFNfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmJ0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCmluZGV4IDRiN2NjNGYuLmYzNzAwNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYnRyZWUuaApAQCAtOTksMTkgKzk5LDM2IEBACiAKIHN0cnVjdCByYl9ub2RlCiB7Ci0Jc3RydWN0IHJiX25vZGUgKnJiX3BhcmVudDsKLQlpbnQgcmJfY29sb3I7CisJdW5zaWduZWQgbG9uZyAgcmJfcGFyZW50X2NvbG9yOwogI2RlZmluZQlSQl9SRUQJCTAKICNkZWZpbmUJUkJfQkxBQ0sJMQogCXN0cnVjdCByYl9ub2RlICpyYl9yaWdodDsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmJfbGVmdDsKLX07Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGxvbmcpKSkpOworICAgIC8qIFRoZSBhbGlnbm1lbnQgbWlnaHQgc2VlbSBwb2ludGxlc3MsIGJ1dCBhbGxlZ2VkbHkgQ1JJUyBuZWVkcyBpdCAqLwogCiBzdHJ1Y3QgcmJfcm9vdAogewogCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOwogfTsKIAorCisjZGVmaW5lIHJiX3BhcmVudChyKSAgICgoc3RydWN0IHJiX25vZGUgKikoKHIpLT5yYl9wYXJlbnRfY29sb3IgJiB+MykpCisjZGVmaW5lIHJiX2NvbG9yKHIpICAgKChyKS0+cmJfcGFyZW50X2NvbG9yICYgMSkKKyNkZWZpbmUgcmJfaXNfcmVkKHIpICAgKCFyYl9jb2xvcihyKSkKKyNkZWZpbmUgcmJfaXNfYmxhY2socikgcmJfY29sb3IocikKKyNkZWZpbmUgcmJfc2V0X3JlZChyKSAgZG8geyAociktPnJiX3BhcmVudF9jb2xvciAmPSB+MTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmJfc2V0X2JsYWNrKHIpICBkbyB7IChyKS0+cmJfcGFyZW50X2NvbG9yIHw9IDE7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYl9zZXRfcGFyZW50KHN0cnVjdCByYl9ub2RlICpyYiwgc3RydWN0IHJiX25vZGUgKnApCit7CisJcmItPnJiX3BhcmVudF9jb2xvciA9IChyYi0+cmJfcGFyZW50X2NvbG9yICYgMykgfCAodW5zaWduZWQgbG9uZylwOworfQorc3RhdGljIGlubGluZSB2b2lkIHJiX3NldF9jb2xvcihzdHJ1Y3QgcmJfbm9kZSAqcmIsIGludCBjb2xvcikKK3sKKwlyYi0+cmJfcGFyZW50X2NvbG9yID0gKHJiLT5yYl9wYXJlbnRfY29sb3IgJiB+MSkgfCBjb2xvcjsKK30KKwogI2RlZmluZSBSQl9ST09UCShzdHJ1Y3QgcmJfcm9vdCkgeyBOVUxMLCB9CiAjZGVmaW5lCXJiX2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpCiAKQEAgLTEzMSw4ICsxNDgsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHJiX2xpbmtfbm9kZShzdHJ1Y3QgcmJfbm9kZSAqIG5vZGUsIHN0cnVjdCByYl9ub2RlICogcGFyZW50LAogCQkJCXN0cnVjdCByYl9ub2RlICoqIHJiX2xpbmspCiB7Ci0Jbm9kZS0+cmJfcGFyZW50ID0gcGFyZW50OwotCW5vZGUtPnJiX2NvbG9yID0gUkJfUkVEOworCW5vZGUtPnJiX3BhcmVudF9jb2xvciA9ICh1bnNpZ25lZCBsb25nIClwYXJlbnQ7CiAJbm9kZS0+cmJfbGVmdCA9IG5vZGUtPnJiX3JpZ2h0ID0gTlVMTDsKIAogCSpyYl9saW5rID0gbm9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaAppbmRleCA1MzUzYWZiLi41ZTk2MTAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCkBAIC0yLDggKzIsNiBAQAogICBGaWxlOiBsaW51eC9yZWlzZXJmc194YXR0ci5oCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAKIC8qIE1hZ2ljIHZhbHVlIGluIGhlYWRlciAqLwpAQCAtMTUsNiArMTMsNyBAQAogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHsKIAljaGFyICpwcmVmaXg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlbGF5LmggYi9pbmNsdWRlL2xpbnV4L3JlbGF5LmgKaW5kZXggNGJjYzE1My4uMjRhY2NiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWxheS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVsYXkuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfTElOVVhfUkVMQVlfSAogI2RlZmluZSBfTElOVVhfUkVMQVlfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmlvLmggYi9pbmNsdWRlL2xpbnV4L3Jpby5oCmluZGV4IGM3ZTkwN2YuLmQ5Mzg1NzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9yaW8uaApAQCAtMTcsNyArMTcsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jpb19kcnYuaCBiL2luY2x1ZGUvbGludXgvcmlvX2Rydi5oCmluZGV4IGY1NDc3MmQuLjdhZGIyYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmlvX2Rydi5oCisrKyBiL2luY2x1ZGUvbGludXgvcmlvX2Rydi5oCkBAIC0xNiw3ICsxNiw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggZDZiOWJjZC4uMmQ0YzgxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTQsNyArNCw2IEBACiAgKiBEZWNsYXJhdGlvbnMgZm9yIFJldmVyc2UgTWFwcGluZyBmdW5jdGlvbnMgaW4gbW0vcm1hcC5jCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IGRmMGNkZDQuLmZhY2Q5ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtOTA5LDcgKzkwOSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBleHRlcm4gc2l6ZV90IHJ0YXR0cl9zdHJsY3B5KGNoYXIgKmRlc3QsIGNvbnN0IHN0cnVjdCBydGF0dHIgKnJ0YSwgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yd3NlbS5oIGIvaW5jbHVkZS9saW51eC9yd3NlbS5oCmluZGV4IGJmYjk4ODguLmY5OWZlOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcndzZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3J3c2VtLmgKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2MuaCBiL2luY2x1ZGUvbGludXgvc2NjLmgKaW5kZXggODg1YTRhMC4uMzQ5NWJkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjYy5oCkBAIC0zLDcgKzMsNiBAQAogI2lmbmRlZglfU0NDX0gKICNkZWZpbmUJX1NDQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogc2VsZWN0aW9uIG9mIGhhcmR3YXJlIHR5cGVzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAyOWI3ZDRmLi4yNjdmMTUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xLDkgKzEsNDYgQEAKICNpZm5kZWYgX0xJTlVYX1NDSEVEX0gKICNkZWZpbmUgX0xJTlVYX1NDSEVEX0gKIAorI2luY2x1ZGUgPGxpbnV4L2F1eHZlYy5oPgkvKiBGb3IgQVRfVkVDVE9SX1NJWkUgKi8KKworLyoKKyAqIGNsb25pbmcgZmxhZ3M6CisgKi8KKyNkZWZpbmUgQ1NJR05BTAkJMHgwMDAwMDBmZgkvKiBzaWduYWwgbWFzayB0byBiZSBzZW50IGF0IGV4aXQgKi8KKyNkZWZpbmUgQ0xPTkVfVk0JMHgwMDAwMDEwMAkvKiBzZXQgaWYgVk0gc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzICovCisjZGVmaW5lIENMT05FX0ZTCTB4MDAwMDAyMDAJLyogc2V0IGlmIGZzIGluZm8gc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzICovCisjZGVmaW5lIENMT05FX0ZJTEVTCTB4MDAwMDA0MDAJLyogc2V0IGlmIG9wZW4gZmlsZXMgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzICovCisjZGVmaW5lIENMT05FX1NJR0hBTkQJMHgwMDAwMDgwMAkvKiBzZXQgaWYgc2lnbmFsIGhhbmRsZXJzIGFuZCBibG9ja2VkIHNpZ25hbHMgc2hhcmVkICovCisjZGVmaW5lIENMT05FX1BUUkFDRQkweDAwMDAyMDAwCS8qIHNldCBpZiB3ZSB3YW50IHRvIGxldCB0cmFjaW5nIGNvbnRpbnVlIG9uIHRoZSBjaGlsZCB0b28gKi8KKyNkZWZpbmUgQ0xPTkVfVkZPUksJMHgwMDAwNDAwMAkvKiBzZXQgaWYgdGhlIHBhcmVudCB3YW50cyB0aGUgY2hpbGQgdG8gd2FrZSBpdCB1cCBvbiBtbV9yZWxlYXNlICovCisjZGVmaW5lIENMT05FX1BBUkVOVAkweDAwMDA4MDAwCS8qIHNldCBpZiB3ZSB3YW50IHRvIGhhdmUgdGhlIHNhbWUgcGFyZW50IGFzIHRoZSBjbG9uZXIgKi8KKyNkZWZpbmUgQ0xPTkVfVEhSRUFECTB4MDAwMTAwMDAJLyogU2FtZSB0aHJlYWQgZ3JvdXA/ICovCisjZGVmaW5lIENMT05FX05FV05TCTB4MDAwMjAwMDAJLyogTmV3IG5hbWVzcGFjZSBncm91cD8gKi8KKyNkZWZpbmUgQ0xPTkVfU1lTVlNFTQkweDAwMDQwMDAwCS8qIHNoYXJlIHN5c3RlbSBWIFNFTV9VTkRPIHNlbWFudGljcyAqLworI2RlZmluZSBDTE9ORV9TRVRUTFMJMHgwMDA4MDAwMAkvKiBjcmVhdGUgYSBuZXcgVExTIGZvciB0aGUgY2hpbGQgKi8KKyNkZWZpbmUgQ0xPTkVfUEFSRU5UX1NFVFRJRAkweDAwMTAwMDAwCS8qIHNldCB0aGUgVElEIGluIHRoZSBwYXJlbnQgKi8KKyNkZWZpbmUgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQJMHgwMDIwMDAwMAkvKiBjbGVhciB0aGUgVElEIGluIHRoZSBjaGlsZCAqLworI2RlZmluZSBDTE9ORV9ERVRBQ0hFRAkJMHgwMDQwMDAwMAkvKiBVbnVzZWQsIGlnbm9yZWQgKi8KKyNkZWZpbmUgQ0xPTkVfVU5UUkFDRUQJCTB4MDA4MDAwMDAJLyogc2V0IGlmIHRoZSB0cmFjaW5nIHByb2Nlc3MgY2FuJ3QgZm9yY2UgQ0xPTkVfUFRSQUNFIG9uIHRoaXMgY2xvbmUgKi8KKyNkZWZpbmUgQ0xPTkVfQ0hJTERfU0VUVElECTB4MDEwMDAwMDAJLyogc2V0IHRoZSBUSUQgaW4gdGhlIGNoaWxkICovCisjZGVmaW5lIENMT05FX1NUT1BQRUQJCTB4MDIwMDAwMDAJLyogU3RhcnQgaW4gc3RvcHBlZCBzdGF0ZSAqLworCisvKgorICogU2NoZWR1bGluZyBwb2xpY2llcworICovCisjZGVmaW5lIFNDSEVEX05PUk1BTAkJMAorI2RlZmluZSBTQ0hFRF9GSUZPCQkxCisjZGVmaW5lIFNDSEVEX1JSCQkyCisjZGVmaW5lIFNDSEVEX0JBVENICQkzCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBzY2hlZF9wYXJhbSB7CisJaW50IHNjaGVkX3ByaW9yaXR5OworfTsKKwogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgkvKiBmb3IgSFogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zNywzMyArNzQsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CiAKLSNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4JLyogRm9yIEFUX1ZFQ1RPUl9TSVpFICovCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogc3RydWN0IGV4ZWNfZG9tYWluOwogCiAvKgotICogY2xvbmluZyBmbGFnczoKLSAqLwotI2RlZmluZSBDU0lHTkFMCQkweDAwMDAwMGZmCS8qIHNpZ25hbCBtYXNrIHRvIGJlIHNlbnQgYXQgZXhpdCAqLwotI2RlZmluZSBDTE9ORV9WTQkweDAwMDAwMTAwCS8qIHNldCBpZiBWTSBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMgKi8KLSNkZWZpbmUgQ0xPTkVfRlMJMHgwMDAwMDIwMAkvKiBzZXQgaWYgZnMgaW5mbyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMgKi8KLSNkZWZpbmUgQ0xPTkVfRklMRVMJMHgwMDAwMDQwMAkvKiBzZXQgaWYgb3BlbiBmaWxlcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMgKi8KLSNkZWZpbmUgQ0xPTkVfU0lHSEFORAkweDAwMDAwODAwCS8qIHNldCBpZiBzaWduYWwgaGFuZGxlcnMgYW5kIGJsb2NrZWQgc2lnbmFscyBzaGFyZWQgKi8KLSNkZWZpbmUgQ0xPTkVfUFRSQUNFCTB4MDAwMDIwMDAJLyogc2V0IGlmIHdlIHdhbnQgdG8gbGV0IHRyYWNpbmcgY29udGludWUgb24gdGhlIGNoaWxkIHRvbyAqLwotI2RlZmluZSBDTE9ORV9WRk9SSwkweDAwMDA0MDAwCS8qIHNldCBpZiB0aGUgcGFyZW50IHdhbnRzIHRoZSBjaGlsZCB0byB3YWtlIGl0IHVwIG9uIG1tX3JlbGVhc2UgKi8KLSNkZWZpbmUgQ0xPTkVfUEFSRU5UCTB4MDAwMDgwMDAJLyogc2V0IGlmIHdlIHdhbnQgdG8gaGF2ZSB0aGUgc2FtZSBwYXJlbnQgYXMgdGhlIGNsb25lciAqLwotI2RlZmluZSBDTE9ORV9USFJFQUQJMHgwMDAxMDAwMAkvKiBTYW1lIHRocmVhZCBncm91cD8gKi8KLSNkZWZpbmUgQ0xPTkVfTkVXTlMJMHgwMDAyMDAwMAkvKiBOZXcgbmFtZXNwYWNlIGdyb3VwPyAqLwotI2RlZmluZSBDTE9ORV9TWVNWU0VNCTB4MDAwNDAwMDAJLyogc2hhcmUgc3lzdGVtIFYgU0VNX1VORE8gc2VtYW50aWNzICovCi0jZGVmaW5lIENMT05FX1NFVFRMUwkweDAwMDgwMDAwCS8qIGNyZWF0ZSBhIG5ldyBUTFMgZm9yIHRoZSBjaGlsZCAqLwotI2RlZmluZSBDTE9ORV9QQVJFTlRfU0VUVElECTB4MDAxMDAwMDAJLyogc2V0IHRoZSBUSUQgaW4gdGhlIHBhcmVudCAqLwotI2RlZmluZSBDTE9ORV9DSElMRF9DTEVBUlRJRAkweDAwMjAwMDAwCS8qIGNsZWFyIHRoZSBUSUQgaW4gdGhlIGNoaWxkICovCi0jZGVmaW5lIENMT05FX0RFVEFDSEVECQkweDAwNDAwMDAwCS8qIFVudXNlZCwgaWdub3JlZCAqLwotI2RlZmluZSBDTE9ORV9VTlRSQUNFRAkJMHgwMDgwMDAwMAkvKiBzZXQgaWYgdGhlIHRyYWNpbmcgcHJvY2VzcyBjYW4ndCBmb3JjZSBDTE9ORV9QVFJBQ0Ugb24gdGhpcyBjbG9uZSAqLwotI2RlZmluZSBDTE9ORV9DSElMRF9TRVRUSUQJMHgwMTAwMDAwMAkvKiBzZXQgdGhlIFRJRCBpbiB0aGUgY2hpbGQgKi8KLSNkZWZpbmUgQ0xPTkVfU1RPUFBFRAkJMHgwMjAwMDAwMAkvKiBTdGFydCBpbiBzdG9wcGVkIHN0YXRlICovCi0KLS8qCiAgKiBMaXN0IG9mIGZsYWdzIHdlIHdhbnQgdG8gc2hhcmUgZm9yIGtlcm5lbCB0aHJlYWRzLAogICogaWYgb25seSBiZWNhdXNlIHRoZXkgYXJlIG5vdCB1c2VkIGJ5IHRoZW0gYW55d2F5LgogICovCkBAIC0xMDMsMTMgKzEyNCw2IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBucl9hY3RpdmUodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBucl9pb3dhaXQodm9pZCk7CiAKLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiAvKgogICogVGFzayBzdGF0ZSBiaXRtYXNrLiBOT1RFISBUaGVzZSBiaXRzIGFyZSBhbHNvCkBAIC0xNTYsMjAgKzE3MCw2IEBACiAvKiBUYXNrIGNvbW1hbmQgbmFtZSBsZW5ndGggKi8KICNkZWZpbmUgVEFTS19DT01NX0xFTiAxNgogCi0vKgotICogU2NoZWR1bGluZyBwb2xpY2llcwotICovCi0jZGVmaW5lIFNDSEVEX05PUk1BTAkJMAotI2RlZmluZSBTQ0hFRF9GSUZPCQkxCi0jZGVmaW5lIFNDSEVEX1JSCQkyCi0jZGVmaW5lIFNDSEVEX0JBVENICQkzCi0KLXN0cnVjdCBzY2hlZF9wYXJhbSB7Ci0JaW50IHNjaGVkX3ByaW9yaXR5OwotfTsKLQotI2lmZGVmIF9fS0VSTkVMX18KLQogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKIC8qCkBAIC00OTQsNyArNDk0LDcgQEAKIAlhdG9taWNfdCBwcm9jZXNzZXM7CS8qIEhvdyBtYW55IHByb2Nlc3NlcyBkb2VzIHRoaXMgdXNlciBoYXZlPyAqLwogCWF0b21pY190IGZpbGVzOwkJLyogSG93IG1hbnkgb3BlbiBmaWxlcyBkb2VzIHRoaXMgdXNlciBoYXZlPyAqLwogCWF0b21pY190IHNpZ3BlbmRpbmc7CS8qIEhvdyBtYW55IHBlbmRpbmcgc2lnbmFscyBkb2VzIHRoaXMgdXNlciBoYXZlPyAqLwotI2lmZGVmIENPTkZJR19JTk9USUZZCisjaWZkZWYgQ09ORklHX0lOT1RJRllfVVNFUgogCWF0b21pY190IGlub3RpZnlfd2F0Y2hlczsgLyogSG93IG1hbnkgaW5vdGlmeSB3YXRjaGVzIGRvZXMgdGhpcyB1c2VyIGhhdmU/ICovCiAJYXRvbWljX3QgaW5vdGlmeV9kZXZzOwkvKiBIb3cgbWFueSBpbm90aWZ5IGRldnMgZG9lcyB0aGlzIHVzZXIgaGF2ZSBvcGVuZWQ/ICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oIGIvaW5jbHVkZS9saW51eC9zZWNjb21wLmgKaW5kZXggY2QyNzczYi4uM2U4YjFjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWNjb21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWNjb21wLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9TRUNDT01QX0gKICNkZWZpbmUgX0xJTlVYX1NFQ0NPTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfU0VDQ09NUAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlbS5oIGIvaW5jbHVkZS9saW51eC9zZW0uaAppbmRleCAzYzFmMTEyLi45YWFmZmIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlbS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VtLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9MSU5VWF9TRU1fSAogCiAjaW5jbHVkZSA8bGludXgvaXBjLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAvKiBzZW1vcCBmbGFncyAqLwogI2RlZmluZSBTRU1fVU5ETyAgICAgICAgMHgxMDAwICAvKiB1bmRvIHRoZSBvcGVyYXRpb24gb24gZXhpdCAqLwpAQCAtNzgsNiArNzcsNyBAQAogI2RlZmluZSBTRU1VU1ogIDIwCQkvKiBzaXplb2Ygc3RydWN0IHNlbV91bmRvICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKaW5kZXggNWEwOTU1Ny4uN2JjNWM3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKQEAgLTI2LDcgKzI2LDYgQEAKICAqIGJ5IEtlaXRoIE93ZW5zIGFuZCBBbmRyZWEgQXJjYW5nZWxpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbFAuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsUC5oCmluZGV4IDJiOWU2YjkuLmU4MTFhNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsUC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsUC5oCkBAIC0xOSw3ICsxOSw2IEBACiAgKiBGb3IgZGVmaW5pdGlvbnMgb2YgdGhlIGZsYWdzIGZpZWxkLCBzZWUgdHR5LmgKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IGJkMTQ4NTguLjk0YjkyODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTEzMiw3ICsxMzIsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKaW5kZXggNzA3MzlmNS4uMWU0Y2U3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCkBAIC0xLDEyICsxLDEyIEBACiAjaWZuZGVmIF9MSU5VWF9TSUdOQUxfSAogI2RlZmluZSBfTElOVVhfU0lHTkFMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KICNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAvKgogICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggOTNlNGRiMi4uNjZmODgxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmIF9MSU5VWF9TS0JVRkZfSAogI2RlZmluZSBfTElOVVhfU0tCVUZGX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCAyZDk4NWQ1Li45ZGM5MzE2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTExLDcgKzExLDYgQEAKIAogdHlwZWRlZiBzdHJ1Y3Qga21lbV9jYWNoZSBrbWVtX2NhY2hlX3Q7CiAKLSNpbmNsdWRlCTxsaW51eC9jb25maWcuaD4JLyoga21hbGxvY19zaXplcy5oIG5lZWRzIENPTkZJR18gb3B0aW9ucyAqLwogI2luY2x1ZGUJPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUJPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlCTxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbWJfZnMuaCBiL2luY2x1ZGUvbGludXgvc21iX2ZzLmgKaW5kZXggNjIxYTNkMy4uMzY3ZDZjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbWJfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtYl9mcy5oCkBAIC0xMCw4ICsxMCw2IEBACiAjZGVmaW5lIF9MSU5VWF9TTUJfRlNfSAogCiAjaW5jbHVkZSA8bGludXgvc21iLmg+Ci0jaW5jbHVkZSA8bGludXgvc21iX2ZzX2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zbWJfZnNfc2IuaD4KIAogLyoKICAqIGlvY3RsIGNvbW1hbmRzCkBAIC0yNCw2ICsyMiw4IEBACiAKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zbWJfZnNfaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYl9mc19zYi5oPgogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcC5oIGIvaW5jbHVkZS9saW51eC9zbXAuaAppbmRleCBlMmZhM2FiLi5jOTNjM2ZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wLmgKQEAgLTYsNyArNiw2IEBACiAgKgkJQWxhbiBDb3guIDxhbGFuQHJlZGhhdC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBleHRlcm4gdm9pZCBjcHVfaWRsZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9zbXBfbG9jay5oCmluZGV4IGZhMWZmM2IuLmNmNzE1YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21wX2xvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcF9sb2NrLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTElOVVhfU01QTE9DS19ICiAjZGVmaW5lIF9fTElOVVhfU01QTE9DS19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZmRlZiBDT05GSUdfTE9DS19LRVJORUwKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaAppbmRleCA5YWIyZGRkLi4zNjE0MDkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTE4LDggKzE4LDYgQEAKIAogI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkJLyogZm9yIENPTkZJR19DT01QQVQgKi8KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NvY2tldC5oPgkJCS8qIGFyY2gtZGVwZW5kZW50IGRlZmluZXMJKi8KICNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CQkvKiB0aGUgU0lPQ3h4eCBJL08gY29udHJvbHMJKi8KICNpbmNsdWRlIDxsaW51eC91aW8uaD4JCQkvKiBpb3ZlYyBzdXBwb3J0CQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCmluZGV4IDc5OWJlNjcuLmFlMjNiZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKICAqICBsaW51eC9zcGlubG9jay5oOiAgICAgYnVpbGRzIHRoZSBmaW5hbCBzcGluXyooKSBBUElzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0b3BfbWFjaGluZS5oIGIvaW5jbHVkZS9saW51eC9zdG9wX21hY2hpbmUuaAppbmRleCAxNTFhODAzZS4uNWJmYzU1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdG9wX21hY2hpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0b3BfbWFjaGluZS5oCkBAIC00LDcgKzQsNiBAQAogICAgdmVyeSBoZWF2eSBsb2NrLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIGdyYWJiaW5nIGV2ZXJ5IHNwaW5sb2NrCiAgICAoYW5kIG1vcmUpLiAgU28gdGhlICJyZWFkIiBzaWRlIHRvIHN1Y2ggYSBsb2NrIGlzIGFueXRoaW5nIHdoaWNoCiAgICBkaWFibGVzIHByZWVlbXB0LiAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCmluZGV4IGJlNDc3MmUuLmE2ZGUzMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKQEAgLTExLDcgKzExLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9tc2dfcHJvdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCmluZGV4IDFhNDJkOTAuLmU0NzI5YWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvZGVidWcuaApAQCAtOSwxOSArOSw2IEBACiAjaWZuZGVmIF9MSU5VWF9TVU5SUENfREVCVUdfSF8KICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19ERUJVR19IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi0vKgotICogRW5hYmxlIFJQQyBkZWJ1Z2dpbmcvcHJvZmlsaW5nLgotICovCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotI2RlZmluZSAgUlBDX0RFQlVHCi0jZW5kaWYKLS8qICNkZWZpbmUgIFJQQ19QUk9GSUxFICovCi0KIC8qCiAgKiBSUEMgZGVidWcgZmFjaWxpdGllcwogICovCkBAIC00MSw2ICsyOCwxNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworLyoKKyAqIEVuYWJsZSBSUEMgZGVidWdnaW5nL3Byb2ZpbGluZy4KKyAqLworI2lmZGVmIENPTkZJR19TWVNDVEwKKyNkZWZpbmUgIFJQQ19ERUJVRworI2VuZGlmCisvKiAjZGVmaW5lICBSUENfUFJPRklMRSAqLworCiAvKgogICogRGVidWdnaW5nIG1hY3JvcyBldGMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3RhdHMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N0YXRzLmgKaW5kZXggZDkzYzI0Yi4uNWZhMGYyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3RhdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdGF0cy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfTElOVVhfU1VOUlBDX1NUQVRTX0gKICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19TVEFUU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAKIHN0cnVjdCBycGNfc3RhdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaCBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCmluZGV4IDM3YzFjNzYuLjk2ZTMxYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCkBAIC02LDcgKzYsNiBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggZjAzYzI0Ny4uYWNhOWJmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9TV0FQX0gKICNkZWZpbmUgX0xJTlVYX1NXQVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggNjBkNDllNS4uYmQ2N2E0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtNTQsNyArNTQsNiBAQAogc3RydWN0IGNvbXBhdF90aW1ldmFsOwogc3RydWN0IHJvYnVzdF9saXN0X2hlYWQ7CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Fpb19hYmkuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c3JxLmggYi9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKaW5kZXggZWE4MTliOC4uNDgxMmZmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNycS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzcnEuaApAQCAtMTEsNyArMTEsNiBAQAogICoJYmFzZWQgdXBvbiBkaXNjdXNpb25zIGluIGlyYzovL2lyYy5vcGVucHJvamVjdHMubmV0LyNrZXJuZWxuZXdiaWVzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3QgcHRfcmVnczsKIHN0cnVjdCB0dHlfc3RydWN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggYzkwZGFhNS4uNDIwYTY4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0xNjAsNyArMTYwLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RocmVhZHMuaCBiL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oCmluZGV4IGU2NDZiY2QuLjM4ZDFhNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfVEhSRUFEU19ICiAjZGVmaW5lIF9MSU5VWF9USFJFQURTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhlIGRlZmF1bHQgbGltaXQgZm9yIHRoZSBuciBvZiB0aHJlYWRzIGlzIG5vdyBpbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lci5oIGIvaW5jbHVkZS9saW51eC90aW1lci5oCmluZGV4IDBhNDg1YmUuLmM5ODIzMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9USU1FUl9ICiAjZGVmaW5lIF9MSU5VWF9USU1FUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXguaCBiL2luY2x1ZGUvbGludXgvdGltZXguaAppbmRleCAwMzkxNGI3Li4zNGQzY2NmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1leC5oCkBAIC01Myw3ICs1Myw2IEBACiAjaWZuZGVmIF9MSU5VWF9USU1FWF9ICiAjZGVmaW5lIF9MSU5VWF9USU1FWF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHkuaCBiL2luY2x1ZGUvbGludXgvdHR5LmgKaW5kZXggZjEzZjQ5YS4uZTg5OGVlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC0xNiw3ICsxNiw2IEBACiAJCSAgIGNvbnNvbGVzIDE2IGFuZCBoaWdoZXIgKHNpbmNlIGl0IHJldHVybnMgYSBzaG9ydCkgKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IDEwNDZjN2EuLmE1ZTQ2ZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9MSU5VWF9UWVBFU19ICiAKICNpZmRlZglfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgQklUU19UT19MT05HUyhiaXRzKSBcCiAJKCgoYml0cykrQklUU19QRVJfTE9ORy0xKS9CSVRTX1BFUl9MT05HKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZHAuaCBiL2luY2x1ZGUvbGludXgvdWRwLmgKaW5kZXggODVhNTU2NS4uYmRkMzliZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91ZHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VkcC5oCkBAIC0zNSw3ICszNSw2IEBACiAjZGVmaW5lIFVEUF9FTkNBUF9FU1BJTlVEUAkyIC8qIGRyYWZ0LWlldGYtaXBzZWMtdWRwLWVuY2Fwcy0wNiAqLwogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIGIvaW5jbHVkZS9saW51eC91ZnNfZnMuaAppbmRleCA4NDNhZWFhLi44NmI1YjQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VuaXN0ZC5oIGIvaW5jbHVkZS9saW51eC91bmlzdGQuaAppbmRleCAxMGVkOTgzLi5jMThjNjBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvbGludXgvdW5pc3RkLmgKQEAgLTEsNyArMSw5IEBACiAjaWZuZGVmIF9MSU5VWF9VTklTVERfSF8KICNkZWZpbmUgX0xJTlVYX1VOSVNURF9IXwogCisjaWZkZWYgX19LRVJORUxfXwogZXh0ZXJuIGludCBlcnJubzsKKyNlbmRpZgogCiAvKgogICogSW5jbHVkZSBtYWNoaW5lIHNwZWNpZmljIHN5c2NhbGxYIG1hY3JvcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggZTM0ZTVlMy4uMWY0OTJjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC0xMCw3ICsxMCw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPiAgICAgICAgLyogZm9yIC1FTk9ERVYgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiBmb3IgbWRlbGF5KCkgKi8KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4JLyogZm9yIGluX2ludGVycnVwdCgpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAppbmRleCBiMmQwODk4Li42MDg0ODdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9fTElOVVhfVVNCX1VTVUFMX0gKICNkZWZpbmUgX19MSU5VWF9VU0JfVVNVQUxfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFdlIHNob3VsZCBkbyB0aGlzIGZvciBjbGVhbmxpbmVzcy4uLiBCdXQgb3RoZXIgdXNiX2Zvby5oIGRvIG5vdCBkbyB0aGlzLiAqLwogLyogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaCBiL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmgKaW5kZXggODg1OWYwYi4uN2I3YWFkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oCkBAIC0xMjMsNiArMTIzLDcgQEAKIAljaGFyIHBvcnQgWzEyN107CS8qIGUuZy4gcG9ydCAzIGNvbm5lY3RzIHRvIGRldmljZSAyNyAqLwogfTsKIAorI2lmZGVmIF9fS0VSTkVMX18KICNpZmRlZiBDT05GSUdfQ09NUEFUCiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiBzdHJ1Y3QgdXNiZGV2ZnNfdXJiMzIgewpAQCAtMTQ3LDYgKzE0OCw3IEBACiAJY29tcGF0X2NhZGRyX3QgZGF0YTsKIH07CiAjZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNkZWZpbmUgVVNCREVWRlNfQ09OVFJPTCAgICAgICAgICAgX0lPV1IoJ1UnLCAwLCBzdHJ1Y3QgdXNiZGV2ZnNfY3RybHRyYW5zZmVyKQogI2RlZmluZSBVU0JERVZGU19CVUxLICAgICAgICAgICAgICBfSU9XUignVScsIDIsIHN0cnVjdCB1c2JkZXZmc19idWxrdHJhbnNmZXIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Z0X2J1ZmZlci5oIGIvaW5jbHVkZS9saW51eC92dF9idWZmZXIuaAppbmRleCAxZjdiYTM2Li4wNTdkYjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Z0X2J1ZmZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvdnRfYnVmZmVyLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX0xJTlVYX1ZUX0JVRkZFUl9IXwogI2RlZmluZSBfTElOVVhfVlRfQlVGRkVSX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1ZHQV9DT05TT0xFKSB8fCBkZWZpbmVkKENPTkZJR19NREFfQ09OU09MRSkKICNpbmNsdWRlIDxhc20vdmdhLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaCBiL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oCmluZGV4IGZhYjVhZWQuLjk0MGQwMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oCisrKyBiL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oCkBAIC02LDcgKzYsNiBAQAogICogd2l0aCBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgdGhlIHZ0IHBhY2thZ2UKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdnQuaD4KICNpbmNsdWRlIDxsaW51eC9rZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YWl0LmggYi9pbmNsdWRlL2xpbnV4L3dhaXQuaAppbmRleCBkMjg1MTgyLi41NDRlODU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dhaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dhaXQuaApAQCAtMTksNyArMTksNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dhbnJvdXRlci5oIGIvaW5jbHVkZS9saW51eC93YW5yb3V0ZXIuaAppbmRleCAxYjZiNzZhLi4yY2QwNTAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dhbnJvdXRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvd2Fucm91dGVyLmgKQEAgLTQ0LDggKzQ0LDYgQEAKICogSmFuIDAyLCAxOTk3CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uIChiYXNlZCBvbiB3YW5waXBlLmgpLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPiAgICAgICAvKiBTdXBwb3J0IGZvciBTTVAgTG9ja2luZyAqLwotCiAjaWZuZGVmCV9ST1VURVJfSAogI2RlZmluZQlfUk9VVEVSX0gKIApAQCAtNDU3LDYgKzQ1NSw4IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4JCS8qIHN1cHBvcnQgZm9yIGRldmljZSBkcml2ZXJzICovCiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgkvKiBwcm9jIGZpbGVzeXN0ZW0gcHJhZ21hdGljcyAqLwogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgkvKiBzdXBwb3J0IGZvciBuZXR3b3JrIGRyaXZlcnMgKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPiAgICAgLyogU3VwcG9ydCBmb3IgU01QIExvY2tpbmcgKi8KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBXQU4gZGV2aWNlIGRhdGEgc3BhY2UuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL210ZC1hYmkuaCBiL2luY2x1ZGUvbXRkL210ZC1hYmkuaAppbmRleCBiNTk5NGVhLi4zMTMyOWZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9tdGQtYWJpLmgKKysrIGIvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCkBAIC03LDggKzcsOSBAQAogI2lmbmRlZiBfX01URF9BQklfSF9fCiAjZGVmaW5lIF9fTVREX0FCSV9IX18KIAotI2lmbmRlZiBfX0tFUk5FTF9fIC8qIFVyZ2guIFRoZSB3aG9sZSBwb2ludCBvZiBzcGxpdHRpbmcgdGhpcyBvdXQgaW50bwotCQkgICAgc2VwYXJhdGUgZmlsZXMgd2FzIHRvIGF2b2lkICNpZmRlZiBfX0tFUk5FTF9fICovCisjaWZuZGVmIF9fS0VSTkVMX18gCisvKiBVcmdoLiBUaGUgd2hvbGUgcG9pbnQgb2Ygc3BsaXR0aW5nIHRoaXMgb3V0IGludG8KKyAgIHNlcGFyYXRlIGZpbGVzIHdhcyB0byBhdm9pZCAjaWZkZWYgX19LRVJORUxfXyAqLwogI2RlZmluZSBfX3VzZXIKICNlbmRpZgogCkBAIC0yOCwyOCArMjksMTcgQEAKICNkZWZpbmUgTVREX1JPTQkJCTIKICNkZWZpbmUgTVREX05PUkZMQVNICQkzCiAjZGVmaW5lIE1URF9OQU5ERkxBU0gJCTQKLSNkZWZpbmUgTVREX1BFUk9NCQk1CiAjZGVmaW5lIE1URF9EQVRBRkxBU0gJCTYKLSNkZWZpbmUgTVREX09USEVSCQkxNAotI2RlZmluZSBNVERfVU5LTk9XTgkJMTUKIAotI2RlZmluZSBNVERfQ0xFQVJfQklUUwkJMSAgICAgICAvLyBCaXRzIGNhbiBiZSBjbGVhcmVkIChmbGFzaCkKLSNkZWZpbmUgTVREX1NFVF9CSVRTCQkyICAgICAgIC8vIEJpdHMgY2FuIGJlIHNldAotI2RlZmluZSBNVERfRVJBU0VBQkxFCQk0ICAgICAgIC8vIEhhcyBhbiBlcmFzZSBmdW5jdGlvbgotI2RlZmluZSBNVERfV1JJVEVCX1dSSVRFQUJMRQk4ICAgICAgIC8vIERpcmVjdCBJTyBpcyBwb3NzaWJsZQotI2RlZmluZSBNVERfVk9MQVRJTEUJCTE2ICAgICAgLy8gU2V0IGZvciBSQU1zCi0jZGVmaW5lIE1URF9YSVAJCQkzMgkvLyBlWGVjdXRlLUluLVBsYWNlIHBvc3NpYmxlCi0jZGVmaW5lIE1URF9PT0IJCQk2NAkvLyBPdXQtb2YtYmFuZCBkYXRhIChOQU5EIGZsYXNoKQotI2RlZmluZSBNVERfRUNDCQkJMTI4CS8vIERldmljZSBjYXBhYmxlIG9mIGF1dG9tYXRpYyBFQ0MKLSNkZWZpbmUgTVREX05PX1ZJUlRCTE9DS1MJMjU2CS8vIFZpcnR1YWwgYmxvY2tzIG5vdCBhbGxvd2VkCi0jZGVmaW5lIE1URF9QUk9HUkFNX1JFR0lPTlMJNTEyCS8vIENvbmZpZ3VyYWJsZSBQcm9ncmFtbWluZyBSZWdpb25zCisjZGVmaW5lIE1URF9XUklURUFCTEUJCTB4NDAwCS8qIERldmljZSBpcyB3cml0ZWFibGUgKi8KKyNkZWZpbmUgTVREX0JJVF9XUklURUFCTEUJMHg4MDAJLyogU2luZ2xlIGJpdHMgY2FuIGJlIGZsaXBwZWQgKi8KKyNkZWZpbmUgTVREX05PX0VSQVNFCQkweDEwMDAJLyogTm8gZXJhc2UgbmVjZXNzYXJ5ICovCiAKIC8vIFNvbWUgY29tbW9uIGRldmljZXMgLyBjb21iaW5hdGlvbnMgb2YgY2FwYWJpbGl0aWVzCiAjZGVmaW5lIE1URF9DQVBfUk9NCQkwCi0jZGVmaW5lIE1URF9DQVBfUkFNCQkoTVREX0NMRUFSX0JJVFN8TVREX1NFVF9CSVRTfE1URF9XUklURUJfV1JJVEVBQkxFKQotI2RlZmluZSBNVERfQ0FQX05PUkZMQVNIICAgICAgICAoTVREX0NMRUFSX0JJVFN8TVREX0VSQVNFQUJMRSkKLSNkZWZpbmUgTVREX0NBUF9OQU5ERkxBU0ggICAgICAgKE1URF9DTEVBUl9CSVRTfE1URF9FUkFTRUFCTEV8TVREX09PQikKLSNkZWZpbmUgTVREX1dSSVRFQUJMRQkJKE1URF9DTEVBUl9CSVRTfE1URF9TRVRfQklUUykKKyNkZWZpbmUgTVREX0NBUF9SQU0JCShNVERfV1JJVEVBQkxFIHwgTVREX0JJVF9XUklURUFCTEUgfCBNVERfTk9fRVJBU0UpCisjZGVmaW5lIE1URF9DQVBfTk9SRkxBU0gJKE1URF9XUklURUFCTEUgfCBNVERfQklUX1dSSVRFQUJMRSkKKyNkZWZpbmUgTVREX0NBUF9OQU5ERkxBU0gJKE1URF9XUklURUFCTEUpCiAKIAogLy8gVHlwZXMgb2YgYXV0b21hdGljIEVDQy9DaGVja3N1bSBhdmFpbGFibGUKQEAgLTc0LDcgKzY0LDcgQEAKIAl1aW50MzJfdCBmbGFnczsKIAl1aW50MzJfdCBzaXplOwkgLy8gVG90YWwgc2l6ZSBvZiB0aGUgTVRECiAJdWludDMyX3QgZXJhc2VzaXplOwotCXVpbnQzMl90IG9vYmJsb2NrOyAgLy8gU2l6ZSBvZiBPT0IgYmxvY2tzIChlLmcuIDUxMikKKwl1aW50MzJfdCB3cml0ZXNpemU7CiAJdWludDMyX3Qgb29ic2l6ZTsgICAvLyBBbW91bnQgb2YgT09CIGRhdGEgcGVyIGJsb2NrIChlLmcuIDE2KQogCXVpbnQzMl90IGVjY3R5cGU7CiAJdWludDMyX3QgZWNjc2l6ZTsKQEAgLTk0LDEyICs4NCwxMiBAQAogCXVpbnQzMl90IGxvY2tlZDsKIH07CiAKLSNkZWZpbmUgTUVNR0VUSU5GTyAgICAgICAgICAgICAgX0lPUignTScsIDEsIHN0cnVjdCBtdGRfaW5mb191c2VyKQotI2RlZmluZSBNRU1FUkFTRSAgICAgICAgICAgICAgICBfSU9XKCdNJywgMiwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKLSNkZWZpbmUgTUVNV1JJVEVPT0IgICAgICAgICAgICAgX0lPV1IoJ00nLCAzLCBzdHJ1Y3QgbXRkX29vYl9idWYpCi0jZGVmaW5lIE1FTVJFQURPT0IgICAgICAgICAgICAgIF9JT1dSKCdNJywgNCwgc3RydWN0IG10ZF9vb2JfYnVmKQotI2RlZmluZSBNRU1MT0NLICAgICAgICAgICAgICAgICBfSU9XKCdNJywgNSwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKLSNkZWZpbmUgTUVNVU5MT0NLICAgICAgICAgICAgICAgX0lPVygnTScsIDYsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTUdFVElORk8JCV9JT1IoJ00nLCAxLCBzdHJ1Y3QgbXRkX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNRVJBU0UJCV9JT1coJ00nLCAyLCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQorI2RlZmluZSBNRU1XUklURU9PQgkJX0lPV1IoJ00nLCAzLCBzdHJ1Y3QgbXRkX29vYl9idWYpCisjZGVmaW5lIE1FTVJFQURPT0IJCV9JT1dSKCdNJywgNCwgc3RydWN0IG10ZF9vb2JfYnVmKQorI2RlZmluZSBNRU1MT0NLCQkJX0lPVygnTScsIDUsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTVVOTE9DSwkJX0lPVygnTScsIDYsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCiAjZGVmaW5lIE1FTUdFVFJFR0lPTkNPVU5UCV9JT1IoJ00nLCA3LCBpbnQpCiAjZGVmaW5lIE1FTUdFVFJFR0lPTklORk8JX0lPV1IoJ00nLCA4LCBzdHJ1Y3QgcmVnaW9uX2luZm9fdXNlcikKICNkZWZpbmUgTUVNU0VUT09CU0VMCQlfSU9XKCdNJywgOSwgc3RydWN0IG5hbmRfb29iaW5mbykKQEAgLTEwOSw4ICs5OSwxNSBAQAogI2RlZmluZSBPVFBTRUxFQ1QJCV9JT1IoJ00nLCAxMywgaW50KQogI2RlZmluZSBPVFBHRVRSRUdJT05DT1VOVAlfSU9XKCdNJywgMTQsIGludCkKICNkZWZpbmUgT1RQR0VUUkVHSU9OSU5GTwlfSU9XKCdNJywgMTUsIHN0cnVjdCBvdHBfaW5mbykKLSNkZWZpbmUgT1RQTE9DSwkJX0lPUignTScsIDE2LCBzdHJ1Y3Qgb3RwX2luZm8pCisjZGVmaW5lIE9UUExPQ0sJCQlfSU9SKCdNJywgMTYsIHN0cnVjdCBvdHBfaW5mbykKKyNkZWZpbmUgRUNDR0VUTEFZT1VUCQlfSU9SKCdNJywgMTcsIHN0cnVjdCBuYW5kX2VjY2xheW91dCkKKyNkZWZpbmUgRUNDR0VUU1RBVFMJCV9JT1IoJ00nLCAxOCwgc3RydWN0IG10ZF9lY2Nfc3RhdHMpCisjZGVmaW5lIE1UREZJTEVNT0RFCQlfSU8oJ00nLCAxOSkKIAorLyoKKyAqIE9ic29sZXRlIGxlZ2FjeSBpbnRlcmZhY2UuIEtlZXAgaXQgaW4gb3JkZXIgbm90IHRvIGJyZWFrIHVzZXJzcGFjZQorICogaW50ZXJmYWNlcworICovCiBzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKIAl1aW50MzJfdCB1c2VlY2M7CiAJdWludDMyX3QgZWNjYnl0ZXM7CkBAIC0xMTgsNCArMTE1LDQ2IEBACiAJdWludDMyX3QgZWNjcG9zWzMyXTsKIH07CiAKK3N0cnVjdCBuYW5kX29vYmZyZWUgeworCXVpbnQzMl90IG9mZnNldDsKKwl1aW50MzJfdCBsZW5ndGg7Cit9OworCisjZGVmaW5lIE1URF9NQVhfT09CRlJFRV9FTlRSSUVTCTgKKy8qCisgKiBFQ0MgbGF5b3V0IGNvbnRyb2wgc3RydWN0dXJlLiBFeHBvcnRlZCB0byB1c2Vyc3BhY2UgZm9yCisgKiBkaWFnbm9zaXMgYW5kIHRvIGFsbG93IGNyZWF0aW9uIG9mIHJhdyBpbWFnZXMKKyAqLworc3RydWN0IG5hbmRfZWNjbGF5b3V0IHsKKwl1aW50MzJfdCBlY2NieXRlczsKKwl1aW50MzJfdCBlY2Nwb3NbNjRdOworCXVpbnQzMl90IG9vYmF2YWlsOworCXN0cnVjdCBuYW5kX29vYmZyZWUgb29iZnJlZVtNVERfTUFYX09PQkZSRUVfRU5UUklFU107Cit9OworCisvKioKKyAqIHN0cnVjdCBtdGRfZWNjX3N0YXRzIC0gZXJyb3IgY29ycmVjdGlvbiBzdGF0dXMKKyAqCisgKiBAY29ycmVjdGVkOgludW1iZXIgb2YgY29ycmVjdGVkIGJpdHMKKyAqIEBmYWlsZWQ6CW51bWJlciBvZiB1bmNvcnJlY3RhYmxlIGVycm9ycworICogQGJhZGJsb2NrczoJbnVtYmVyIG9mIGJhZCBibG9ja3MgaW4gdGhpcyBwYXJ0aXRpb24KKyAqIEBiYnRibG9ja3M6CW51bWJlciBvZiBibG9ja3MgcmVzZXJ2ZWQgZm9yIGJhZCBibG9jayB0YWJsZXMKKyAqLworc3RydWN0IG10ZF9lY2Nfc3RhdHMgeworCXVpbnQzMl90IGNvcnJlY3RlZDsKKwl1aW50MzJfdCBmYWlsZWQ7CisJdWludDMyX3QgYmFkYmxvY2tzOworCXVpbnQzMl90IGJidGJsb2NrczsKK307CisKKy8qCisgKiBSZWFkL3dyaXRlIGZpbGUgbW9kZXMgZm9yIGFjY2VzcyB0byBNVEQKKyAqLworZW51bSBtdGRfZmlsZV9tb2RlcyB7CisJTVREX01PREVfTk9STUFMID0gTVREX09UUF9PRkYsCisJTVREX01PREVfT1RQX0ZBQ1RPUlkgPSBNVERfT1RQX0ZBQ1RPUlksCisJTVREX01PREVfT1RQX1VTRVIgPSBNVERfT1RQX1VTRVIsCisJTVREX01PREVfUkFXLAorfTsKKwogI2VuZGlmIC8qIF9fTVREX0FCSV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL210ZC11c2VyLmggYi9pbmNsdWRlL210ZC9tdGQtdXNlci5oCmluZGV4IDFjMTNmYzcuLjcxM2YzNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL210ZC11c2VyLmgKKysrIGIvaW5jbHVkZS9tdGQvbXRkLXVzZXIuaApAQCAtMTYsNSArMTYsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyIGVyYXNlX2luZm9fdDsKIHR5cGVkZWYgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIgcmVnaW9uX2luZm9fdDsKIHR5cGVkZWYgc3RydWN0IG5hbmRfb29iaW5mbyBuYW5kX29vYmluZm9fdDsKK3R5cGVkZWYgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfZWNjbGF5b3V0X3Q7CiAKICNlbmRpZiAvKiBfX01URF9VU0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaCBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKaW5kZXggNzUwZTI1MC4uM2Q3MTI1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAorKysgYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCkBAIC00NSw3ICs0NSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvaWZfaW5ldDYuaD4KICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oCmluZGV4IDQyN2RhYzkuLjc5NWY4MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3VuaXguaAorKysgYi9pbmNsdWRlL25ldC9hZl91bml4LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTElOVVhfTkVUX0FGVU5JWF9ICiAjZGVmaW5lIF9fTElOVVhfTkVUX0FGVU5JWF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC91bi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9heDI1LmggYi9pbmNsdWRlL25ldC9heDI1LmgKaW5kZXggNWJkOTk3NC4uN2NkNTI4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXgyNS5oCisrKyBiL2luY2x1ZGUvbmV0L2F4MjUuaApAQCAtNiw3ICs2LDYgQEAKICNpZm5kZWYgX0FYMjVfSAogI2RlZmluZSBfQVgyNV9IIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYXgyNS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvbXBhdC5oIGIvaW5jbHVkZS9uZXQvY29tcGF0LmgKaW5kZXggZTY1Y2JlZC4uOTg1OWI2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9uZXQvY29tcGF0LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIE5FVF9DT01QQVRfSAogI2RlZmluZSBORVRfQ09NUEFUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3Qgc29jazsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHN0LmggYi9pbmNsdWRlL25ldC9kc3QuaAppbmRleCA1MTYxZTg5Li4zNmQ1NGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc3QuaAorKysgYi9pbmNsdWRlL25ldC9kc3QuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX05FVF9EU1RfSAogI2RlZmluZSBfTkVUX0RTVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWNtcC5oIGIvaW5jbHVkZS9uZXQvaWNtcC5oCmluZGV4IGU3YzNmMjAuLjA1ZjhmZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2ljbXAuaAorKysgYi9pbmNsdWRlL25ldC9pY21wLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpZm5kZWYgX0lDTVBfSAogI2RlZmluZQlfSUNNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wLmg+CiAKICNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmggYi9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKaW5kZXggNTlmMGM4My4uYmM2YTcxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfSU5FVDZfSEFTSFRBQkxFU19ICiAjZGVmaW5lIF9JTkVUNl9IQVNIVEFCTEVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmggYi9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaAppbmRleCAxMzVkODBmLi45OGUwYmIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfSU5FVF9IQVNIVEFCTEVTX0gKICNkZWZpbmUgX0lORVRfSEFTSFRBQkxFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKaW5kZXggODgzZWI1Mi4uMWY0YTlhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKQEAgLTE2LDcgKzE2LDYgQEAKICNpZm5kZWYgX0lORVRfU09DS19ICiAjZGVmaW5lIF9JTkVUX1NPQ0tfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaAppbmRleCBlODM3Zjk4Li42MDBjYjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfSU5FVF9USU1FV0FJVF9TT0NLXwogI2RlZmluZSBfSU5FVF9USU1FV0FJVF9TT0NLXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCBlYWQyMzNjLi45OGY5MDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpZm5kZWYgX0lQX0gKICNkZWZpbmUgX0lQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfZmliLmggYi9pbmNsdWRlL25ldC9pcF9maWIuaAppbmRleCBlMDAwZmEyLi5hMDk1ZDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF9maWIuaAorKysgYi9pbmNsdWRlL25ldC9pcF9maWIuaApAQCAtMTYsNyArMTYsNiBAQAogI2lmbmRlZiBfTkVUX0lQX0ZJQl9ICiAjZGVmaW5lIF9ORVRfSVBfRklCX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC9mbG93Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfbXBfYWxnLmggYi9pbmNsdWRlL25ldC9pcF9tcF9hbGcuaAppbmRleCA3NzIyNTczLi5hYzc0N2I2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF9tcF9hbGcuaAorKysgYi9pbmNsdWRlL25ldC9pcF9tcF9hbGcuaApAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgX05FVF9JUF9NUF9BTEdfSAogI2RlZmluZSBfTkVUX0lQX01QX0FMR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pcF9tcF9hbGcuaD4KICNpbmNsdWRlIDxuZXQvZmxvdy5oPgogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKaW5kZXggN2QyNjc0Zi4uM2I1N2IxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaAorKysgYi9pbmNsdWRlL25ldC9pcF92cy5oCkBAIC0yNDgsNyArMjQ4LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4gICAgICAgICAgICAgICAgIC8qIGZvciBzdHJ1Y3QgbGlzdF9oZWFkICovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4gICAgICAgICAgICAgLyogZm9yIHN0cnVjdCByd2xvY2tfdCAqLwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4gICAgICAgICAgICAgICAgIC8qIGZvciBzdHJ1Y3QgYXRvbWljX3QgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCA0YWJlZGI4Li5hOGZkZjc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC0xMDQsNyArMTA0LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKIC8qIHN5c2N0bHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKaW5kZXggMTg4MGU0Ni4uMWNiMDYwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgTkVUX0lSREFfSAogI2RlZmluZSBORVRfSVJEQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4JCS8qIHN0cnVjdCBza19idWZmICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4JCQkvKiBzYV9mYW1pbHlfdCBpbiA8bGludXgvaXJkYS5oPiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhX2RldmljZS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhX2RldmljZS5oCmluZGV4IDkyYzgyODAuLjA1NzVjNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJkYV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmgKQEAgLTM5LDcgKzM5LDYgQEAKICNpZm5kZWYgSVJEQV9ERVZJQ0VfSAogI2RlZmluZSBJUkRBX0RFVklDRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oCmluZGV4IDIxMjdjYWUuLmU3N2ViODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXAuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwLmgKQEAgLTI3LDcgKzI3LDYgQEAKICNpZm5kZWYgSVJMQVBfSAogI2RlZmluZSBJUkxBUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oCmluZGV4IGMwYzg5NWQuLjExZWNmYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmgKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPiAgLyogZm9yIEhaICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9mcmFtZS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9mcmFtZS5oCmluZGV4IGViM2FkMTUuLmM0NjNmOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZnJhbWUuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2ZyYW1lLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgSVJNTFBfRlJBTUVfSAogI2RlZmluZSBJUk1MUF9GUkFNRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2Rpc2NvdmVyeS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9xb3MuaCBiL2luY2x1ZGUvbmV0L2lyZGEvcW9zLmgKaW5kZXggOWFlM2Q2Yi4uY2M1NzdkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9xb3MuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL3Fvcy5oCkBAIC0zMSw3ICszMSw2IEBACiAjaWZuZGVmIElSREFfUU9TX0gKICNkZWZpbmUgSVJEQV9RT1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS9wYXJhbWV0ZXJzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaAppbmRleCA5MWZhMjcxLi5kMzkxNWRhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmRpc2MuaAorKysgYi9pbmNsdWRlL25ldC9uZGlzYy5oCkBAIC0zNyw3ICszNyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCmluZGV4IDQxMTExNzguLjFmYmQ4MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oPgogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X2FjdC5oIGIvaW5jbHVkZS9uZXQvcGt0X2FjdC5oCmluZGV4IGIyMjVkODQuLmNmNWU0ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9hY3QuaAorKysgYi9pbmNsdWRlL25ldC9wa3RfYWN0LmgKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaCBiL2luY2x1ZGUvbmV0L3Byb3RvY29sLmgKaW5kZXggNmRjNTk3MC4uYmNhZWUzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaAorKysgYi9pbmNsdWRlL25ldC9wcm90b2NvbC5oCkBAIC0yNCw3ICsyNCw2IEBACiAjaWZuZGVmIF9QUk9UT0NPTF9ICiAjZGVmaW5lIF9QUk9UT0NPTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmF3LmggYi9pbmNsdWRlL25ldC9yYXcuaAppbmRleCBkODM1NzFmLi5lNGFmNTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yYXcuaAorKysgYi9pbmNsdWRlL25ldC9yYXcuaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfUkFXX0gKICNkZWZpbmUgX1JBV19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yZWQuaCBiL2luY2x1ZGUvbmV0L3JlZC5oCmluZGV4IDJlZDQzNTguLjVjY2RiYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3JlZC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX05FVF9TQ0hFRF9SRURfSAogI2RlZmluZSBfX05FVF9TQ0hFRF9SRURfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvcm91dGUuaAppbmRleCA5OGM5MTVhLi5jNGEwNjg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKQEAgLTI0LDcgKzI0LDYgQEAKICNpZm5kZWYgX1JPVVRFX0gKICNkZWZpbmUgX1JPVVRFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpbmNsdWRlIDxuZXQvaW5ldHBlZXIuaD4KICNpbmNsdWRlIDxuZXQvZmxvdy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggN2I2ZWM5OS4uYjBlOTEwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX05FVF9TQ0hFRF9HRU5FUklDX0gKICNkZWZpbmUgX19ORVRfU0NIRURfR0VORVJJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCmluZGV4IGIyYjQwZjkuLjIzN2Y4MmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC02Myw3ICs2Myw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBURVNUX0ZSQU1FCiAjdW5kZWYgQ09ORklHX1BST0NfRlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCA5NjU2NWZmLi5kMTBkZmVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC00MCw3ICs0MCw2IEBACiAjaWZuZGVmIF9TT0NLX0gKICNkZWZpbmUgX1NPQ0tfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggYmZjNzFmOS4uNWY0ZWI1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTIxLDcgKzIxLDYgQEAKICNkZWZpbmUgVENQX0RFQlVHIDEKICNkZWZpbmUgRkFTVFJFVFJBTlNfREVCVUcgMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL3NzLmggYi9pbmNsdWRlL3BjbWNpYS9zcy5oCmluZGV4IDVlMGEwMWEuLmVkZTYzOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL3NzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvc3MuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfTElOVVhfU1NfSAogI2RlZmluZSBfTElOVVhfU1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogdGFza19zdHJ1Y3QsIGNvbXBsZXRpb24gKi8KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaAppbmRleCA1NjI2MjI1Li42ZDI4YjAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaApAQCAtMjcsNyArMjcsNiBAQAogI2lmbmRlZiBTQ1NJX1RSQU5TUE9SVF9GQ19ICiAjZGVmaW5lIFNDU0lfVFJBTlNQT1JUX0ZDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaAppbmRleCA1ZTFkNjE5Li4zMDI2ODBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIFNDU0lfVFJBTlNQT1JUX1NQSV9ICiAjZGVmaW5lIFNDU0lfVFJBTlNQT1JUX1NQSV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90cmFuc3BvcnRfY2xhc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2RyaXZlci5oIGIvaW5jbHVkZS9zb3VuZC9kcml2ZXIuaAppbmRleCA4OWM2YTczLi4zYzUyMmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2RyaXZlci5oCisrKyBiL2luY2x1ZGUvc291bmQvZHJpdmVyLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIG51bWJlciBvZiBzdXBwb3J0ZWQgc291bmRjYXJkcyAqLwogI2lmZGVmIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaGRzcC5oIGIvaW5jbHVkZS9zb3VuZC9oZHNwLmgKaW5kZXggMjVlMTk1MS4uZGVjNmIxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9oZHNwLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9oZHNwLmgKQEAgLTMwLDEzICszMCwxMyBAQAogfTsKIAogc3RydWN0IGhkc3BfcGVha19ybXMgewotCXUzMiBpbnB1dF9wZWFrc1syNl07Ci0JdTMyIHBsYXliYWNrX3BlYWtzWzI2XTsKLQl1MzIgb3V0cHV0X3BlYWtzWzI4XTsKLQl1NjQgaW5wdXRfcm1zWzI2XTsKLQl1NjQgcGxheWJhY2tfcm1zWzI2XTsKKwlfX3UzMiBpbnB1dF9wZWFrc1syNl07CisJX191MzIgcGxheWJhY2tfcGVha3NbMjZdOworCV9fdTMyIG91dHB1dF9wZWFrc1syOF07CisJX191NjQgaW5wdXRfcm1zWzI2XTsKKwlfX3U2NCBwbGF5YmFja19ybXNbMjZdOwogCS8qIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9yIEg5Nnh4IGNhcmRzICovCi0JdTY0IG91dHB1dF9ybXNbMjZdOworCV9fdTY0IG91dHB1dF9ybXNbMjZdOwogfTsKIAogI2RlZmluZSBTTkRSVl9IRFNQX0lPQ1RMX0dFVF9QRUFLX1JNUyBfSU9SKCdIJywgMHg0MCwgc3RydWN0IGhkc3BfcGVha19ybXMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2VkaWQuaCBiL2luY2x1ZGUvdmlkZW8vZWRpZC5oCmluZGV4IGI5MTNmMTkuLmY2YTQyZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vZWRpZC5oCisrKyBiL2luY2x1ZGUvdmlkZW8vZWRpZC5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2CiBzdHJ1Y3QgZWRpZF9pbmZvIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vdmdhLmggYi9pbmNsdWRlL3ZpZGVvL3ZnYS5oCmluZGV4IDcwMGQ2YzguLmI0OWE1MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vdmdhLmgKKysrIGIvaW5jbHVkZS92aWRlby92Z2EuaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfX2xpbnV4X3ZpZGVvX3ZnYV9oX18KICNkZWZpbmUgX19saW51eF92aWRlb192Z2FfaF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2lmbmRlZiBDT05GSUdfQU1JR0EKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCAzYjM2YTFkLi5kZjg2NGEzIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0xODIsNyArMTgyLDggQEAKIAloZWxwCiAJICBFbmFibGUgbG93LW92ZXJoZWFkIHN5c3RlbS1jYWxsIGF1ZGl0aW5nIGluZnJhc3RydWN0dXJlIHRoYXQKIAkgIGNhbiBiZSB1c2VkIGluZGVwZW5kZW50bHkgb3Igd2l0aCBhbm90aGVyIGtlcm5lbCBzdWJzeXN0ZW0sCi0JICBzdWNoIGFzIFNFTGludXguCisJICBzdWNoIGFzIFNFTGludXguICBUbyB1c2UgYXVkaXQncyBmaWxlc3lzdGVtIHdhdGNoIGZlYXR1cmUsIHBsZWFzZQorCSAgZW5zdXJlIHRoYXQgSU5PVElGWSBpcyBjb25maWd1cmVkLgogCiBjb25maWcgSUtDT05GSUcKIAlib29sICJLZXJuZWwgLmNvbmZpZyBzdXBwb3J0IgpAQCAtMzg5LDkgKzM5MCw2IEBACiAJZGVmYXVsdCAhU0xBQgogCWJvb2wKIAotY29uZmlnIE9CU09MRVRFX0lOVEVSTU9EVUxFCi0JdHJpc3RhdGUKLQogbWVudSAiTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQiCiAKIGNvbmZpZyBNT0RVTEVTCmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5jIGIvaW5pdC9kb19tb3VudHMuYwppbmRleCBmNGI3YjlkLi4yMWIzYjhmIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50cy5jCisrKyBiL2luaXQvZG9fbW91bnRzLmMKQEAgLTQwOSw2ICs0MDksMTAgQEAKIAogCWlmIChzYXZlZF9yb290X25hbWVbMF0pIHsKIAkJcm9vdF9kZXZpY2VfbmFtZSA9IHNhdmVkX3Jvb3RfbmFtZTsKKwkJaWYgKCFzdHJuY21wKHJvb3RfZGV2aWNlX25hbWUsICJtdGQiLCAzKSkgeworCQkJbW91bnRfYmxvY2tfcm9vdChyb290X2RldmljZV9uYW1lLCByb290X21vdW50ZmxhZ3MpOworCQkJZ290byBvdXQ7CisJCX0KIAkJUk9PVF9ERVYgPSBuYW1lX3RvX2Rldl90KHJvb3RfZGV2aWNlX25hbWUpOwogCQlpZiAoc3RybmNtcChyb290X2RldmljZV9uYW1lLCAiL2Rldi8iLCA1KSA9PSAwKQogCQkJcm9vdF9kZXZpY2VfbmFtZSArPSA1OwpkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IDQxZWNiZDQuLjE1MTE3MTQgMTAwNjQ0Ci0tLSBhL2lwYy9tcXVldWUuYworKysgYi9pcGMvbXF1ZXVlLmMKQEAgLTgsNiArOCw4IEBACiAgKiBMb2NrbGVzcyByZWNlaXZlICYgc2VuZCwgZmQgYmFzZWQgbm90aWZ5OgogICogCQkJICAgIE1hbmZyZWQgU3ByYXVsCSAgICAobWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tKQogICoKKyAqIEF1ZGl0OiAgICAgICAgICAgICAgICAgICBHZW9yZ2UgV2lsc29uICAgICAgICAgICAobHRjZ2N3QHVzLmlibS5jb20pCisgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCiAgKi8KIApAQCAtMjQsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIApAQCAtNjU3LDYgKzY2MCwxMCBAQAogCWNoYXIgKm5hbWU7CiAJaW50IGZkLCBlcnJvcjsKIAorCWVycm9yID0gYXVkaXRfbXFfb3BlbihvZmxhZywgbW9kZSwgdV9hdHRyKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIGVycm9yOworCiAJaWYgKElTX0VSUihuYW1lID0gZ2V0bmFtZSh1X25hbWUpKSkKIAkJcmV0dXJuIFBUUl9FUlIobmFtZSk7CiAKQEAgLTgxNCw2ICs4MjEsMTAgQEAKIAlsb25nIHRpbWVvdXQ7CiAJaW50IHJldDsKIAorCXJldCA9IGF1ZGl0X21xX3RpbWVkc2VuZChtcWRlcywgbXNnX2xlbiwgbXNnX3ByaW8sIHVfYWJzX3RpbWVvdXQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwogCWlmICh1bmxpa2VseShtc2dfcHJpbyA+PSAodW5zaWduZWQgbG9uZykgTVFfUFJJT19NQVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODk2LDYgKzkwNywxMCBAQAogCXN0cnVjdCBtcXVldWVfaW5vZGVfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgZXh0X3dhaXRfcXVldWUgd2FpdDsKIAorCXJldCA9IGF1ZGl0X21xX3RpbWVkcmVjZWl2ZShtcWRlcywgbXNnX2xlbiwgdV9tc2dfcHJpbywgdV9hYnNfdGltZW91dCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJdGltZW91dCA9IHByZXBhcmVfdGltZW91dCh1X2Fic190aW1lb3V0KTsKIAogCXJldCA9IC1FQkFERjsKQEAgLTk3NSw2ICs5OTAsMTAgQEAKIAlzdHJ1Y3QgbXF1ZXVlX2lub2RlX2luZm8gKmluZm87CiAJc3RydWN0IHNrX2J1ZmYgKm5jOwogCisJcmV0ID0gYXVkaXRfbXFfbm90aWZ5KG1xZGVzLCB1X25vdGlmaWNhdGlvbik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJbmMgPSBOVUxMOwogCXNvY2sgPSBOVUxMOwogCWlmICh1X25vdGlmaWNhdGlvbiAhPSBOVUxMKSB7CkBAIC0xMTE1LDYgKzExMzQsOSBAQAogCW9tcXN0YXQgPSBpbmZvLT5hdHRyOwogCW9tcXN0YXQubXFfZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKIAlpZiAodV9tcXN0YXQpIHsKKwkJcmV0ID0gYXVkaXRfbXFfZ2V0c2V0YXR0cihtcWRlcywgJm1xc3RhdCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gb3V0OwogCQlpZiAobXFzdGF0Lm1xX2ZsYWdzICYgT19OT05CTE9DSykKIAkJCWZpbHAtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvaXBjL21zZy5jIGIvaXBjL21zZy5jCmluZGV4IDdkMTM0MGMuLjAwZjAxNWEgMTAwNjQ0Ci0tLSBhL2lwYy9tc2cuYworKysgYi9pcGMvbXNnLmMKQEAgLTQ1NCw2ICs0NTQsMTEgQEAKIAllcnIgPSBhdWRpdF9pcGNfb2JqKGlwY3ApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VubG9ja191cDsKKwlpZiAoY21kPT1JUENfU0VUKSB7CisJCWVyciA9IGF1ZGl0X2lwY19zZXRfcGVybShzZXRidWYucWJ5dGVzLCBzZXRidWYudWlkLCBzZXRidWYuZ2lkLCBzZXRidWYubW9kZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF91bmxvY2tfdXA7CisJfQogCiAJZXJyID0gLUVQRVJNOwogCWlmIChjdXJyZW50LT5ldWlkICE9IGlwY3AtPmN1aWQgJiYgCkBAIC00NjgsMTAgKzQ3Myw2IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIElQQ19TRVQ6CiAJewotCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oc2V0YnVmLnFieXRlcywgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsIGlwY3ApOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXRfdW5sb2NrX3VwOwotCiAJCWVyciA9IC1FUEVSTTsKIAkJaWYgKHNldGJ1Zi5xYnl0ZXMgPiBtc2dfY3RsbW5iICYmICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQogCQkJZ290byBvdXRfdW5sb2NrX3VwOwpkaWZmIC0tZ2l0IGEvaXBjL3NlbS5jIGIvaXBjL3NlbS5jCmluZGV4IDc5MTlmOGUuLmZjZTBiYzggMTAwNjQ0Ci0tLSBhL2lwYy9zZW0uYworKysgYi9pcGMvc2VtLmMKQEAgLTgyOCw2ICs4MjgsMTEgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwlpZiAoY21kID09IElQQ19TRVQpIHsKKwkJZXJyID0gYXVkaXRfaXBjX3NldF9wZXJtKDAsIHNldGJ1Zi51aWQsIHNldGJ1Zi5naWQsIHNldGJ1Zi5tb2RlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAJaWYgKGN1cnJlbnQtPmV1aWQgIT0gaXBjcC0+Y3VpZCAmJiAKIAkgICAgY3VycmVudC0+ZXVpZCAhPSBpcGNwLT51aWQgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkgICAgCWVycj0tRVBFUk07CkBAIC04NDQsOSArODQ5LDYgQEAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBJUENfU0VUOgotCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsIGlwY3ApOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXRfdW5sb2NrOwogCQlpcGNwLT51aWQgPSBzZXRidWYudWlkOwogCQlpcGNwLT5naWQgPSBzZXRidWYuZ2lkOwogCQlpcGNwLT5tb2RlID0gKGlwY3AtPm1vZGUgJiB+U19JUldYVUdPKQpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDgwOTg5NjguLjRmMTMzZDIgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTY0Myw3ICs2NDMsNyBAQAogCQllcnIgPSBhdWRpdF9pcGNfb2JqKCYoc2hwLT5zaG1fcGVybSkpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrX3VwOwotCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsICYoc2hwLT5zaG1fcGVybSkpOworCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrX3VwOwogCQllcnI9LUVQRVJNOwpkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDU4OTA4ZjkuLmY2ZWYwMGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTIwLDcgKzIwLDYgQEAKIG9iai0kKENPTkZJR19ERUJVR19TUElOTE9DSykgKz0gc3BpbmxvY2subwogb2JqLSQoQ09ORklHX1VJRDE2KSArPSB1aWQxNi5vCiBvYmotJChDT05GSUdfTU9EVUxFUykgKz0gbW9kdWxlLm8KLW9iai0kKENPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRSkgKz0gaW50ZXJtb2R1bGUubwogb2JqLSQoQ09ORklHX0tBTExTWU1TKSArPSBrYWxsc3ltcy5vCiBvYmotJChDT05GSUdfUE0pICs9IHBvd2VyLwogb2JqLSQoQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QpICs9IGFjY3QubwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmMgYi9rZXJuZWwvYXVkaXQuYwppbmRleCBkZjU3YjQ5Li43ZGZhYzcwIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuYworKysgYi9rZXJuZWwvYXVkaXQuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgogCiAjaW5jbHVkZSAiYXVkaXQuaCIKIApAQCAtODksNiArOTAsNyBAQAogLyogVGhlIGlkZW50aXR5IG9mIHRoZSB1c2VyIHNodXR0aW5nIGRvd24gdGhlIGF1ZGl0IHN5c3RlbS4gKi8KIHVpZF90CQlhdWRpdF9zaWdfdWlkID0gLTE7CiBwaWRfdAkJYXVkaXRfc2lnX3BpZCA9IC0xOwordTMyCQlhdWRpdF9zaWdfc2lkID0gMDsKIAogLyogUmVjb3JkcyBjYW4gYmUgbG9zdCBpbiBzZXZlcmFsIHdheXM6CiAgICAwKSBbc3VwcHJlc3NlZCBpbiBhdWRpdF9hbGxvY10KQEAgLTEwMiw2ICsxMDQsMTIgQEAKIC8qIFRoZSBuZXRsaW5rIHNvY2tldC4gKi8KIHN0YXRpYyBzdHJ1Y3Qgc29jayAqYXVkaXRfc29jazsKIAorLyogSW5vdGlmeSBoYW5kbGUuICovCitzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmF1ZGl0X2loOworCisvKiBIYXNoIGZvciBpbm9kZS1iYXNlZCBydWxlcyAqLworc3RydWN0IGxpc3RfaGVhZCBhdWRpdF9pbm9kZV9oYXNoW0FVRElUX0lOT0RFX0JVQ0tFVFNdOworCiAvKiBUaGUgYXVkaXRfZnJlZWxpc3QgaXMgYSBsaXN0IG9mIHByZS1hbGxvY2F0ZWQgYXVkaXQgYnVmZmVycyAoaWYgbW9yZQogICogdGhhbiBBVURJVF9NQVhGUkVFIGFyZSBpbiB1c2UsIHRoZSBhdWRpdCBidWZmZXIgaXMgZnJlZWQgaW5zdGVhZCBvZgogICogYmVpbmcgcGxhY2VkIG9uIHRoZSBmcmVlbGlzdCkuICovCkBAIC0xMTQsMTAgKzEyMiw4IEBACiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoa2F1ZGl0ZF93YWl0KTsKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChhdWRpdF9iYWNrbG9nX3dhaXQpOwogCi0vKiBUaGUgbmV0bGluayBzb2NrZXQgaXMgb25seSB0byBiZSByZWFkIGJ5IDEgQ1BVLCB3aGljaCBsZXRzIHVzIGFzc3VtZQotICogdGhhdCBsaXN0IGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIG5ldmVyIGhhcHBlbiBzaW11bHRhbmVvdXNseSBpbgotICogYXVkaXRzYy5jICovCi1ERUZJTkVfTVVURVgoYXVkaXRfbmV0bGlua19tdXRleCk7CisvKiBTZXJpYWxpemUgcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UuICovCitzdGF0aWMgREVGSU5FX01VVEVYKGF1ZGl0X2NtZF9tdXRleCk7CiAKIC8qIEFVRElUX0JVRlNJWiBpcyB0aGUgc2l6ZSBvZiB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZvciBmb3JtYXR0aW5nCiAgKiBhdWRpdCByZWNvcmRzLiAgU2luY2UgcHJpbnRrIHVzZXMgYSAxMDI0IGJ5dGUgYnVmZmVyLCB0aGlzIGJ1ZmZlcgpAQCAtMjUwLDcgKzI1Niw3IEBACiAJCQkiYXVkaXRfcmF0ZV9saW1pdD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCiAJCQlsaW1pdCwgb2xkLCBsb2dpbnVpZCk7CiAJYXVkaXRfcmF0ZV9saW1pdCA9IGxpbWl0OwotCXJldHVybiBvbGQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYXVkaXRfc2V0X2JhY2tsb2dfbGltaXQoaW50IGxpbWl0LCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKQEAgLTI3Myw3ICsyNzksNyBAQAogCQkJImF1ZGl0X2JhY2tsb2dfbGltaXQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUiLAogCQkJbGltaXQsIG9sZCwgbG9naW51aWQpOwogCWF1ZGl0X2JhY2tsb2dfbGltaXQgPSBsaW1pdDsKLQlyZXR1cm4gb2xkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF1ZGl0X3NldF9lbmFibGVkKGludCBzdGF0ZSwgdWlkX3QgbG9naW51aWQsIHUzMiBzaWQpCkBAIC0yOTksNyArMzA1LDcgQEAKIAkJCSJhdWRpdF9lbmFibGVkPSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKIAkJCXN0YXRlLCBvbGQsIGxvZ2ludWlkKTsKIAlhdWRpdF9lbmFibGVkID0gc3RhdGU7Ci0JcmV0dXJuIG9sZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdWRpdF9zZXRfZmFpbHVyZShpbnQgc3RhdGUsIHVpZF90IGxvZ2ludWlkLCB1MzIgc2lkKQpAQCAtMzI3LDcgKzMzMyw3IEBACiAJCQkiYXVkaXRfZmFpbHVyZT0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCiAJCQlzdGF0ZSwgb2xkLCBsb2dpbnVpZCk7CiAJYXVkaXRfZmFpbHVyZSA9IHN0YXRlOwotCXJldHVybiBvbGQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQga2F1ZGl0ZF90aHJlYWQodm9pZCAqZHVtbXkpCkBAIC0zNjMsOSArMzY5LDUyIEBACiAJCQlyZW1vdmVfd2FpdF9xdWV1ZSgma2F1ZGl0ZF93YWl0LCAmd2FpdCk7CiAJCX0KIAl9Cit9CisKK2ludCBhdWRpdF9zZW5kX2xpc3Qodm9pZCAqX2Rlc3QpCit7CisJc3RydWN0IGF1ZGl0X25ldGxpbmtfbGlzdCAqZGVzdCA9IF9kZXN0OworCWludCBwaWQgPSBkZXN0LT5waWQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCS8qIHdhaXQgZm9yIHBhcmVudCB0byBmaW5pc2ggYW5kIHNlbmQgYW4gQUNLICovCisJbXV0ZXhfbG9jaygmYXVkaXRfY21kX211dGV4KTsKKwltdXRleF91bmxvY2soJmF1ZGl0X2NtZF9tdXRleCk7CisKKwl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJmRlc3QtPnEpKSAhPSBOVUxMKQorCQluZXRsaW5rX3VuaWNhc3QoYXVkaXRfc29jaywgc2tiLCBwaWQsIDApOworCisJa2ZyZWUoZGVzdCk7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IHNrX2J1ZmYgKmF1ZGl0X21ha2VfcmVwbHkoaW50IHBpZCwgaW50IHNlcSwgaW50IHR5cGUsIGludCBkb25lLAorCQkJCSBpbnQgbXVsdGksIHZvaWQgKnBheWxvYWQsIGludCBzaXplKQoreworCXN0cnVjdCBza19idWZmCSpza2I7CisJc3RydWN0IG5sbXNnaGRyCSpubGg7CisJaW50CQlsZW4gPSBOTE1TR19TUEFDRShzaXplKTsKKwl2b2lkCQkqZGF0YTsKKwlpbnQJCWZsYWdzID0gbXVsdGkgPyBOTE1fRl9NVUxUSSA6IDA7CisJaW50CQl0ICAgICA9IGRvbmUgID8gTkxNU0dfRE9ORSAgOiB0eXBlOworCisJc2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpCisJCXJldHVybiBOVUxMOworCisJbmxoCQkgPSBOTE1TR19QVVQoc2tiLCBwaWQsIHNlcSwgdCwgc2l6ZSk7CisJbmxoLT5ubG1zZ19mbGFncyA9IGZsYWdzOworCWRhdGEJCSA9IE5MTVNHX0RBVEEobmxoKTsKKwltZW1jcHkoZGF0YSwgcGF5bG9hZCwgc2l6ZSk7CisJcmV0dXJuIHNrYjsKKworbmxtc2dfZmFpbHVyZToJCQkvKiBVc2VkIGJ5IE5MTVNHX1BVVCAqLworCWlmIChza2IpCisJCWtmcmVlX3NrYihza2IpOworCXJldHVybiBOVUxMOworfQorCiAvKioKICAqIGF1ZGl0X3NlbmRfcmVwbHkgLSBzZW5kIGFuIGF1ZGl0IHJlcGx5IG1lc3NhZ2UgdmlhIG5ldGxpbmsKICAqIEBwaWQ6IHByb2Nlc3MgaWQgdG8gc2VuZCByZXBseSB0bwpAQCAtMzgzLDI5ICs0MzIsMTMgQEAKIAkJICAgICAgdm9pZCAqcGF5bG9hZCwgaW50IHNpemUpCiB7CiAJc3RydWN0IHNrX2J1ZmYJKnNrYjsKLQlzdHJ1Y3Qgbmxtc2doZHIJKm5saDsKLQlpbnQJCWxlbiA9IE5MTVNHX1NQQUNFKHNpemUpOwotCXZvaWQJCSpkYXRhOwotCWludAkJZmxhZ3MgPSBtdWx0aSA/IE5MTV9GX01VTFRJIDogMDsKLQlpbnQJCXQgICAgID0gZG9uZSAgPyBOTE1TR19ET05FICA6IHR5cGU7Ci0KLQlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfS0VSTkVMKTsKKwlza2IgPSBhdWRpdF9tYWtlX3JlcGx5KHBpZCwgc2VxLCB0eXBlLCBkb25lLCBtdWx0aSwgcGF5bG9hZCwgc2l6ZSk7CiAJaWYgKCFza2IpCiAJCXJldHVybjsKLQotCW5saAkJID0gTkxNU0dfUFVUKHNrYiwgcGlkLCBzZXEsIHQsIHNpemUpOwotCW5saC0+bmxtc2dfZmxhZ3MgPSBmbGFnczsKLQlkYXRhCQkgPSBOTE1TR19EQVRBKG5saCk7Ci0JbWVtY3B5KGRhdGEsIHBheWxvYWQsIHNpemUpOwotCiAJLyogSWdub3JlIGZhaWx1cmUuIEl0J2xsIG9ubHkgaGFwcGVuIGlmIHRoZSBzZW5kZXIgZ29lcyBhd2F5LAogCSAgIGJlY2F1c2Ugb3VyIHRpbWVvdXQgaXMgc2V0IHRvIGluZmluaXRlLiAqLwogCW5ldGxpbmtfdW5pY2FzdChhdWRpdF9zb2NrLCBza2IsIHBpZCwgMCk7CiAJcmV0dXJuOwotCi1ubG1zZ19mYWlsdXJlOgkJCS8qIFVzZWQgYnkgTkxNU0dfUFVUICovCi0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CiB9CiAKIC8qCkBAIC00NTEsNyArNDg0LDkgQEAKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyCSphYjsKIAl1MTYJCQltc2dfdHlwZSA9IG5saC0+bmxtc2dfdHlwZTsKIAl1aWRfdAkJCWxvZ2ludWlkOyAvKiBsb2dpbnVpZCBvZiBzZW5kZXIgKi8KLQlzdHJ1Y3QgYXVkaXRfc2lnX2luZm8gICBzaWdfZGF0YTsKKwlzdHJ1Y3QgYXVkaXRfc2lnX2luZm8gICAqc2lnX2RhdGE7CisJY2hhcgkJCSpjdHg7CisJdTMyCQkJbGVuOwogCiAJZXJyID0gYXVkaXRfbmV0bGlua19vayhORVRMSU5LX0NCKHNrYikuZWZmX2NhcCwgbXNnX3R5cGUpOwogCWlmIChlcnIpCkBAIC01MDMsMTIgKzUzOCw5IEBACiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX1BJRCkgewogCQkJaW50IG9sZCAgID0gYXVkaXRfcGlkOwogCQkJaWYgKHNpZCkgewotCQkJCWNoYXIgKmN0eCA9IE5VTEw7Ci0JCQkJdTMyIGxlbjsKLQkJCQlpbnQgcmM7Ci0JCQkJaWYgKChyYyA9IHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKAorCQkJCWlmICgoZXJyID0gc2VsaW51eF9jdHhpZF90b19zdHJpbmcoCiAJCQkJCQlzaWQsICZjdHgsICZsZW4pKSkKLQkJCQkJcmV0dXJuIHJjOworCQkJCQlyZXR1cm4gZXJyOwogCQkJCWVsc2UKIAkJCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsCiAJCQkJCQlBVURJVF9DT05GSUdfQ0hBTkdFLApAQCAtNTIzLDEwICs1NTUsMTAgQEAKIAkJCWF1ZGl0X3BpZCA9IHN0YXR1c19nZXQtPnBpZDsKIAkJfQogCQlpZiAoc3RhdHVzX2dldC0+bWFzayAmIEFVRElUX1NUQVRVU19SQVRFX0xJTUlUKQotCQkJYXVkaXRfc2V0X3JhdGVfbGltaXQoc3RhdHVzX2dldC0+cmF0ZV9saW1pdCwKKwkJCWVyciA9IGF1ZGl0X3NldF9yYXRlX2xpbWl0KHN0YXR1c19nZXQtPnJhdGVfbGltaXQsCiAJCQkJCQkJIGxvZ2ludWlkLCBzaWQpOwogCQlpZiAoc3RhdHVzX2dldC0+bWFzayAmIEFVRElUX1NUQVRVU19CQUNLTE9HX0xJTUlUKQotCQkJYXVkaXRfc2V0X2JhY2tsb2dfbGltaXQoc3RhdHVzX2dldC0+YmFja2xvZ19saW1pdCwKKwkJCWVyciA9IGF1ZGl0X3NldF9iYWNrbG9nX2xpbWl0KHN0YXR1c19nZXQtPmJhY2tsb2dfbGltaXQsCiAJCQkJCQkJbG9naW51aWQsIHNpZCk7CiAJCWJyZWFrOwogCWNhc2UgQVVESVRfVVNFUjoKQEAgLTU0NCw4ICs1NzYsNiBAQAogCQkJCQkJICJ1c2VyIHBpZD0lZCB1aWQ9JXUgYXVpZD0ldSIsCiAJCQkJCQkgcGlkLCB1aWQsIGxvZ2ludWlkKTsKIAkJCQlpZiAoc2lkKSB7Ci0JCQkJCWNoYXIgKmN0eCA9IE5VTEw7Ci0JCQkJCXUzMiBsZW47CiAJCQkJCWlmIChzZWxpbnV4X2N0eGlkX3RvX3N0cmluZygKIAkJCQkJCQlzaWQsICZjdHgsICZsZW4pKSB7CiAJCQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAKQEAgLTU4NCwxMCArNjE0LDIxIEBACiAJCQkJCSAgIGxvZ2ludWlkLCBzaWQpOwogCQlicmVhazsKIAljYXNlIEFVRElUX1NJR05BTF9JTkZPOgotCQlzaWdfZGF0YS51aWQgPSBhdWRpdF9zaWdfdWlkOwotCQlzaWdfZGF0YS5waWQgPSBhdWRpdF9zaWdfcGlkOworCQllcnIgPSBzZWxpbnV4X2N0eGlkX3RvX3N0cmluZyhhdWRpdF9zaWdfc2lkLCAmY3R4LCAmbGVuKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCXNpZ19kYXRhID0ga21hbGxvYyhzaXplb2YoKnNpZ19kYXRhKSArIGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2lnX2RhdGEpIHsKKwkJCWtmcmVlKGN0eCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzaWdfZGF0YS0+dWlkID0gYXVkaXRfc2lnX3VpZDsKKwkJc2lnX2RhdGEtPnBpZCA9IGF1ZGl0X3NpZ19waWQ7CisJCW1lbWNweShzaWdfZGF0YS0+Y3R4LCBjdHgsIGxlbik7CisJCWtmcmVlKGN0eCk7CiAJCWF1ZGl0X3NlbmRfcmVwbHkoTkVUTElOS19DQihza2IpLnBpZCwgc2VxLCBBVURJVF9TSUdOQUxfSU5GTywgCi0JCQkJMCwgMCwgJnNpZ19kYXRhLCBzaXplb2Yoc2lnX2RhdGEpKTsKKwkJCQkwLCAwLCBzaWdfZGF0YSwgc2l6ZW9mKCpzaWdfZGF0YSkgKyBsZW4pOworCQlrZnJlZShzaWdfZGF0YSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FSU5WQUw7CkBAIC02MjksMjAgKzY3MCwzMCBAQAogCXN0cnVjdCBza19idWZmICAqc2tiOwogCXVuc2lnbmVkIGludCBxbGVuOwogCi0JbXV0ZXhfbG9jaygmYXVkaXRfbmV0bGlua19tdXRleCk7CisJbXV0ZXhfbG9jaygmYXVkaXRfY21kX211dGV4KTsKIAogCWZvciAocWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsgcWxlbjsgcWxlbi0tKSB7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJCWF1ZGl0X3JlY2VpdmVfc2tiKHNrYik7CiAJCWtmcmVlX3NrYihza2IpOwogCX0KLQltdXRleF91bmxvY2soJmF1ZGl0X25ldGxpbmtfbXV0ZXgpOworCW11dGV4X3VubG9jaygmYXVkaXRfY21kX211dGV4KTsKIH0KIAorI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vdGlmeV9vcGVyYXRpb25zIGF1ZGl0X2lub3RpZnlfb3BzID0geworCS5oYW5kbGVfZXZlbnQJPSBhdWRpdF9oYW5kbGVfaWV2ZW50LAorCS5kZXN0cm95X3dhdGNoCT0gYXVkaXRfZnJlZV9wYXJlbnQsCit9OworI2VuZGlmCiAKIC8qIEluaXRpYWxpemUgYXVkaXQgc3VwcG9ydCBhdCBib290IHRpbWUuICovCiBzdGF0aWMgaW50IF9faW5pdCBhdWRpdF9pbml0KHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAorCWludCBpOworI2VuZGlmCisKIAlwcmludGsoS0VSTl9JTkZPICJhdWRpdDogaW5pdGlhbGl6aW5nIG5ldGxpbmsgc29ja2V0ICglcylcbiIsCiAJICAgICAgIGF1ZGl0X2RlZmF1bHQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKIAlhdWRpdF9zb2NrID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKE5FVExJTktfQVVESVQsIDAsIGF1ZGl0X3JlY2VpdmUsCkBAIC02NjEsNiArNzEyLDE2IEBACiAJc2VsaW51eF9hdWRpdF9zZXRfY2FsbGJhY2soJnNlbGludXhfYXVkaXRfcnVsZV91cGRhdGUpOwogCiAJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0tFUk5FTCwgImluaXRpYWxpemVkIik7CisKKyNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCisJYXVkaXRfaWggPSBpbm90aWZ5X2luaXQoJmF1ZGl0X2lub3RpZnlfb3BzKTsKKwlpZiAoSVNfRVJSKGF1ZGl0X2loKSkKKwkJYXVkaXRfcGFuaWMoImNhbm5vdCBpbml0aWFsaXplIGlub3RpZnkgaGFuZGxlIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVVESVRfSU5PREVfQlVDS0VUUzsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmYXVkaXRfaW5vZGVfaGFzaFtpXSk7CisjZW5kaWYKKwogCXJldHVybiAwOwogfQogX19pbml0Y2FsbChhdWRpdF9pbml0KTsKQEAgLTY5MCwxMCArNzUxLDEyIEBACiAJCWtmcmVlX3NrYihhYi0+c2tiKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhdWRpdF9mcmVlbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWYgKCsrYXVkaXRfZnJlZWxpc3RfY291bnQgPiBBVURJVF9NQVhGUkVFKQorCWlmIChhdWRpdF9mcmVlbGlzdF9jb3VudCA+IEFVRElUX01BWEZSRUUpCiAJCWtmcmVlKGFiKTsKLQllbHNlCisJZWxzZSB7CisJCWF1ZGl0X2ZyZWVsaXN0X2NvdW50Kys7CiAJCWxpc3RfYWRkKCZhYi0+bGlzdCwgJmF1ZGl0X2ZyZWVsaXN0KTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVkaXRfZnJlZWxpc3RfbG9jaywgZmxhZ3MpOwogfQogCkBAIC05ODgsMjggKzEwNTEsNzYgQEAKIAlza2JfcHV0KHNrYiwgbGVuIDw8IDEpOyAvKiBuZXcgc3RyaW5nIGlzIHR3aWNlIHRoZSBvbGQgc3RyaW5nICovCiB9CiAKKy8qCisgKiBGb3JtYXQgYSBzdHJpbmcgb2Ygbm8gbW9yZSB0aGFuIHNsZW4gY2hhcmFjdGVycyBpbnRvIHRoZSBhdWRpdCBidWZmZXIsCisgKiBlbmNsb3NlZCBpbiBxdW90ZSBtYXJrcy4KKyAqLworc3RhdGljIHZvaWQgYXVkaXRfbG9nX25fc3RyaW5nKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCBzaXplX3Qgc2xlbiwKKwkJCSAgICAgICBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJaW50IGF2YWlsLCBuZXdfbGVuOworCXVuc2lnbmVkIGNoYXIgKnB0cjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJQlVHX09OKCFhYi0+c2tiKTsKKwlza2IgPSBhYi0+c2tiOworCWF2YWlsID0gc2tiX3RhaWxyb29tKHNrYik7CisJbmV3X2xlbiA9IHNsZW4gKyAzOwkvKiBlbmNsb3NpbmcgcXVvdGVzICsgbnVsbCB0ZXJtaW5hdG9yICovCisJaWYgKG5ld19sZW4gPiBhdmFpbCkgeworCQlhdmFpbCA9IGF1ZGl0X2V4cGFuZChhYiwgbmV3X2xlbik7CisJCWlmICghYXZhaWwpCisJCQlyZXR1cm47CisJfQorCXB0ciA9IHNrYi0+dGFpbDsKKwkqcHRyKysgPSAnIic7CisJbWVtY3B5KHB0ciwgc3RyaW5nLCBzbGVuKTsKKwlwdHIgKz0gc2xlbjsKKwkqcHRyKysgPSAnIic7CisJKnB0ciA9IDA7CisJc2tiX3B1dChza2IsIHNsZW4gKyAyKTsJLyogZG9uJ3QgaW5jbHVkZSBudWxsIHRlcm1pbmF0b3IgKi8KK30KKwogLyoqCi0gKiBhdWRpdF9sb2dfdW5zdHJ1c3RlZHN0cmluZyAtIGxvZyBhIHN0cmluZyB0aGF0IG1heSBjb250YWluIHJhbmRvbSBjaGFyYWN0ZXJzCisgKiBhdWRpdF9sb2dfbl91bnN0cnVzdGVkc3RyaW5nIC0gbG9nIGEgc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gcmFuZG9tIGNoYXJhY3RlcnMKICAqIEBhYjogYXVkaXRfYnVmZmVyCisgKiBAbGVuOiBsZW50aCBvZiBzdHJpbmcgKG5vdCBpbmNsdWRpbmcgdHJhaWxpbmcgbnVsbCkKICAqIEBzdHJpbmc6IHN0cmluZyB0byBiZSBsb2dnZWQKICAqCiAgKiBUaGlzIGNvZGUgd2lsbCBlc2NhcGUgYSBzdHJpbmcgdGhhdCBpcyBwYXNzZWQgdG8gaXQgaWYgdGhlIHN0cmluZwogICogY29udGFpbnMgYSBjb250cm9sIGNoYXJhY3RlciwgdW5wcmludGFibGUgY2hhcmFjdGVyLCBkb3VibGUgcXVvdGUgbWFyaywKICAqIG9yIGEgc3BhY2UuIFVuZXNjYXBlZCBzdHJpbmdzIHdpbGwgc3RhcnQgYW5kIGVuZCB3aXRoIGEgZG91YmxlIHF1b3RlIG1hcmsuCiAgKiBTdHJpbmdzIHRoYXQgYXJlIGVzY2FwZWQgYXJlIHByaW50ZWQgaW4gaGV4ICgyIGRpZ2l0cyBwZXIgY2hhcikuCisgKgorICogVGhlIGNhbGxlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgdG8gbG9nLCB3aGljaCBtYXkKKyAqIG9yIG1heSBub3QgYmUgdGhlIGVudGlyZSBzdHJpbmcuCiAgKi8KLXZvaWQgYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgY29uc3QgY2hhciAqc3RyaW5nKQorY29uc3QgY2hhciAqYXVkaXRfbG9nX25fdW50cnVzdGVkc3RyaW5nKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCBzaXplX3QgbGVuLAorCQkJCQljb25zdCBjaGFyICpzdHJpbmcpCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHN0cmluZzsKIAogCXdoaWxlICgqcCkgewogCQlpZiAoKnAgPT0gJyInIHx8ICpwIDwgMHgyMSB8fCAqcCA+IDB4N2YpIHsKLQkJCWF1ZGl0X2xvZ19oZXgoYWIsIHN0cmluZywgc3RybGVuKHN0cmluZykpOwotCQkJcmV0dXJuOworCQkJYXVkaXRfbG9nX2hleChhYiwgc3RyaW5nLCBsZW4pOworCQkJcmV0dXJuIHN0cmluZyArIGxlbiArIDE7CiAJCX0KIAkJcCsrOwogCX0KLQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiXCIlc1wiIiwgc3RyaW5nKTsKKwlhdWRpdF9sb2dfbl9zdHJpbmcoYWIsIGxlbiwgc3RyaW5nKTsKKwlyZXR1cm4gcCArIDE7Cit9CisKKy8qKgorICogYXVkaXRfbG9nX3Vuc3RydXN0ZWRzdHJpbmcgLSBsb2cgYSBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiByYW5kb20gY2hhcmFjdGVycworICogQGFiOiBhdWRpdF9idWZmZXIKKyAqIEBzdHJpbmc6IHN0cmluZyB0byBiZSBsb2dnZWQKKyAqCisgKiBTYW1lIGFzIGF1ZGl0X2xvZ19uX3Vuc3RydXN0ZWRzdHJpbmcoKSwgZXhjZXB0IHRoYXQgc3RybGVuIGlzIHVzZWQgdG8KKyAqIGRldGVybWluZSBzdHJpbmcgbGVuZ3RoLgorICovCitjb25zdCBjaGFyICphdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJcmV0dXJuIGF1ZGl0X2xvZ19uX3VudHJ1c3RlZHN0cmluZyhhYiwgc3RybGVuKHN0cmluZyksIHN0cmluZyk7CiB9CiAKIC8qIFRoaXMgaXMgYSBoZWxwZXItZnVuY3Rpb24gdG8gcHJpbnQgdGhlIGVzY2FwZWQgZF9wYXRoICovCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXQuaCBiL2tlcm5lbC9hdWRpdC5oCmluZGV4IDZmNzMzOTIuLjgzMjNlNDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdC5oCisrKyBiL2tlcm5lbC9hdWRpdC5oCkBAIC0xOSw5ICsxOSw5IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiAvKiAwID0gbm8gY2hlY2tpbmcKICAgIDEgPSBwdXRfY291bnQgY2hlY2tpbmcKQEAgLTUzLDYgKzUzLDE4IEBACiB9OwogCiAvKiBSdWxlIGxpc3RzICovCitzdHJ1Y3QgYXVkaXRfcGFyZW50OworCitzdHJ1Y3QgYXVkaXRfd2F0Y2ggeworCWF0b21pY190CQljb3VudDsJLyogcmVmZXJlbmNlIGNvdW50ICovCisJY2hhcgkJCSpwYXRoOwkvKiBpbnNlcnRpb24gcGF0aCAqLworCWRldl90CQkJZGV2OwkvKiBhc3NvY2lhdGVkIHN1cGVyYmxvY2sgZGV2aWNlICovCisJdW5zaWduZWQgbG9uZwkJaW5vOwkvKiBhc3NvY2lhdGVkIGlub2RlIG51bWJlciAqLworCXN0cnVjdCBhdWRpdF9wYXJlbnQJKnBhcmVudDsgLyogYXNzb2NpYXRlZCBwYXJlbnQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXdsaXN0OwkvKiBlbnRyeSBpbiBwYXJlbnQtPndhdGNoZXMgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJcnVsZXM7CS8qIGFzc29jaWF0ZWQgcnVsZXMgKi8KK307CisKIHN0cnVjdCBhdWRpdF9maWVsZCB7CiAJdTMyCQkJCXR5cGU7CiAJdTMyCQkJCXZhbDsKQEAgLTcwLDYgKzgyLDkgQEAKIAl1MzIJCQlidWZsZW47IC8qIGZvciBkYXRhIGFsbG9jIG9uIGxpc3QgcnVsZXMgKi8KIAl1MzIJCQlmaWVsZF9jb3VudDsKIAlzdHJ1Y3QgYXVkaXRfZmllbGQJKmZpZWxkczsKKwlzdHJ1Y3QgYXVkaXRfZmllbGQJKmlub2RlX2Y7IC8qIHF1aWNrIGFjY2VzcyB0byBhbiBpbm9kZSBmaWVsZCAqLworCXN0cnVjdCBhdWRpdF93YXRjaAkqd2F0Y2g7CS8qIGFzc29jaWF0ZWQgd2F0Y2ggKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJsaXN0OwkvKiBlbnRyeSBpbiBhdWRpdF93YXRjaC5ydWxlcyBsaXN0ICovCiB9OwogCiBzdHJ1Y3QgYXVkaXRfZW50cnkgewpAQCAtNzgsMTUgKzkzLDUzIEBACiAJc3RydWN0IGF1ZGl0X2tydWxlCXJ1bGU7CiB9OwogCi0KIGV4dGVybiBpbnQgYXVkaXRfcGlkOwotZXh0ZXJuIGludCBhdWRpdF9jb21wYXJhdG9yKGNvbnN0IHUzMiBsZWZ0LCBjb25zdCB1MzIgb3AsIGNvbnN0IHUzMiByaWdodCk7CiAKKyNkZWZpbmUgQVVESVRfSU5PREVfQlVDS0VUUwkzMgorZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYXVkaXRfaW5vZGVfaGFzaFtBVURJVF9JTk9ERV9CVUNLRVRTXTsKKworc3RhdGljIGlubGluZSBpbnQgYXVkaXRfaGFzaF9pbm8odTMyIGlubykKK3sKKwlyZXR1cm4gKGlubyAmIChBVURJVF9JTk9ERV9CVUNLRVRTLTEpKTsKK30KKworZXh0ZXJuIGludCBhdWRpdF9jb21wYXJhdG9yKGNvbnN0IHUzMiBsZWZ0LCBjb25zdCB1MzIgb3AsIGNvbnN0IHUzMiByaWdodCk7CitleHRlcm4gaW50IGF1ZGl0X2NvbXBhcmVfZG5hbWVfcGF0aChjb25zdCBjaGFyICpkbmFtZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgaW50ICpkaXJsZW4pOworZXh0ZXJuIHN0cnVjdCBza19idWZmICoJICAgIGF1ZGl0X21ha2VfcmVwbHkoaW50IHBpZCwgaW50IHNlcSwgaW50IHR5cGUsCisJCQkJCSAgICAgaW50IGRvbmUsIGludCBtdWx0aSwKKwkJCQkJICAgICB2b2lkICpwYXlsb2FkLCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZAkJICAgIGF1ZGl0X3NlbmRfcmVwbHkoaW50IHBpZCwgaW50IHNlcSwgaW50IHR5cGUsCiAJCQkJCSAgICAgaW50IGRvbmUsIGludCBtdWx0aSwKIAkJCQkJICAgICB2b2lkICpwYXlsb2FkLCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZ19sb3N0KGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9wYW5pYyhjb25zdCBjaGFyICptZXNzYWdlKTsKLWV4dGVybiBzdHJ1Y3QgbXV0ZXggYXVkaXRfbmV0bGlua19tdXRleDsKIAorc3RydWN0IGF1ZGl0X25ldGxpbmtfbGlzdCB7CisJaW50IHBpZDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHE7Cit9OworCitpbnQgYXVkaXRfc2VuZF9saXN0KHZvaWQgKik7CisKK3N0cnVjdCBpbm90aWZ5X3dhdGNoOworZXh0ZXJuIHZvaWQgYXVkaXRfZnJlZV9wYXJlbnQoc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7CitleHRlcm4gdm9pZCBhdWRpdF9oYW5kbGVfaWV2ZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICosIHUzMiwgdTMyLCB1MzIsCisJCQkJY29uc3QgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IHNlbGludXhfYXVkaXRfcnVsZV91cGRhdGUodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCitleHRlcm4gdm9pZCBfX2F1ZGl0X3NpZ25hbF9pbmZvKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CitzdGF0aWMgaW5saW5lIHZvaWQgYXVkaXRfc2lnbmFsX2luZm8oaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICp0KQoreworCWlmICh1bmxpa2VseShhdWRpdF9waWQgJiYgdC0+dGdpZCA9PSBhdWRpdF9waWQpKQorCQlfX2F1ZGl0X3NpZ25hbF9pbmZvKHNpZywgdCk7Cit9CitleHRlcm4gZW51bSBhdWRpdF9zdGF0ZSBhdWRpdF9maWx0ZXJfaW5vZGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqLAorCQkJCQkgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKik7CitleHRlcm4gdm9pZCBhdWRpdF9zZXRfYXVkaXRhYmxlKHN0cnVjdCBhdWRpdF9jb250ZXh0ICopOworI2Vsc2UKKyNkZWZpbmUgYXVkaXRfc2lnbmFsX2luZm8ocyx0KQorI2RlZmluZSBhdWRpdF9maWx0ZXJfaW5vZGVzKHQsYykgQVVESVRfRElTQUJMRUQKKyNkZWZpbmUgYXVkaXRfc2V0X2F1ZGl0YWJsZShjKQorI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRmaWx0ZXIuYyBiL2tlcm5lbC9hdWRpdGZpbHRlci5jCmluZGV4IDdjMTM0OTAuLjRjOTlkMmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdGZpbHRlci5jCisrKyBiL2tlcm5lbC9hdWRpdGZpbHRlci5jCkBAIC0yMiwxMyArMjIsNTkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgogI2luY2x1ZGUgImF1ZGl0LmgiCiAKLS8qIFRoZXJlIGFyZSB0aHJlZSBsaXN0cyBvZiBydWxlcyAtLSBvbmUgdG8gc2VhcmNoIGF0IHRhc2sgY3JlYXRpb24KLSAqIHRpbWUsIG9uZSB0byBzZWFyY2ggYXQgc3lzY2FsbCBlbnRyeSB0aW1lLCBhbmQgYW5vdGhlciB0byBzZWFyY2ggYXQKLSAqIHN5c2NhbGwgZXhpdCB0aW1lLiAqLworLyoKKyAqIExvY2tpbmcgbW9kZWw6CisgKgorICogYXVkaXRfZmlsdGVyX211dGV4OgorICogCQlTeW5jaHJvbml6ZXMgd3JpdGVzIGFuZCBibG9ja2luZyByZWFkcyBvZiBhdWRpdCdzIGZpbHRlcmxpc3QKKyAqIAkJZGF0YS4gIFJjdSBpcyB1c2VkIHRvIHRyYXZlcnNlIHRoZSBmaWx0ZXJsaXN0IGFuZCBhY2Nlc3MKKyAqIAkJY29udGVudHMgb2Ygc3RydWN0cyBhdWRpdF9lbnRyeSwgYXVkaXRfd2F0Y2ggYW5kIG9wYXF1ZQorICogCQlzZWxpbnV4IHJ1bGVzIGR1cmluZyBmaWx0ZXJpbmcuICBJZiBtb2RpZmllZCwgdGhlc2Ugc3RydWN0dXJlcworICogCQltdXN0IGJlIGNvcGllZCBhbmQgcmVwbGFjZSB0aGVpciBjb3VudGVycGFydHMgaW4gdGhlIGZpbHRlcmxpc3QuCisgKiAJCUFuIGF1ZGl0X3BhcmVudCBzdHJ1Y3QgaXMgbm90IGFjY2Vzc2VkIGR1cmluZyBmaWx0ZXJpbmcsIHNvIG1heQorICogCQliZSB3cml0dGVuIGRpcmVjdGx5IHByb3ZpZGVkIGF1ZGl0X2ZpbHRlcl9tdXRleCBpcyBoZWxkLgorICovCisKKy8qCisgKiBSZWZlcmVuY2UgY291bnRpbmc6CisgKgorICogYXVkaXRfcGFyZW50OiBsaWZldGltZSBpcyBmcm9tIGF1ZGl0X2luaXRfcGFyZW50KCkgdG8gcmVjZWlwdCBvZiBhbiBJTl9JR05PUkVECisgKiAJZXZlbnQuICBFYWNoIGF1ZGl0X3dhdGNoIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGl0cyBhc3NvY2lhdGVkIHBhcmVudC4KKyAqCisgKiBhdWRpdF93YXRjaDogaWYgYWRkZWQgdG8gbGlzdHMsIGxpZmV0aW1lIGlzIGZyb20gYXVkaXRfaW5pdF93YXRjaCgpIHRvCisgKiAJYXVkaXRfcmVtb3ZlX3dhdGNoKCkuICBBZGRpdGlvbmFsbHksIGFuIGF1ZGl0X3dhdGNoIG1heSBleGlzdAorICogCXRlbXBvcmFyaWx5IHRvIGFzc2lzdCBpbiBzZWFyY2hpbmcgZXhpc3RpbmcgZmlsdGVyIGRhdGEuICBFYWNoCisgKiAJYXVkaXRfa3J1bGUgaG9sZHMgYSByZWZlcmVuY2UgdG8gaXRzIGFzc29jaWF0ZWQgd2F0Y2guCisgKi8KKworc3RydWN0IGF1ZGl0X3BhcmVudCB7CisJc3RydWN0IGxpc3RfaGVhZAlpbGlzdDsJLyogZW50cnkgaW4gaW5vdGlmeSByZWdpc3RyYXRpb24gbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJd2F0Y2hlczsgLyogYXNzb2NpYXRlZCB3YXRjaGVzICovCisJc3RydWN0IGlub3RpZnlfd2F0Y2gJd2RhdGE7CS8qIGlub3RpZnkgd2F0Y2ggZGF0YSAqLworCXVuc2lnbmVkCQlmbGFnczsJLyogc3RhdHVzIGZsYWdzICovCit9OworCisvKgorICogYXVkaXRfcGFyZW50IHN0YXR1cyBmbGFnczoKKyAqCisgKiBBVURJVF9QQVJFTlRfSU5WQUxJRCAtIHNldCBhbnl0aW1lIHJ1bGVzL3dhdGNoZXMgYXJlIGF1dG8tcmVtb3ZlZCBkdWUgdG8KKyAqIGEgZmlsZXN5c3RlbSBldmVudCB0byBlbnN1cmUgd2UncmUgYWRkaW5nIGF1ZGl0IHdhdGNoZXMgdG8gYSB2YWxpZCBwYXJlbnQuCisgKiBUZWNobmljYWxseSBub3QgbmVlZGVkIGZvciBJTl9ERUxFVEVfU0VMRiBvciBJTl9VTk1PVU5UIGV2ZW50cywgYXMgd2UgY2Fubm90CisgKiByZWNlaXZlIHRoZW0gd2hpbGUgd2UgaGF2ZSBuYW1laWRhdGEsIGJ1dCBtdXN0IGJlIHVzZWQgZm9yIElOX01PVkVfU0VMRiB3aGljaAorICogd2UgY2FuIHJlY2VpdmUgd2hpbGUgaG9sZGluZyBuYW1laWRhdGEuCisgKi8KKyNkZWZpbmUgQVVESVRfUEFSRU5UX0lOVkFMSUQJMHgwMDEKKworLyogQXVkaXQgZmlsdGVyIGxpc3RzLCBkZWZpbmVkIGluIDxsaW51eC9hdWRpdC5oPiAqLwogc3RydWN0IGxpc3RfaGVhZCBhdWRpdF9maWx0ZXJfbGlzdFtBVURJVF9OUl9GSUxURVJTXSA9IHsKIAlMSVNUX0hFQURfSU5JVChhdWRpdF9maWx0ZXJfbGlzdFswXSksCiAJTElTVF9IRUFEX0lOSVQoYXVkaXRfZmlsdGVyX2xpc3RbMV0pLApAQCAtNDEsOSArODcsNTMgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIERFRklORV9NVVRFWChhdWRpdF9maWx0ZXJfbXV0ZXgpOworCisvKiBJbm90aWZ5IGhhbmRsZSAqLworZXh0ZXJuIHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqYXVkaXRfaWg7CisKKy8qIElub3RpZnkgZXZlbnRzIHdlIGNhcmUgYWJvdXQuICovCisjZGVmaW5lIEFVRElUX0lOX1dBVENIIElOX01PVkV8SU5fQ1JFQVRFfElOX0RFTEVURXxJTl9ERUxFVEVfU0VMRnxJTl9NT1ZFX1NFTEYKKwordm9pZCBhdWRpdF9mcmVlX3BhcmVudChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqaV93YXRjaCkKK3sKKwlzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwYXJlbnQ7CisKKwlwYXJlbnQgPSBjb250YWluZXJfb2YoaV93YXRjaCwgc3RydWN0IGF1ZGl0X3BhcmVudCwgd2RhdGEpOworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnBhcmVudC0+d2F0Y2hlcykpOworCWtmcmVlKHBhcmVudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9nZXRfd2F0Y2goc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCkKK3sKKwlhdG9taWNfaW5jKCZ3YXRjaC0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBhdWRpdF9wdXRfd2F0Y2goc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmd2F0Y2gtPmNvdW50KSkgeworCQlXQVJOX09OKHdhdGNoLT5wYXJlbnQpOworCQlXQVJOX09OKCFsaXN0X2VtcHR5KCZ3YXRjaC0+cnVsZXMpKTsKKwkJa2ZyZWUod2F0Y2gtPnBhdGgpOworCQlrZnJlZSh3YXRjaCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdWRpdF9yZW1vdmVfd2F0Y2goc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCkKK3sKKwlsaXN0X2RlbCgmd2F0Y2gtPndsaXN0KTsKKwlwdXRfaW5vdGlmeV93YXRjaCgmd2F0Y2gtPnBhcmVudC0+d2RhdGEpOworCXdhdGNoLT5wYXJlbnQgPSBOVUxMOworCWF1ZGl0X3B1dF93YXRjaCh3YXRjaCk7IC8qIG1hdGNoIGluaXRpYWwgZ2V0ICovCit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9mcmVlX3J1bGUoc3RydWN0IGF1ZGl0X2VudHJ5ICplKQogewogCWludCBpOworCisJLyogc29tZSBydWxlcyBkb24ndCBoYXZlIGFzc29jaWF0ZWQgd2F0Y2hlcyAqLworCWlmIChlLT5ydWxlLndhdGNoKQorCQlhdWRpdF9wdXRfd2F0Y2goZS0+cnVsZS53YXRjaCk7CiAJaWYgKGUtPnJ1bGUuZmllbGRzKQogCQlmb3IgKGkgPSAwOyBpIDwgZS0+cnVsZS5maWVsZF9jb3VudDsgaSsrKSB7CiAJCQlzdHJ1Y3QgYXVkaXRfZmllbGQgKmYgPSAmZS0+cnVsZS5maWVsZHNbaV07CkBAIC02MCw2ICsxNTAsNTAgQEAKIAlhdWRpdF9mcmVlX3J1bGUoZSk7CiB9CiAKKy8qIEluaXRpYWxpemUgYSBwYXJlbnQgd2F0Y2ggZW50cnkuICovCitzdGF0aWMgc3RydWN0IGF1ZGl0X3BhcmVudCAqYXVkaXRfaW5pdF9wYXJlbnQoc3RydWN0IG5hbWVpZGF0YSAqbmRwKQoreworCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudDsKKwlzMzIgd2Q7CisKKwlwYXJlbnQgPSBremFsbG9jKHNpemVvZigqcGFyZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFwYXJlbnQpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCUlOSVRfTElTVF9IRUFEKCZwYXJlbnQtPndhdGNoZXMpOworCXBhcmVudC0+ZmxhZ3MgPSAwOworCisJaW5vdGlmeV9pbml0X3dhdGNoKCZwYXJlbnQtPndkYXRhKTsKKwkvKiBncmFiIGEgcmVmIHNvIGlub3RpZnkgd2F0Y2ggaGFuZ3MgYXJvdW5kIHVudGlsIHdlIHRha2UgYXVkaXRfZmlsdGVyX211dGV4ICovCisJZ2V0X2lub3RpZnlfd2F0Y2goJnBhcmVudC0+d2RhdGEpOworCXdkID0gaW5vdGlmeV9hZGRfd2F0Y2goYXVkaXRfaWgsICZwYXJlbnQtPndkYXRhLCBuZHAtPmRlbnRyeS0+ZF9pbm9kZSwKKwkJCSAgICAgICBBVURJVF9JTl9XQVRDSCk7CisJaWYgKHdkIDwgMCkgeworCQlhdWRpdF9mcmVlX3BhcmVudCgmcGFyZW50LT53ZGF0YSk7CisJCXJldHVybiBFUlJfUFRSKHdkKTsKKwl9CisKKwlyZXR1cm4gcGFyZW50OworfQorCisvKiBJbml0aWFsaXplIGEgd2F0Y2ggZW50cnkuICovCitzdGF0aWMgc3RydWN0IGF1ZGl0X3dhdGNoICphdWRpdF9pbml0X3dhdGNoKGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaDsKKworCXdhdGNoID0ga3phbGxvYyhzaXplb2YoKndhdGNoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCF3YXRjaCkpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJSU5JVF9MSVNUX0hFQUQoJndhdGNoLT5ydWxlcyk7CisJYXRvbWljX3NldCgmd2F0Y2gtPmNvdW50LCAxKTsKKwl3YXRjaC0+cGF0aCA9IHBhdGg7CisJd2F0Y2gtPmRldiA9IChkZXZfdCktMTsKKwl3YXRjaC0+aW5vID0gKHVuc2lnbmVkIGxvbmcpLTE7CisKKwlyZXR1cm4gd2F0Y2g7Cit9CisKIC8qIEluaXRpYWxpemUgYW4gYXVkaXQgZmlsdGVybGlzdCBlbnRyeS4gKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9pbml0X2VudHJ5KHUzMiBmaWVsZF9jb3VudCkKIHsKQEAgLTEwNyw2ICsyNDEsNDMgQEAKIAlyZXR1cm4gc3RyOwogfQogCisvKiBUcmFuc2xhdGUgYW4gaW5vZGUgZmllbGQgdG8ga2VybmVsIHJlc3ByZXNlbnRhdGlvbi4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X3RvX2lub2RlKHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUsCisJCQkJIHN0cnVjdCBhdWRpdF9maWVsZCAqZikKK3sKKwlpZiAoa3J1bGUtPmxpc3RuciAhPSBBVURJVF9GSUxURVJfRVhJVCB8fAorCSAgICBrcnVsZS0+d2F0Y2ggfHwga3J1bGUtPmlub2RlX2YpCisJCXJldHVybiAtRUlOVkFMOworCisJa3J1bGUtPmlub2RlX2YgPSBmOworCXJldHVybiAwOworfQorCisvKiBUcmFuc2xhdGUgYSB3YXRjaCBzdHJpbmcgdG8ga2VybmVsIHJlc3ByZXNlbnRhdGlvbi4gKi8KK3N0YXRpYyBpbnQgYXVkaXRfdG9fd2F0Y2goc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSwgY2hhciAqcGF0aCwgaW50IGxlbiwKKwkJCSAgdTMyIG9wKQoreworCXN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2g7CisKKwlpZiAoIWF1ZGl0X2loKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAocGF0aFswXSAhPSAnLycgfHwgcGF0aFtsZW4tMV0gPT0gJy8nIHx8CisJICAgIGtydWxlLT5saXN0bnIgIT0gQVVESVRfRklMVEVSX0VYSVQgfHwKKwkgICAgb3AgJiB+QVVESVRfRVFVQUwgfHwKKwkgICAga3J1bGUtPmlub2RlX2YgfHwga3J1bGUtPndhdGNoKSAvKiAxIGlub2RlICMgcGVyIHJ1bGUsIGZvciBoYXNoICovCisJCXJldHVybiAtRUlOVkFMOworCisJd2F0Y2ggPSBhdWRpdF9pbml0X3dhdGNoKHBhdGgpOworCWlmICh1bmxpa2VseShJU19FUlIod2F0Y2gpKSkKKwkJcmV0dXJuIFBUUl9FUlIod2F0Y2gpOworCisJYXVkaXRfZ2V0X3dhdGNoKHdhdGNoKTsKKwlrcnVsZS0+d2F0Y2ggPSB3YXRjaDsKKworCXJldHVybiAwOworfQorCiAvKiBDb21tb24gdXNlci1zcGFjZSB0byBrZXJuZWwgcnVsZSB0cmFuc2xhdGlvbi4gKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF90b19lbnRyeV9jb21tb24oc3RydWN0IGF1ZGl0X3J1bGUgKnJ1bGUpCiB7CkBAIC0xMjgsOCArMjk5LDExIEBACiAjZW5kaWYKIAkJOwogCX0KLQlpZiAocnVsZS0+YWN0aW9uICE9IEFVRElUX05FVkVSICYmIHJ1bGUtPmFjdGlvbiAhPSBBVURJVF9QT1NTSUJMRSAmJgotCSAgICBydWxlLT5hY3Rpb24gIT0gQVVESVRfQUxXQVlTKQorCWlmICh1bmxpa2VseShydWxlLT5hY3Rpb24gPT0gQVVESVRfUE9TU0lCTEUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVVESVRfUE9TU0lCTEUgaXMgZGVwcmVjYXRlZFxuIik7CisJCWdvdG8gZXhpdF9lcnI7CisJfQorCWlmIChydWxlLT5hY3Rpb24gIT0gQVVESVRfTkVWRVIgJiYgcnVsZS0+YWN0aW9uICE9IEFVRElUX0FMV0FZUykKIAkJZ290byBleGl0X2VycjsKIAlpZiAocnVsZS0+ZmllbGRfY291bnQgPiBBVURJVF9NQVhfRklFTERTKQogCQlnb3RvIGV4aXRfZXJyOwpAQCAtMTU4LDYgKzMzMiw3IEBACiBzdGF0aWMgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9ydWxlX3RvX2VudHJ5KHN0cnVjdCBhdWRpdF9ydWxlICpydWxlKQogewogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGF1ZGl0X2ZpZWxkICpmOwogCWludCBlcnIgPSAwOwogCWludCBpOwogCkBAIC0xNzIsMTQgKzM0NywzNyBAQAogCQlmLT50eXBlID0gcnVsZS0+ZmllbGRzW2ldICYgfihBVURJVF9ORUdBVEV8QVVESVRfT1BFUkFUT1JTKTsKIAkJZi0+dmFsID0gcnVsZS0+dmFsdWVzW2ldOwogCi0JCWlmIChmLT50eXBlICYgQVVESVRfVU5VU0VEX0JJVFMgfHwKLQkJICAgIGYtPnR5cGUgPT0gQVVESVRfU0VfVVNFUiB8fAotCQkgICAgZi0+dHlwZSA9PSBBVURJVF9TRV9ST0xFIHx8Ci0JCSAgICBmLT50eXBlID09IEFVRElUX1NFX1RZUEUgfHwKLQkJICAgIGYtPnR5cGUgPT0gQVVESVRfU0VfU0VOIHx8Ci0JCSAgICBmLT50eXBlID09IEFVRElUX1NFX0NMUikgewotCQkJZXJyID0gLUVJTlZBTDsKKwkJZXJyID0gLUVJTlZBTDsKKwkJc3dpdGNoKGYtPnR5cGUpIHsKKwkJZGVmYXVsdDoKIAkJCWdvdG8gZXhpdF9mcmVlOworCQljYXNlIEFVRElUX1BJRDoKKwkJY2FzZSBBVURJVF9VSUQ6CisJCWNhc2UgQVVESVRfRVVJRDoKKwkJY2FzZSBBVURJVF9TVUlEOgorCQljYXNlIEFVRElUX0ZTVUlEOgorCQljYXNlIEFVRElUX0dJRDoKKwkJY2FzZSBBVURJVF9FR0lEOgorCQljYXNlIEFVRElUX1NHSUQ6CisJCWNhc2UgQVVESVRfRlNHSUQ6CisJCWNhc2UgQVVESVRfTE9HSU5VSUQ6CisJCWNhc2UgQVVESVRfUEVSUzoKKwkJY2FzZSBBVURJVF9BUkNIOgorCQljYXNlIEFVRElUX01TR1RZUEU6CisJCWNhc2UgQVVESVRfREVWTUFKT1I6CisJCWNhc2UgQVVESVRfREVWTUlOT1I6CisJCWNhc2UgQVVESVRfRVhJVDoKKwkJY2FzZSBBVURJVF9TVUNDRVNTOgorCQljYXNlIEFVRElUX0FSRzA6CisJCWNhc2UgQVVESVRfQVJHMToKKwkJY2FzZSBBVURJVF9BUkcyOgorCQljYXNlIEFVRElUX0FSRzM6CisJCQlicmVhazsKKwkJY2FzZSBBVURJVF9JTk9ERToKKwkJCWVyciA9IGF1ZGl0X3RvX2lub2RlKCZlbnRyeS0+cnVsZSwgZik7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJYnJlYWs7CiAJCX0KIAogCQllbnRyeS0+cnVsZS52ZXJzX29wcyA9IChmLT5vcCAmIEFVRElUX09QRVJBVE9SUykgPyAyIDogMTsKQEAgLTE5Niw2ICszOTQsMTggQEAKIAkJfQogCX0KIAorCWYgPSBlbnRyeS0+cnVsZS5pbm9kZV9mOworCWlmIChmKSB7CisJCXN3aXRjaChmLT5vcCkgeworCQljYXNlIEFVRElUX05PVF9FUVVBTDoKKwkJCWVudHJ5LT5ydWxlLmlub2RlX2YgPSBOVUxMOworCQljYXNlIEFVRElUX0VRVUFMOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGV4aXRfZnJlZTsKKwkJfQorCX0KKwogZXhpdF9ub2ZyZWU6CiAJcmV0dXJuIGVudHJ5OwogCkBAIC0yMTAsNiArNDIwLDcgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OworCXN0cnVjdCBhdWRpdF9maWVsZCAqZjsKIAl2b2lkICpidWZwOwogCXNpemVfdCByZW1haW4gPSBkYXRhc3ogLSBzaXplb2Yoc3RydWN0IGF1ZGl0X3J1bGVfZGF0YSk7CiAJaW50IGk7CkBAIC0yMzUsNiArNDQ2LDI5IEBACiAJCWYtPnNlX3N0ciA9IE5VTEw7CiAJCWYtPnNlX3J1bGUgPSBOVUxMOwogCQlzd2l0Y2goZi0+dHlwZSkgeworCQljYXNlIEFVRElUX1BJRDoKKwkJY2FzZSBBVURJVF9VSUQ6CisJCWNhc2UgQVVESVRfRVVJRDoKKwkJY2FzZSBBVURJVF9TVUlEOgorCQljYXNlIEFVRElUX0ZTVUlEOgorCQljYXNlIEFVRElUX0dJRDoKKwkJY2FzZSBBVURJVF9FR0lEOgorCQljYXNlIEFVRElUX1NHSUQ6CisJCWNhc2UgQVVESVRfRlNHSUQ6CisJCWNhc2UgQVVESVRfTE9HSU5VSUQ6CisJCWNhc2UgQVVESVRfUEVSUzoKKwkJY2FzZSBBVURJVF9BUkNIOgorCQljYXNlIEFVRElUX01TR1RZUEU6CisJCWNhc2UgQVVESVRfUFBJRDoKKwkJY2FzZSBBVURJVF9ERVZNQUpPUjoKKwkJY2FzZSBBVURJVF9ERVZNSU5PUjoKKwkJY2FzZSBBVURJVF9FWElUOgorCQljYXNlIEFVRElUX1NVQ0NFU1M6CisJCWNhc2UgQVVESVRfQVJHMDoKKwkJY2FzZSBBVURJVF9BUkcxOgorCQljYXNlIEFVRElUX0FSRzI6CisJCWNhc2UgQVVESVRfQVJHMzoKKwkJCWJyZWFrOwogCQljYXNlIEFVRElUX1NFX1VTRVI6CiAJCWNhc2UgQVVESVRfU0VfUk9MRToKIAkJY2FzZSBBVURJVF9TRV9UWVBFOgpAQCAtMjYwLDYgKzQ5NCwzNyBAQAogCQkJfSBlbHNlCiAJCQkJZi0+c2Vfc3RyID0gc3RyOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfV0FUQ0g6CisJCQlzdHIgPSBhdWRpdF91bnBhY2tfc3RyaW5nKCZidWZwLCAmcmVtYWluLCBmLT52YWwpOworCQkJaWYgKElTX0VSUihzdHIpKQorCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJZW50cnktPnJ1bGUuYnVmbGVuICs9IGYtPnZhbDsKKworCQkJZXJyID0gYXVkaXRfdG9fd2F0Y2goJmVudHJ5LT5ydWxlLCBzdHIsIGYtPnZhbCwgZi0+b3ApOworCQkJaWYgKGVycikgeworCQkJCWtmcmVlKHN0cik7CisJCQkJZ290byBleGl0X2ZyZWU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBBVURJVF9JTk9ERToKKwkJCWVyciA9IGF1ZGl0X3RvX2lub2RlKCZlbnRyeS0+cnVsZSwgZik7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGV4aXRfZnJlZTsKKwkJfQorCX0KKworCWYgPSBlbnRyeS0+cnVsZS5pbm9kZV9mOworCWlmIChmKSB7CisJCXN3aXRjaChmLT5vcCkgeworCQljYXNlIEFVRElUX05PVF9FUVVBTDoKKwkJCWVudHJ5LT5ydWxlLmlub2RlX2YgPSBOVUxMOworCQljYXNlIEFVRElUX0VRVUFMOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGV4aXRfZnJlZTsKIAkJfQogCX0KIApAQCAtMjkxLDcgKzU1Niw3IEBACiAKIAlydWxlID0ga21hbGxvYyhzaXplb2YoKnJ1bGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIXJ1bGUpKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuIE5VTEw7CiAJbWVtc2V0KHJ1bGUsIDAsIHNpemVvZigqcnVsZSkpOwogCiAJcnVsZS0+ZmxhZ3MgPSBrcnVsZS0+ZmxhZ3MgfCBrcnVsZS0+bGlzdG5yOwpAQCAtMzIyLDcgKzU4Nyw3IEBACiAKIAlkYXRhID0ga21hbGxvYyhzaXplb2YoKmRhdGEpICsga3J1bGUtPmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KCFkYXRhKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJldHVybiBOVUxMOwogCW1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpKTsKIAogCWRhdGEtPmZsYWdzID0ga3J1bGUtPmZsYWdzIHwga3J1bGUtPmxpc3RucjsKQEAgLTM0Myw2ICs2MDgsMTAgQEAKIAkJCWRhdGEtPmJ1ZmxlbiArPSBkYXRhLT52YWx1ZXNbaV0gPQogCQkJCWF1ZGl0X3BhY2tfc3RyaW5nKCZidWZwLCBmLT5zZV9zdHIpOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfV0FUQ0g6CisJCQlkYXRhLT5idWZsZW4gKz0gZGF0YS0+dmFsdWVzW2ldID0KKwkJCQlhdWRpdF9wYWNrX3N0cmluZygmYnVmcCwga3J1bGUtPndhdGNoLT5wYXRoKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZGF0YS0+dmFsdWVzW2ldID0gZi0+dmFsOwogCQl9CkBAIC0zNzgsNiArNjQ3LDEwIEBACiAJCQlpZiAoc3RyY21wKGEtPmZpZWxkc1tpXS5zZV9zdHIsIGItPmZpZWxkc1tpXS5zZV9zdHIpKQogCQkJCXJldHVybiAxOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfV0FUQ0g6CisJCQlpZiAoc3RyY21wKGEtPndhdGNoLT5wYXRoLCBiLT53YXRjaC0+cGF0aCkpCisJCQkJcmV0dXJuIDE7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWlmIChhLT5maWVsZHNbaV0udmFsICE9IGItPmZpZWxkc1tpXS52YWwpCiAJCQkJcmV0dXJuIDE7CkBAIC0zOTEsNiArNjY0LDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIER1cGxpY2F0ZSB0aGUgZ2l2ZW4gYXVkaXQgd2F0Y2guICBUaGUgbmV3IHdhdGNoJ3MgcnVsZXMgbGlzdCBpcyBpbml0aWFsaXplZAorICogdG8gYW4gZW1wdHkgbGlzdCBhbmQgd2xpc3QgaXMgdW5kZWZpbmVkLiAqLworc3RhdGljIHN0cnVjdCBhdWRpdF93YXRjaCAqYXVkaXRfZHVwZV93YXRjaChzdHJ1Y3QgYXVkaXRfd2F0Y2ggKm9sZCkKK3sKKwljaGFyICpwYXRoOworCXN0cnVjdCBhdWRpdF93YXRjaCAqbmV3OworCisJcGF0aCA9IGtzdHJkdXAob2xkLT5wYXRoLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIXBhdGgpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW5ldyA9IGF1ZGl0X2luaXRfd2F0Y2gocGF0aCk7CisJaWYgKHVubGlrZWx5KElTX0VSUihuZXcpKSkgeworCQlrZnJlZShwYXRoKTsKKwkJZ290byBvdXQ7CisJfQorCisJbmV3LT5kZXYgPSBvbGQtPmRldjsKKwluZXctPmlubyA9IG9sZC0+aW5vOworCWdldF9pbm90aWZ5X3dhdGNoKCZvbGQtPnBhcmVudC0+d2RhdGEpOworCW5ldy0+cGFyZW50ID0gb2xkLT5wYXJlbnQ7CisKK291dDoKKwlyZXR1cm4gbmV3OworfQorCiAvKiBEdXBsaWNhdGUgc2VsaW51eCBmaWVsZCBpbmZvcm1hdGlvbi4gIFRoZSBzZV9ydWxlIGlzIG9wYXF1ZSwgc28gbXVzdCBiZQogICogcmUtaW5pdGlhbGl6ZWQuICovCiBzdGF0aWMgaW5saW5lIGludCBhdWRpdF9kdXBlX3NlbGludXhfZmllbGQoc3RydWN0IGF1ZGl0X2ZpZWxkICpkZiwKQEAgLTQyMiw4ICs3MjEsMTEgQEAKIC8qIER1cGxpY2F0ZSBhbiBhdWRpdCBydWxlLiAgVGhpcyB3aWxsIGJlIGEgZGVlcCBjb3B5IHdpdGggdGhlIGV4Y2VwdGlvbgogICogb2YgdGhlIHdhdGNoIC0gdGhhdCBwb2ludGVyIGlzIGNhcnJpZWQgb3Zlci4gIFRoZSBzZWxpbnV4IHNwZWNpZmljIGZpZWxkcwogICogd2lsbCBiZSB1cGRhdGVkIGluIHRoZSBjb3B5LiAgVGhlIHBvaW50IGlzIHRvIGJlIGFibGUgdG8gcmVwbGFjZSB0aGUgb2xkCi0gKiBydWxlIHdpdGggdGhlIG5ldyBydWxlIGluIHRoZSBmaWx0ZXJsaXN0LCB0aGVuIGZyZWUgdGhlIG9sZCBydWxlLiAqLwotc3RhdGljIHN0cnVjdCBhdWRpdF9lbnRyeSAqYXVkaXRfZHVwZV9ydWxlKHN0cnVjdCBhdWRpdF9rcnVsZSAqb2xkKQorICogcnVsZSB3aXRoIHRoZSBuZXcgcnVsZSBpbiB0aGUgZmlsdGVybGlzdCwgdGhlbiBmcmVlIHRoZSBvbGQgcnVsZS4KKyAqIFRoZSBybGlzdCBlbGVtZW50IGlzIHVuZGVmaW5lZDsgbGlzdCBtYW5pcHVsYXRpb25zIGFyZSBoYW5kbGVkIGFwYXJ0IGZyb20KKyAqIHRoZSBpbml0aWFsIGNvcHkuICovCitzdGF0aWMgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9kdXBlX3J1bGUoc3RydWN0IGF1ZGl0X2tydWxlICpvbGQsCisJCQkJCSAgIHN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2gpCiB7CiAJdTMyIGZjb3VudCA9IG9sZC0+ZmllbGRfY291bnQ7CiAJc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeTsKQEAgLTQ0Miw2ICs3NDQsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBBVURJVF9CSVRNQVNLX1NJWkU7IGkrKykKIAkJbmV3LT5tYXNrW2ldID0gb2xkLT5tYXNrW2ldOwogCW5ldy0+YnVmbGVuID0gb2xkLT5idWZsZW47CisJbmV3LT5pbm9kZV9mID0gb2xkLT5pbm9kZV9mOworCW5ldy0+d2F0Y2ggPSBOVUxMOwogCW5ldy0+ZmllbGRfY291bnQgPSBvbGQtPmZpZWxkX2NvdW50OwogCW1lbWNweShuZXctPmZpZWxkcywgb2xkLT5maWVsZHMsIHNpemVvZihzdHJ1Y3QgYXVkaXRfZmllbGQpICogZmNvdW50KTsKIApAQCAtNDYzLDY4ICs3NjcsNDA5IEBACiAJCX0KIAl9CiAKKwlpZiAod2F0Y2gpIHsKKwkJYXVkaXRfZ2V0X3dhdGNoKHdhdGNoKTsKKwkJbmV3LT53YXRjaCA9IHdhdGNoOworCX0KKwogCXJldHVybiBlbnRyeTsKIH0KIAotLyogQWRkIHJ1bGUgdG8gZ2l2ZW4gZmlsdGVybGlzdCBpZiBub3QgYSBkdXBsaWNhdGUuICBQcm90ZWN0ZWQgYnkKLSAqIGF1ZGl0X25ldGxpbmtfbXV0ZXguICovCi1zdGF0aWMgaW5saW5lIGludCBhdWRpdF9hZGRfcnVsZShzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5LAotCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKKy8qIFVwZGF0ZSBpbm9kZSBpbmZvIGluIGF1ZGl0IHJ1bGVzIGJhc2VkIG9uIGZpbGVzeXN0ZW0gZXZlbnQuICovCitzdGF0aWMgdm9pZCBhdWRpdF91cGRhdGVfd2F0Y2goc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmRuYW1lLCBkZXZfdCBkZXYsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbm8sIHVuc2lnbmVkIGludmFsaWRhdGluZykKIHsKKwlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKm93YXRjaCwgKm53YXRjaCwgKm5leHR3OworCXN0cnVjdCBhdWRpdF9rcnVsZSAqciwgKm5leHRyOworCXN0cnVjdCBhdWRpdF9lbnRyeSAqb2VudHJ5LCAqbmVudHJ5OworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOworCisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob3dhdGNoLCBuZXh0dywgJnBhcmVudC0+d2F0Y2hlcywgd2xpc3QpIHsKKwkJaWYgKGF1ZGl0X2NvbXBhcmVfZG5hbWVfcGF0aChkbmFtZSwgb3dhdGNoLT5wYXRoLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIElmIHRoZSB1cGRhdGUgaW52b2x2ZXMgaW52YWxpZGF0aW5nIHJ1bGVzLCBkbyB0aGUgaW5vZGUtYmFzZWQKKwkJICogZmlsdGVyaW5nIG5vdywgc28gd2UgZG9uJ3Qgb21pdCByZWNvcmRzLiAqLworCQlpZiAoaW52YWxpZGF0aW5nICYmCisJCSAgICBhdWRpdF9maWx0ZXJfaW5vZGVzKGN1cnJlbnQsIGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpID09IEFVRElUX1JFQ09SRF9DT05URVhUKQorCQkJYXVkaXRfc2V0X2F1ZGl0YWJsZShjdXJyZW50LT5hdWRpdF9jb250ZXh0KTsKKworCQlud2F0Y2ggPSBhdWRpdF9kdXBlX3dhdGNoKG93YXRjaCk7CisJCWlmICh1bmxpa2VseShJU19FUlIobndhdGNoKSkpIHsKKwkJCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwkJCWF1ZGl0X3BhbmljKCJlcnJvciB1cGRhdGluZyB3YXRjaCwgc2tpcHBpbmciKTsKKwkJCXJldHVybjsKKwkJfQorCQlud2F0Y2gtPmRldiA9IGRldjsKKwkJbndhdGNoLT5pbm8gPSBpbm87CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHIsIG5leHRyLCAmb3dhdGNoLT5ydWxlcywgcmxpc3QpIHsKKworCQkJb2VudHJ5ID0gY29udGFpbmVyX29mKHIsIHN0cnVjdCBhdWRpdF9lbnRyeSwgcnVsZSk7CisJCQlsaXN0X2RlbCgmb2VudHJ5LT5ydWxlLnJsaXN0KTsKKwkJCWxpc3RfZGVsX3JjdSgmb2VudHJ5LT5saXN0KTsKKworCQkJbmVudHJ5ID0gYXVkaXRfZHVwZV9ydWxlKCZvZW50cnktPnJ1bGUsIG53YXRjaCk7CisJCQlpZiAodW5saWtlbHkoSVNfRVJSKG5lbnRyeSkpKQorCQkJCWF1ZGl0X3BhbmljKCJlcnJvciB1cGRhdGluZyB3YXRjaCwgcmVtb3ZpbmciKTsKKwkJCWVsc2UgeworCQkJCWludCBoID0gYXVkaXRfaGFzaF9pbm8oKHUzMilpbm8pOworCQkJCWxpc3RfYWRkKCZuZW50cnktPnJ1bGUucmxpc3QsICZud2F0Y2gtPnJ1bGVzKTsKKwkJCQlsaXN0X2FkZF9yY3UoJm5lbnRyeS0+bGlzdCwgJmF1ZGl0X2lub2RlX2hhc2hbaF0pOworCQkJfQorCisJCQljYWxsX3JjdSgmb2VudHJ5LT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZV9yY3UpOworCQl9CisKKwkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSk7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJhdWRpdCB1cGRhdGVkIHJ1bGVzIHNwZWNpZnlpbmcgd2F0Y2g9Iik7CisJCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIG93YXRjaC0+cGF0aCk7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgd2l0aCBkZXY9JXUgaW5vPSVsdVxuIiwgZGV2LCBpbm8pOworCQlhdWRpdF9sb2dfZW5kKGFiKTsKKworCQlhdWRpdF9yZW1vdmVfd2F0Y2gob3dhdGNoKTsKKwkJZ290byBhZGRfd2F0Y2hfdG9fcGFyZW50OyAvKiBldmVudCBhcHBsaWVzIHRvIGEgc2luZ2xlIHdhdGNoICovCisJfQorCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlyZXR1cm47CisKK2FkZF93YXRjaF90b19wYXJlbnQ6CisJbGlzdF9hZGQoJm53YXRjaC0+d2xpc3QsICZwYXJlbnQtPndhdGNoZXMpOworCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlyZXR1cm47Cit9CisKKy8qIFJlbW92ZSBhbGwgd2F0Y2hlcyAmIHJ1bGVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcmVudCB0aGF0IGlzIGdvaW5nIGF3YXkuICovCitzdGF0aWMgdm9pZCBhdWRpdF9yZW1vdmVfcGFyZW50X3dhdGNoZXMoc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50KQoreworCXN0cnVjdCBhdWRpdF93YXRjaCAqdywgKm5leHR3OworCXN0cnVjdCBhdWRpdF9rcnVsZSAqciwgKm5leHRyOwogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKIAotCS8qIERvIG5vdCB1c2UgdGhlIF9yY3UgaXRlcmF0b3IgaGVyZSwgc2luY2UgdGhpcyBpcyB0aGUgb25seQotCSAqIGFkZGl0aW9uIHJvdXRpbmUuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBsaXN0LCBsaXN0KSB7Ci0JCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKCZlbnRyeS0+cnVsZSwgJmUtPnJ1bGUpKQotCQkJcmV0dXJuIC1FRVhJU1Q7CisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlwYXJlbnQtPmZsYWdzIHw9IEFVRElUX1BBUkVOVF9JTlZBTElEOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3LCBuZXh0dywgJnBhcmVudC0+d2F0Y2hlcywgd2xpc3QpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHIsIG5leHRyLCAmdy0+cnVsZXMsIHJsaXN0KSB7CisJCQllID0gY29udGFpbmVyX29mKHIsIHN0cnVjdCBhdWRpdF9lbnRyeSwgcnVsZSk7CisJCQlsaXN0X2RlbCgmci0+cmxpc3QpOworCQkJbGlzdF9kZWxfcmN1KCZlLT5saXN0KTsKKwkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZV9yY3UpOworCisJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCQkgImF1ZGl0IGltcGxpY2l0bHkgcmVtb3ZlZCBydWxlIGZyb20gbGlzdD0lZFxuIiwKKwkJCQkgIEFVRElUX0ZJTFRFUl9FWElUKTsKKwkJfQorCQlhdWRpdF9yZW1vdmVfd2F0Y2godyk7CisJfQorCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKK30KKworLyogVW5yZWdpc3RlciBpbm90aWZ5IHdhdGNoZXMgZm9yIHBhcmVudHMgb24gaW5fbGlzdC4KKyAqIEdlbmVyYXRlcyBhbiBJTl9JR05PUkVEIGV2ZW50LiAqLworc3RhdGljIHZvaWQgYXVkaXRfaW5vdGlmeV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2hlYWQgKmluX2xpc3QpCit7CisJc3RydWN0IGF1ZGl0X3BhcmVudCAqcCwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgaW5fbGlzdCwgaWxpc3QpIHsKKwkJbGlzdF9kZWwoJnAtPmlsaXN0KTsKKwkJaW5vdGlmeV9ybV93YXRjaChhdWRpdF9paCwgJnAtPndkYXRhKTsKKwkJLyogdGhlIHB1dCBtYXRjaGluZyB0aGUgZ2V0IGluIGF1ZGl0X2RvX2RlbF9ydWxlKCkgKi8KKwkJcHV0X2lub3RpZnlfd2F0Y2goJnAtPndkYXRhKTsKKwl9Cit9CisKKy8qIEZpbmQgYW4gZXhpc3RpbmcgYXVkaXQgcnVsZS4KKyAqIENhbGxlciBtdXN0IGhvbGQgYXVkaXRfZmlsdGVyX211dGV4IHRvIHByZXZlbnQgc3RhbGUgcnVsZSBkYXRhLiAqLworc3RhdGljIHN0cnVjdCBhdWRpdF9lbnRyeSAqYXVkaXRfZmluZF9ydWxlKHN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnksCisJCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGF1ZGl0X2VudHJ5ICplLCAqZm91bmQgPSBOVUxMOworCWludCBoOworCisJaWYgKGVudHJ5LT5ydWxlLndhdGNoKSB7CisJCS8qIHdlIGRvbid0IGtub3cgdGhlIGlub2RlIG51bWJlciwgc28gbXVzdCB3YWxrIGVudGlyZSBoYXNoICovCisJCWZvciAoaCA9IDA7IGggPCBBVURJVF9JTk9ERV9CVUNLRVRTOyBoKyspIHsKKwkJCWxpc3QgPSAmYXVkaXRfaW5vZGVfaGFzaFtoXTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbGlzdCwgbGlzdCkKKwkJCQlpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZSgmZW50cnktPnJ1bGUsICZlLT5ydWxlKSkgeworCQkJCQlmb3VuZCA9IGU7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJfQorCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZW50cnktPnJ1bGUuZmxhZ3MgJiBBVURJVF9GSUxURVJfUFJFUEVORCkgewotCQlsaXN0X2FkZF9yY3UoJmVudHJ5LT5saXN0LCBsaXN0KTsKLQl9IGVsc2UgewotCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbGlzdCwgbGlzdCkKKwkJaWYgKCFhdWRpdF9jb21wYXJlX3J1bGUoJmVudHJ5LT5ydWxlLCAmZS0+cnVsZSkpIHsKKwkJCWZvdW5kID0gZTsKKwkJCWdvdG8gb3V0OworCQl9CisKK291dDoKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qIEdldCBwYXRoIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgYWRkaW5nIHdhdGNoZXMuICovCitzdGF0aWMgaW50IGF1ZGl0X2dldF9uZChjaGFyICpwYXRoLCBzdHJ1Y3QgbmFtZWlkYXRhICoqbmRwLAorCQkJc3RydWN0IG5hbWVpZGF0YSAqKm5kdykKK3sKKwlzdHJ1Y3QgbmFtZWlkYXRhICpuZHBhcmVudCwgKm5kd2F0Y2g7CisJaW50IGVycjsKKworCW5kcGFyZW50ID0ga21hbGxvYyhzaXplb2YoKm5kcGFyZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFuZHBhcmVudCkpCisJCXJldHVybiAtRU5PTUVNOworCisJbmR3YXRjaCA9IGttYWxsb2Moc2l6ZW9mKCpuZHdhdGNoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFuZHdhdGNoKSkgeworCQlrZnJlZShuZHBhcmVudCk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCWVyciA9IHBhdGhfbG9va3VwKHBhdGgsIExPT0tVUF9QQVJFTlQsIG5kcGFyZW50KTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKG5kcGFyZW50KTsKKwkJa2ZyZWUobmR3YXRjaCk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gcGF0aF9sb29rdXAocGF0aCwgMCwgbmR3YXRjaCk7CisJaWYgKGVycikgeworCQlrZnJlZShuZHdhdGNoKTsKKwkJbmR3YXRjaCA9IE5VTEw7CisJfQorCisJKm5kcCA9IG5kcGFyZW50OworCSpuZHcgPSBuZHdhdGNoOworCiAJcmV0dXJuIDA7CiB9CiAKLS8qIFJlbW92ZSBhbiBleGlzdGluZyBydWxlIGZyb20gZmlsdGVybGlzdC4gIFByb3RlY3RlZCBieQotICogYXVkaXRfbmV0bGlua19tdXRleC4gKi8KKy8qIFJlbGVhc2UgcmVzb3VyY2VzIHVzZWQgZm9yIHdhdGNoIHBhdGggaW5mb3JtYXRpb24uICovCitzdGF0aWMgdm9pZCBhdWRpdF9wdXRfbmQoc3RydWN0IG5hbWVpZGF0YSAqbmRwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZHcpCit7CisJaWYgKG5kcCkgeworCQlwYXRoX3JlbGVhc2UobmRwKTsKKwkJa2ZyZWUobmRwKTsKKwl9CisJaWYgKG5kdykgeworCQlwYXRoX3JlbGVhc2UobmR3KTsKKwkJa2ZyZWUobmR3KTsKKwl9Cit9CisKKy8qIEFzc29jaWF0ZSB0aGUgZ2l2ZW4gcnVsZSB3aXRoIGFuIGV4aXN0aW5nIHBhcmVudCBpbm90aWZ5X3dhdGNoLgorICogQ2FsbGVyIG11c3QgaG9sZCBhdWRpdF9maWx0ZXJfbXV0ZXguICovCitzdGF0aWMgdm9pZCBhdWRpdF9hZGRfdG9fcGFyZW50KHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUsCisJCQkJc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50KQoreworCXN0cnVjdCBhdWRpdF93YXRjaCAqdywgKndhdGNoID0ga3J1bGUtPndhdGNoOworCWludCB3YXRjaF9mb3VuZCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwYXJlbnQtPndhdGNoZXMsIHdsaXN0KSB7CisJCWlmIChzdHJjbXAod2F0Y2gtPnBhdGgsIHctPnBhdGgpKQorCQkJY29udGludWU7CisKKwkJd2F0Y2hfZm91bmQgPSAxOworCisJCS8qIHB1dCBrcnVsZSdzIGFuZCBpbml0aWFsIHJlZnMgdG8gdGVtcG9yYXJ5IHdhdGNoICovCisJCWF1ZGl0X3B1dF93YXRjaCh3YXRjaCk7CisJCWF1ZGl0X3B1dF93YXRjaCh3YXRjaCk7CisKKwkJYXVkaXRfZ2V0X3dhdGNoKHcpOworCQlrcnVsZS0+d2F0Y2ggPSB3YXRjaCA9IHc7CisJCWJyZWFrOworCX0KKworCWlmICghd2F0Y2hfZm91bmQpIHsKKwkJZ2V0X2lub3RpZnlfd2F0Y2goJnBhcmVudC0+d2RhdGEpOworCQl3YXRjaC0+cGFyZW50ID0gcGFyZW50OworCisJCWxpc3RfYWRkKCZ3YXRjaC0+d2xpc3QsICZwYXJlbnQtPndhdGNoZXMpOworCX0KKwlsaXN0X2FkZCgma3J1bGUtPnJsaXN0LCAmd2F0Y2gtPnJ1bGVzKTsKK30KKworLyogRmluZCBhIG1hdGNoaW5nIHdhdGNoIGVudHJ5LCBvciBhZGQgdGhpcyBvbmUuCisgKiBDYWxsZXIgbXVzdCBob2xkIGF1ZGl0X2ZpbHRlcl9tdXRleC4gKi8KK3N0YXRpYyBpbnQgYXVkaXRfYWRkX3dhdGNoKHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUsIHN0cnVjdCBuYW1laWRhdGEgKm5kcCwKKwkJCSAgIHN0cnVjdCBuYW1laWRhdGEgKm5kdykKK3sKKwlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoID0ga3J1bGUtPndhdGNoOworCXN0cnVjdCBpbm90aWZ5X3dhdGNoICppX3dhdGNoOworCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIHVwZGF0ZSB3YXRjaCBmaWx0ZXIgZmllbGRzICovCisJaWYgKG5kdykgeworCQl3YXRjaC0+ZGV2ID0gbmR3LT5kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfZGV2OworCQl3YXRjaC0+aW5vID0gbmR3LT5kZW50cnktPmRfaW5vZGUtPmlfaW5vOworCX0KKworCS8qIFRoZSBhdWRpdF9maWx0ZXJfbXV0ZXggbXVzdCBub3QgYmUgaGVsZCBkdXJpbmcgaW5vdGlmeSBjYWxscyBiZWNhdXNlCisJICogd2UgaG9sZCBpdCBkdXJpbmcgaW5vdGlmeSBldmVudCBjYWxsYmFjayBwcm9jZXNzaW5nLiAgSWYgYW4gZXhpc3RpbmcKKwkgKiBpbm90aWZ5IHdhdGNoIGlzIGZvdW5kLCBpbm90aWZ5X2ZpbmRfd2F0Y2goKSBncmFicyBhIHJlZmVyZW5jZSBiZWZvcmUKKwkgKiByZXR1cm5pbmcuCisJICovCisJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCisJaWYgKGlub3RpZnlfZmluZF93YXRjaChhdWRpdF9paCwgbmRwLT5kZW50cnktPmRfaW5vZGUsICZpX3dhdGNoKSA8IDApIHsKKwkJcGFyZW50ID0gYXVkaXRfaW5pdF9wYXJlbnQobmRwKTsKKwkJaWYgKElTX0VSUihwYXJlbnQpKSB7CisJCQkvKiBjYWxsZXIgZXhwZWN0cyBtdXRleCBsb2NrZWQgKi8KKwkJCW11dGV4X2xvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisJCQlyZXR1cm4gUFRSX0VSUihwYXJlbnQpOworCQl9CisJfSBlbHNlCisJCXBhcmVudCA9IGNvbnRhaW5lcl9vZihpX3dhdGNoLCBzdHJ1Y3QgYXVkaXRfcGFyZW50LCB3ZGF0YSk7CisKKwltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCisJLyogcGFyZW50IHdhcyBtb3ZlZCBiZWZvcmUgd2UgdG9vayBhdWRpdF9maWx0ZXJfbXV0ZXggKi8KKwlpZiAocGFyZW50LT5mbGFncyAmIEFVRElUX1BBUkVOVF9JTlZBTElEKQorCQlyZXQgPSAtRU5PRU5UOworCWVsc2UKKwkJYXVkaXRfYWRkX3RvX3BhcmVudChrcnVsZSwgcGFyZW50KTsKKworCS8qIG1hdGNoIGdldCBpbiBhdWRpdF9pbml0X3BhcmVudCBvciBpbm90aWZ5X2ZpbmRfd2F0Y2ggKi8KKwlwdXRfaW5vdGlmeV93YXRjaCgmcGFyZW50LT53ZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworLyogQWRkIHJ1bGUgdG8gZ2l2ZW4gZmlsdGVybGlzdCBpZiBub3QgYSBkdXBsaWNhdGUuICovCitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9hZGRfcnVsZShzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5LAorCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKKwlzdHJ1Y3QgYXVkaXRfZmllbGQgKmlub2RlX2YgPSBlbnRyeS0+cnVsZS5pbm9kZV9mOworCXN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2ggPSBlbnRyeS0+cnVsZS53YXRjaDsKKwlzdHJ1Y3QgbmFtZWlkYXRhICpuZHAsICpuZHc7CisJaW50IGgsIGVyciwgcHV0bmRfbmVlZGVkID0gMDsKKworCWlmIChpbm9kZV9mKSB7CisJCWggPSBhdWRpdF9oYXNoX2lubyhpbm9kZV9mLT52YWwpOworCQlsaXN0ID0gJmF1ZGl0X2lub2RlX2hhc2hbaF07CisJfQorCisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwllID0gYXVkaXRfZmluZF9ydWxlKGVudHJ5LCBsaXN0KTsKKwltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisJaWYgKGUpIHsKKwkJZXJyID0gLUVFWElTVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBBdm9pZCBjYWxsaW5nIHBhdGhfbG9va3VwIHVuZGVyIGF1ZGl0X2ZpbHRlcl9tdXRleC4gKi8KKwlpZiAod2F0Y2gpIHsKKwkJZXJyID0gYXVkaXRfZ2V0X25kKHdhdGNoLT5wYXRoLCAmbmRwLCAmbmR3KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyb3I7CisJCXB1dG5kX25lZWRlZCA9IDE7CisJfQorCisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlpZiAod2F0Y2gpIHsKKwkJLyogYXVkaXRfZmlsdGVyX211dGV4IGlzIGRyb3BwZWQgYW5kIHJlLXRha2VuIGR1cmluZyB0aGlzIGNhbGwgKi8KKwkJZXJyID0gYXVkaXRfYWRkX3dhdGNoKCZlbnRyeS0+cnVsZSwgbmRwLCBuZHcpOworCQlpZiAoZXJyKSB7CisJCQltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJCWggPSBhdWRpdF9oYXNoX2lubygodTMyKXdhdGNoLT5pbm8pOworCQlsaXN0ID0gJmF1ZGl0X2lub2RlX2hhc2hbaF07CisJfQorCisJaWYgKGVudHJ5LT5ydWxlLmZsYWdzICYgQVVESVRfRklMVEVSX1BSRVBFTkQpIHsKKwkJbGlzdF9hZGRfcmN1KCZlbnRyeS0+bGlzdCwgbGlzdCk7CisJCWVudHJ5LT5ydWxlLmZsYWdzICY9IH5BVURJVF9GSUxURVJfUFJFUEVORDsKKwl9IGVsc2UgeworCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsIGxpc3QpOworCX0KKwltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisKKwlpZiAocHV0bmRfbmVlZGVkKQorCQlhdWRpdF9wdXRfbmQobmRwLCBuZHcpOworCisgCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAocHV0bmRfbmVlZGVkKQorCQlhdWRpdF9wdXRfbmQobmRwLCBuZHcpOworCWlmICh3YXRjaCkKKwkJYXVkaXRfcHV0X3dhdGNoKHdhdGNoKTsgLyogdG1wIHdhdGNoLCBtYXRjaGVzIGluaXRpYWwgZ2V0ICovCisJcmV0dXJuIGVycjsKK30KKworLyogUmVtb3ZlIGFuIGV4aXN0aW5nIHJ1bGUgZnJvbSBmaWx0ZXJsaXN0LiAqLwogc3RhdGljIGlubGluZSBpbnQgYXVkaXRfZGVsX3J1bGUoc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeSwKIAkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgICplOworCXN0cnVjdCBhdWRpdF9maWVsZCAqaW5vZGVfZiA9IGVudHJ5LT5ydWxlLmlub2RlX2Y7CisJc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCwgKnRtcF93YXRjaCA9IGVudHJ5LT5ydWxlLndhdGNoOworCUxJU1RfSEVBRChpbm90aWZ5X2xpc3QpOworCWludCBoLCByZXQgPSAwOwogCi0JLyogRG8gbm90IHVzZSB0aGUgX3JjdSBpdGVyYXRvciBoZXJlLCBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5Ci0JICogZGVsZXRpb24gcm91dGluZS4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIGxpc3QsIGxpc3QpIHsKLQkJaWYgKCFhdWRpdF9jb21wYXJlX3J1bGUoJmVudHJ5LT5ydWxlLCAmZS0+cnVsZSkpIHsKLQkJCWxpc3RfZGVsX3JjdSgmZS0+bGlzdCk7Ci0JCQljYWxsX3JjdSgmZS0+cmN1LCBhdWRpdF9mcmVlX3J1bGVfcmN1KTsKLQkJCXJldHVybiAwOworCWlmIChpbm9kZV9mKSB7CisJCWggPSBhdWRpdF9oYXNoX2lubyhpbm9kZV9mLT52YWwpOworCQlsaXN0ID0gJmF1ZGl0X2lub2RlX2hhc2hbaF07CisJfQorCisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwllID0gYXVkaXRfZmluZF9ydWxlKGVudHJ5LCBsaXN0KTsKKwlpZiAoIWUpIHsKKwkJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwl3YXRjaCA9IGUtPnJ1bGUud2F0Y2g7CisJaWYgKHdhdGNoKSB7CisJCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudCA9IHdhdGNoLT5wYXJlbnQ7CisKKwkJbGlzdF9kZWwoJmUtPnJ1bGUucmxpc3QpOworCisJCWlmIChsaXN0X2VtcHR5KCZ3YXRjaC0+cnVsZXMpKSB7CisJCQlhdWRpdF9yZW1vdmVfd2F0Y2god2F0Y2gpOworCisJCQlpZiAobGlzdF9lbXB0eSgmcGFyZW50LT53YXRjaGVzKSkgeworCQkJCS8qIFB1dCBwYXJlbnQgb24gdGhlIGlub3RpZnkgdW4tcmVnaXN0cmF0aW9uCisJCQkJICogbGlzdC4gIEdyYWIgYSByZWZlcmVuY2UgYmVmb3JlIHJlbGVhc2luZworCQkJCSAqIGF1ZGl0X2ZpbHRlcl9tdXRleCwgdG8gYmUgcmVsZWFzZWQgaW4KKwkJCQkgKiBhdWRpdF9pbm90aWZ5X3VucmVnaXN0ZXIoKS4gKi8KKwkJCQlsaXN0X2FkZCgmcGFyZW50LT5pbGlzdCwgJmlub3RpZnlfbGlzdCk7CisJCQkJZ2V0X2lub3RpZnlfd2F0Y2goJnBhcmVudC0+d2RhdGEpOworCQkJfQogCQl9CiAJfQotCXJldHVybiAtRU5PRU5UOwkJLyogTm8gbWF0Y2hpbmcgcnVsZSAqLworCisJbGlzdF9kZWxfcmN1KCZlLT5saXN0KTsKKwljYWxsX3JjdSgmZS0+cmN1LCBhdWRpdF9mcmVlX3J1bGVfcmN1KTsKKworCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKworCWlmICghbGlzdF9lbXB0eSgmaW5vdGlmeV9saXN0KSkKKwkJYXVkaXRfaW5vdGlmeV91bnJlZ2lzdGVyKCZpbm90aWZ5X2xpc3QpOworCitvdXQ6CisJaWYgKHRtcF93YXRjaCkKKwkJYXVkaXRfcHV0X3dhdGNoKHRtcF93YXRjaCk7IC8qIG1hdGNoIGluaXRpYWwgZ2V0ICovCisKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBMaXN0IHJ1bGVzIHVzaW5nIHN0cnVjdCBhdWRpdF9ydWxlLiAgRXhpc3RzIGZvciBiYWNrd2FyZAogICogY29tcGF0aWJpbGl0eSB3aXRoIHVzZXJzcGFjZS4gKi8KLXN0YXRpYyBpbnQgYXVkaXRfbGlzdCh2b2lkICpfZGVzdCkKK3N0YXRpYyB2b2lkIGF1ZGl0X2xpc3QoaW50IHBpZCwgaW50IHNlcSwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcSkKIHsKLQlpbnQgcGlkLCBzZXE7Ci0JaW50ICpkZXN0ID0gX2Rlc3Q7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OwogCWludCBpOwogCi0JcGlkID0gZGVzdFswXTsKLQlzZXEgPSBkZXN0WzFdOwotCWtmcmVlKGRlc3QpOwotCi0JbXV0ZXhfbG9jaygmYXVkaXRfbmV0bGlua19tdXRleCk7Ci0KLQkvKiBUaGUgKl9yY3UgaXRlcmF0b3JzIG5vdCBuZWVkZWQgaGVyZSBiZWNhdXNlIHdlIGFyZQotCSAgIGFsd2F5cyBjYWxsZWQgd2l0aCBhdWRpdF9uZXRsaW5rX211dGV4IGhlbGQuICovCisJLyogVGhpcyBpcyBhIGJsb2NraW5nIHJlYWQsIHNvIHVzZSBhdWRpdF9maWx0ZXJfbXV0ZXggaW5zdGVhZCBvZiByY3UKKwkgKiBpdGVyYXRvciB0byBzeW5jIHdpdGggbGlzdCB3cml0ZXJzLiAqLwogCWZvciAoaT0wOyBpPEFVRElUX05SX0ZJTFRFUlM7IGkrKykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYXVkaXRfZmlsdGVyX2xpc3RbaV0sIGxpc3QpIHsKIAkJCXN0cnVjdCBhdWRpdF9ydWxlICpydWxlOwpAQCAtNTMyLDMzICsxMTc3LDQxIEBACiAJCQlydWxlID0gYXVkaXRfa3J1bGVfdG9fcnVsZSgmZW50cnktPnJ1bGUpOwogCQkJaWYgKHVubGlrZWx5KCFydWxlKSkKIAkJCQlicmVhazsKLQkJCWF1ZGl0X3NlbmRfcmVwbHkocGlkLCBzZXEsIEFVRElUX0xJU1QsIDAsIDEsCisJCQlza2IgPSBhdWRpdF9tYWtlX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNULCAwLCAxLAogCQkJCQkgcnVsZSwgc2l6ZW9mKCpydWxlKSk7CisJCQlpZiAoc2tiKQorCQkJCXNrYl9xdWV1ZV90YWlsKHEsIHNrYik7CiAJCQlrZnJlZShydWxlKTsKIAkJfQogCX0KLQlhdWRpdF9zZW5kX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNULCAxLCAxLCBOVUxMLCAwKTsKLQkKLQltdXRleF91bmxvY2soJmF1ZGl0X25ldGxpbmtfbXV0ZXgpOwotCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBBVURJVF9JTk9ERV9CVUNLRVRTOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmF1ZGl0X2lub2RlX2hhc2hbaV0sIGxpc3QpIHsKKwkJCXN0cnVjdCBhdWRpdF9ydWxlICpydWxlOworCisJCQlydWxlID0gYXVkaXRfa3J1bGVfdG9fcnVsZSgmZW50cnktPnJ1bGUpOworCQkJaWYgKHVubGlrZWx5KCFydWxlKSkKKwkJCQlicmVhazsKKwkJCXNrYiA9IGF1ZGl0X21ha2VfcmVwbHkocGlkLCBzZXEsIEFVRElUX0xJU1QsIDAsIDEsCisJCQkJCSBydWxlLCBzaXplb2YoKnJ1bGUpKTsKKwkJCWlmIChza2IpCisJCQkJc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTsKKwkJCWtmcmVlKHJ1bGUpOworCQl9CisJfQorCXNrYiA9IGF1ZGl0X21ha2VfcmVwbHkocGlkLCBzZXEsIEFVRElUX0xJU1QsIDEsIDEsIE5VTEwsIDApOworCWlmIChza2IpCisJCXNrYl9xdWV1ZV90YWlsKHEsIHNrYik7CiB9CiAKIC8qIExpc3QgcnVsZXMgdXNpbmcgc3RydWN0IGF1ZGl0X3J1bGVfZGF0YS4gKi8KLXN0YXRpYyBpbnQgYXVkaXRfbGlzdF9ydWxlcyh2b2lkICpfZGVzdCkKK3N0YXRpYyB2b2lkIGF1ZGl0X2xpc3RfcnVsZXMoaW50IHBpZCwgaW50IHNlcSwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcSkKIHsKLQlpbnQgcGlkLCBzZXE7Ci0JaW50ICpkZXN0ID0gX2Rlc3Q7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmU7CiAJaW50IGk7CiAKLQlwaWQgPSBkZXN0WzBdOwotCXNlcSA9IGRlc3RbMV07Ci0Ja2ZyZWUoZGVzdCk7Ci0KLQltdXRleF9sb2NrKCZhdWRpdF9uZXRsaW5rX211dGV4KTsKLQotCS8qIFRoZSAqX3JjdSBpdGVyYXRvcnMgbm90IG5lZWRlZCBoZXJlIGJlY2F1c2Ugd2UgYXJlCi0JICAgYWx3YXlzIGNhbGxlZCB3aXRoIGF1ZGl0X25ldGxpbmtfbXV0ZXggaGVsZC4gKi8KKwkvKiBUaGlzIGlzIGEgYmxvY2tpbmcgcmVhZCwgc28gdXNlIGF1ZGl0X2ZpbHRlcl9tdXRleCBpbnN0ZWFkIG9mIHJjdQorCSAqIGl0ZXJhdG9yIHRvIHN5bmMgd2l0aCBsaXN0IHdyaXRlcnMuICovCiAJZm9yIChpPTA7IGk8QVVESVRfTlJfRklMVEVSUzsgaSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmF1ZGl0X2ZpbHRlcl9saXN0W2ldLCBsaXN0KSB7CiAJCQlzdHJ1Y3QgYXVkaXRfcnVsZV9kYXRhICpkYXRhOwpAQCAtNTY2LDE1ICsxMjE5LDMwIEBACiAJCQlkYXRhID0gYXVkaXRfa3J1bGVfdG9fZGF0YSgmZS0+cnVsZSk7CiAJCQlpZiAodW5saWtlbHkoIWRhdGEpKQogCQkJCWJyZWFrOwotCQkJYXVkaXRfc2VuZF9yZXBseShwaWQsIHNlcSwgQVVESVRfTElTVF9SVUxFUywgMCwgMSwKLQkJCQkJIGRhdGEsIHNpemVvZigqZGF0YSkpOworCQkJc2tiID0gYXVkaXRfbWFrZV9yZXBseShwaWQsIHNlcSwgQVVESVRfTElTVF9SVUxFUywgMCwgMSwKKwkJCQkJIGRhdGEsIHNpemVvZigqZGF0YSkgKyBkYXRhLT5idWZsZW4pOworCQkJaWYgKHNrYikKKwkJCQlza2JfcXVldWVfdGFpbChxLCBza2IpOwogCQkJa2ZyZWUoZGF0YSk7CiAJCX0KIAl9Ci0JYXVkaXRfc2VuZF9yZXBseShwaWQsIHNlcSwgQVVESVRfTElTVF9SVUxFUywgMSwgMSwgTlVMTCwgMCk7CisJZm9yIChpPTA7IGk8IEFVRElUX0lOT0RFX0JVQ0tFVFM7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZhdWRpdF9pbm9kZV9oYXNoW2ldLCBsaXN0KSB7CisJCQlzdHJ1Y3QgYXVkaXRfcnVsZV9kYXRhICpkYXRhOwogCi0JbXV0ZXhfdW5sb2NrKCZhdWRpdF9uZXRsaW5rX211dGV4KTsKLQlyZXR1cm4gMDsKKwkJCWRhdGEgPSBhdWRpdF9rcnVsZV90b19kYXRhKCZlLT5ydWxlKTsKKwkJCWlmICh1bmxpa2VseSghZGF0YSkpCisJCQkJYnJlYWs7CisJCQlza2IgPSBhdWRpdF9tYWtlX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNUX1JVTEVTLCAwLCAxLAorCQkJCQkgZGF0YSwgc2l6ZW9mKCpkYXRhKSArIGRhdGEtPmJ1Zmxlbik7CisJCQlpZiAoc2tiKQorCQkJCXNrYl9xdWV1ZV90YWlsKHEsIHNrYik7CisJCQlrZnJlZShkYXRhKTsKKwkJfQorCX0KKwlza2IgPSBhdWRpdF9tYWtlX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNUX1JVTEVTLCAxLCAxLCBOVUxMLCAwKTsKKwlpZiAoc2tiKQorCQlza2JfcXVldWVfdGFpbChxLCBza2IpOwogfQogCiAvKioKQEAgLTU5Miw3ICsxMjYwLDcgQEAKIAkJCSBzaXplX3QgZGF0YXN6LCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlpbnQgKmRlc3Q7CisJc3RydWN0IGF1ZGl0X25ldGxpbmtfbGlzdCAqZGVzdDsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OwogCkBAIC02MDUsMTggKzEyNzMsMjIgQEAKIAkJICogaGFwcGVuIGlmIHdlJ3JlIGFjdHVhbGx5IHJ1bm5pbmcgaW4gdGhlIGNvbnRleHQgb2YgYXVkaXRjdGwKIAkJICogdHJ5aW5nIHRvIF9zZW5kXyB0aGUgc3R1ZmYgKi8KIAkJIAotCQlkZXN0ID0ga21hbGxvYygyICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCQlkZXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF1ZGl0X25ldGxpbmtfbGlzdCksIEdGUF9LRVJORUwpOwogCQlpZiAoIWRlc3QpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJZGVzdFswXSA9IHBpZDsKLQkJZGVzdFsxXSA9IHNlcTsKKwkJZGVzdC0+cGlkID0gcGlkOworCQlza2JfcXVldWVfaGVhZF9pbml0KCZkZXN0LT5xKTsKIAorCQltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCQlpZiAodHlwZSA9PSBBVURJVF9MSVNUKQotCQkJdHNrID0ga3RocmVhZF9ydW4oYXVkaXRfbGlzdCwgZGVzdCwgImF1ZGl0X2xpc3QiKTsKKwkJCWF1ZGl0X2xpc3QocGlkLCBzZXEsICZkZXN0LT5xKTsKIAkJZWxzZQotCQkJdHNrID0ga3RocmVhZF9ydW4oYXVkaXRfbGlzdF9ydWxlcywgZGVzdCwKLQkJCQkJICAiYXVkaXRfbGlzdF9ydWxlcyIpOworCQkJYXVkaXRfbGlzdF9ydWxlcyhwaWQsIHNlcSwgJmRlc3QtPnEpOworCQltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisKKwkJdHNrID0ga3RocmVhZF9ydW4oYXVkaXRfc2VuZF9saXN0LCBkZXN0LCAiYXVkaXRfc2VuZF9saXN0Iik7CiAJCWlmIChJU19FUlIodHNrKSkgeworCQkJc2tiX3F1ZXVlX3B1cmdlKCZkZXN0LT5xKTsKIAkJCWtmcmVlKGRlc3QpOwogCQkJZXJyID0gUFRSX0VSUih0c2spOwogCQl9CkBAIC02MzIsNiArMTMwNCw3IEBACiAKIAkJZXJyID0gYXVkaXRfYWRkX3J1bGUoZW50cnksCiAJCQkJICAgICAmYXVkaXRfZmlsdGVyX2xpc3RbZW50cnktPnJ1bGUubGlzdG5yXSk7CisKIAkJaWYgKHNpZCkgewogCQkJY2hhciAqY3R4ID0gTlVMTDsKIAkJCXUzMiBsZW47CkBAIC03MTIsNyArMTM4NSw0MyBAQAogCXJldHVybiAwOwogfQogCisvKiBDb21wYXJlIGdpdmVuIGRlbnRyeSBuYW1lIHdpdGggbGFzdCBjb21wb25lbnQgaW4gZ2l2ZW4gcGF0aCwKKyAqIHJldHVybiBvZiAwIGluZGljYXRlcyBhIG1hdGNoLiAqLworaW50IGF1ZGl0X2NvbXBhcmVfZG5hbWVfcGF0aChjb25zdCBjaGFyICpkbmFtZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgaW50ICpkaXJsZW4pCit7CisJaW50IGRsZW4sIHBsZW47CisJY29uc3QgY2hhciAqcDsKIAorCWlmICghZG5hbWUgfHwgIXBhdGgpCisJCXJldHVybiAxOworCisJZGxlbiA9IHN0cmxlbihkbmFtZSk7CisJcGxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAocGxlbiA8IGRsZW4pCisJCXJldHVybiAxOworCisJLyogZGlzcmVnYXJkIHRyYWlsaW5nIHNsYXNoZXMgKi8KKwlwID0gcGF0aCArIHBsZW4gLSAxOworCXdoaWxlICgoKnAgPT0gJy8nKSAmJiAocCA+IHBhdGgpKQorCQlwLS07CisKKwkvKiBmaW5kIGxhc3QgcGF0aCBjb21wb25lbnQgKi8KKwlwID0gcCAtIGRsZW4gKyAxOworCWlmIChwIDwgcGF0aCkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAocCA+IHBhdGgpIHsKKwkJaWYgKCotLXAgIT0gJy8nKQorCQkJcmV0dXJuIDE7CisJCWVsc2UKKwkJCXArKzsKKwl9CisKKwkvKiByZXR1cm4gbGVuZ3RoIG9mIHBhdGgncyBkaXJlY3RvcnkgY29tcG9uZW50ICovCisJaWYgKGRpcmxlbikKKwkJKmRpcmxlbiA9IHAgLSBwYXRoOworCXJldHVybiBzdHJuY21wKHAsIGRuYW1lLCBkbGVuKTsKK30KIAogc3RhdGljIGludCBhdWRpdF9maWx0ZXJfdXNlcl9ydWxlcyhzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKmNiLAogCQkJCSAgIHN0cnVjdCBhdWRpdF9rcnVsZSAqcnVsZSwKQEAgLTc0NCw3ICsxNDUzLDYgQEAKIAl9CiAJc3dpdGNoIChydWxlLT5hY3Rpb24pIHsKIAljYXNlIEFVRElUX05FVkVSOiAgICAqc3RhdGUgPSBBVURJVF9ESVNBQkxFRDsJICAgIGJyZWFrOwotCWNhc2UgQVVESVRfUE9TU0lCTEU6ICpzdGF0ZSA9IEFVRElUX0JVSUxEX0NPTlRFWFQ7ICBicmVhazsKIAljYXNlIEFVRElUX0FMV0FZUzogICAqc3RhdGUgPSBBVURJVF9SRUNPUkRfQ09OVEVYVDsgYnJlYWs7CiAJfQogCXJldHVybiAxOwpAQCAtODI2LDMyICsxNTM0LDY1IEBACiBpbnQgc2VsaW51eF9hdWRpdF9ydWxlX3VwZGF0ZSh2b2lkKQogewogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnksICpuLCAqbmVudHJ5OworCXN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2g7CiAJaW50IGksIGVyciA9IDA7CiAKLQkvKiBhdWRpdF9uZXRsaW5rX211dGV4IHN5bmNocm9uaXplcyB0aGUgd3JpdGVycyAqLwotCW11dGV4X2xvY2soJmF1ZGl0X25ldGxpbmtfbXV0ZXgpOworCS8qIGF1ZGl0X2ZpbHRlcl9tdXRleCBzeW5jaHJvbml6ZXMgdGhlIHdyaXRlcnMgKi8KKwltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCiAJZm9yIChpID0gMDsgaSA8IEFVRElUX05SX0ZJTFRFUlM7IGkrKykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG4sICZhdWRpdF9maWx0ZXJfbGlzdFtpXSwgbGlzdCkgewogCQkJaWYgKCFhdWRpdF9ydWxlX2hhc19zZWxpbnV4KCZlbnRyeS0+cnVsZSkpCiAJCQkJY29udGludWU7CiAKLQkJCW5lbnRyeSA9IGF1ZGl0X2R1cGVfcnVsZSgmZW50cnktPnJ1bGUpOworCQkJd2F0Y2ggPSBlbnRyeS0+cnVsZS53YXRjaDsKKwkJCW5lbnRyeSA9IGF1ZGl0X2R1cGVfcnVsZSgmZW50cnktPnJ1bGUsIHdhdGNoKTsKIAkJCWlmICh1bmxpa2VseShJU19FUlIobmVudHJ5KSkpIHsKIAkJCQkvKiBzYXZlIHRoZSBmaXJzdCBlcnJvciBlbmNvdW50ZXJlZCBmb3IgdGhlCiAJCQkJICogcmV0dXJuIHZhbHVlICovCiAJCQkJaWYgKCFlcnIpCiAJCQkJCWVyciA9IFBUUl9FUlIobmVudHJ5KTsKIAkJCQlhdWRpdF9wYW5pYygiZXJyb3IgdXBkYXRpbmcgc2VsaW51eCBmaWx0ZXJzIik7CisJCQkJaWYgKHdhdGNoKQorCQkJCQlsaXN0X2RlbCgmZW50cnktPnJ1bGUucmxpc3QpOwogCQkJCWxpc3RfZGVsX3JjdSgmZW50cnktPmxpc3QpOwogCQkJfSBlbHNlIHsKKwkJCQlpZiAod2F0Y2gpIHsKKwkJCQkJbGlzdF9hZGQoJm5lbnRyeS0+cnVsZS5ybGlzdCwKKwkJCQkJCSAmd2F0Y2gtPnJ1bGVzKTsKKwkJCQkJbGlzdF9kZWwoJmVudHJ5LT5ydWxlLnJsaXN0KTsKKwkJCQl9CiAJCQkJbGlzdF9yZXBsYWNlX3JjdSgmZW50cnktPmxpc3QsICZuZW50cnktPmxpc3QpOwogCQkJfQogCQkJY2FsbF9yY3UoJmVudHJ5LT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZV9yY3UpOwogCQl9CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZhdWRpdF9uZXRsaW5rX211dGV4KTsKKwltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwogfQorCisvKiBVcGRhdGUgd2F0Y2ggZGF0YSBpbiBhdWRpdCBydWxlcyBiYXNlZCBvbiBpbm90aWZ5IGV2ZW50cy4gKi8KK3ZvaWQgYXVkaXRfaGFuZGxlX2lldmVudChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqaV93YXRjaCwgdTMyIHdkLCB1MzIgbWFzaywKKwkJCSB1MzIgY29va2llLCBjb25zdCBjaGFyICpkbmFtZSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwYXJlbnQ7CisKKwlwYXJlbnQgPSBjb250YWluZXJfb2YoaV93YXRjaCwgc3RydWN0IGF1ZGl0X3BhcmVudCwgd2RhdGEpOworCisJaWYgKG1hc2sgJiAoSU5fQ1JFQVRFfElOX01PVkVEX1RPKSAmJiBpbm9kZSkKKwkJYXVkaXRfdXBkYXRlX3dhdGNoKHBhcmVudCwgZG5hbWUsIGlub2RlLT5pX3NiLT5zX2RldiwKKwkJCQkgICBpbm9kZS0+aV9pbm8sIDApOworCWVsc2UgaWYgKG1hc2sgJiAoSU5fREVMRVRFfElOX01PVkVEX0ZST00pKQorCQlhdWRpdF91cGRhdGVfd2F0Y2gocGFyZW50LCBkbmFtZSwgKGRldl90KS0xLCAodW5zaWduZWQgbG9uZyktMSwgMSk7CisJLyogaW5vdGlmeSBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgdGhlIHdhdGNoIGFuZCBzZW5kcyBJTl9JR05PUkVEICovCisJZWxzZSBpZiAobWFzayAmIChJTl9ERUxFVEVfU0VMRnxJTl9VTk1PVU5UKSkKKwkJYXVkaXRfcmVtb3ZlX3BhcmVudF93YXRjaGVzKHBhcmVudCk7CisJLyogaW5vdGlmeSBkb2VzIG5vdCByZW1vdmUgdGhlIHdhdGNoLCBzbyByZW1vdmUgaXQgbWFudWFsbHkgKi8KKwllbHNlIGlmKG1hc2sgJiBJTl9NT1ZFX1NFTEYpIHsKKwkJYXVkaXRfcmVtb3ZlX3BhcmVudF93YXRjaGVzKHBhcmVudCk7CisJCWlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChhdWRpdF9paCwgaV93YXRjaCk7CisJfSBlbHNlIGlmIChtYXNrICYgSU5fSUdOT1JFRCkKKwkJcHV0X2lub3RpZnlfd2F0Y2goaV93YXRjaCk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCAxYzAzYTRlLi5iMDk3Y2NiIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDMtMjAwNCBSZWQgSGF0IEluYy4sIER1cmhhbSwgTm9ydGggQ2Fyb2xpbmEuCiAgKiBDb3B5cmlnaHQgMjAwNSBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICogQ29weXJpZ2h0IChDKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbgogICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjksNiArMjksOSBAQAogICogdGhpcyBmaWxlIC0tIHNlZSBlbnRyeS5TKSBpcyBiYXNlZCBvbiBhIEdQTCdkIHBhdGNoIHdyaXR0ZW4gYnkKICAqIG9raXJAc3VzZS5kZSBhbmQgQ29weXJpZ2h0IDIwMDMgU3VTRSBMaW51eCBBRy4KICAqCisgKiBQT1NJWCBtZXNzYWdlIHF1ZXVlIHN1cHBvcnQgYWRkZWQgYnkgR2VvcmdlIFdpbHNvbiA8bHRjZ2N3QHVzLmlibS5jb20+LAorICogMjAwNi4KKyAqCiAgKiBUaGUgc3VwcG9ydCBvZiBhZGRpdGlvbmFsIGZpbHRlciBydWxlcyBjb21wYXJlcyAoPiwgPCwgPj0sIDw9KSB3YXMKICAqIGFkZGVkIGJ5IER1c3RpbiBLaXJrbGFuZCA8ZHVzdGluLmtpcmtsYW5kQHVzLmlibS5jb20+LCAyMDA1LgogICoKQEAgLTQ5LDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L21xdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CkBAIC01OSw2ICs2Myw4IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KIAogI2luY2x1ZGUgImF1ZGl0LmgiCiAKQEAgLTc2LDYgKzgyLDkgQEAKICAqIHBhdGhfbG9va3VwLiAqLwogI2RlZmluZSBBVURJVF9OQU1FU19SRVNFUlZFRCA3CiAKKy8qIEluZGljYXRlcyB0aGF0IGF1ZGl0IHNob3VsZCBsb2cgdGhlIGZ1bGwgcGF0aG5hbWUuICovCisjZGVmaW5lIEFVRElUX05BTUVfRlVMTCAtMQorCiAvKiBXaGVuIGZzL25hbWVpLmM6Z2V0bmFtZSgpIGlzIGNhbGxlZCwgd2Ugc3RvcmUgdGhlIHBvaW50ZXIgaW4gbmFtZSBhbmQKICAqIHdlIGRvbid0IGxldCBwdXRuYW1lKCkgZnJlZSBpdCAoaW5zdGVhZCB3ZSBmcmVlIGFsbCBvZiB0aGUgc2F2ZWQKICAqIHBvaW50ZXJzIGF0IHN5c2NhbGwgZXhpdCB0aW1lKS4KQEAgLTgzLDggKzkyLDkgQEAKICAqIEZ1cnRoZXIsIGluIGZzL25hbWVpLmM6cGF0aF9sb29rdXAoKSB3ZSBzdG9yZSB0aGUgaW5vZGUgYW5kIGRldmljZS4gKi8KIHN0cnVjdCBhdWRpdF9uYW1lcyB7CiAJY29uc3QgY2hhcgkqbmFtZTsKKwlpbnQJCW5hbWVfbGVuOwkvKiBudW1iZXIgb2YgbmFtZSdzIGNoYXJhY3RlcnMgdG8gbG9nICovCisJdW5zaWduZWQJbmFtZV9wdXQ7CS8qIGNhbGwgX19wdXRuYW1lKCkgZm9yIHRoaXMgbmFtZSAqLwogCXVuc2lnbmVkIGxvbmcJaW5vOwotCXVuc2lnbmVkIGxvbmcJcGlubzsKIAlkZXZfdAkJZGV2OwogCXVtb2RlX3QJCW1vZGU7CiAJdWlkX3QJCXVpZDsKQEAgLTEwMCw2ICsxMTAsMzMgQEAKIAogI2RlZmluZSBBVURJVF9BVVhfSVBDUEVSTQkwCiAKK3N0cnVjdCBhdWRpdF9hdXhfZGF0YV9tcV9vcGVuIHsKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKKwlpbnQJCQlvZmxhZzsKKwltb2RlX3QJCQltb2RlOworCXN0cnVjdCBtcV9hdHRyCQlhdHRyOworfTsKKworc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX3NlbmRyZWN2IHsKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKKwltcWRfdAkJCW1xZGVzOworCXNpemVfdAkJCW1zZ19sZW47CisJdW5zaWduZWQgaW50CQltc2dfcHJpbzsKKwlzdHJ1Y3QgdGltZXNwZWMJCWFic190aW1lb3V0OworfTsKKworc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX25vdGlmeSB7CisJc3RydWN0IGF1ZGl0X2F1eF9kYXRhCWQ7CisJbXFkX3QJCQltcWRlczsKKwlzdHJ1Y3Qgc2lnZXZlbnQgCW5vdGlmaWNhdGlvbjsKK307CisKK3N0cnVjdCBhdWRpdF9hdXhfZGF0YV9tcV9nZXRzZXRhdHRyIHsKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKKwltcWRfdAkJCW1xZGVzOworCXN0cnVjdCBtcV9hdHRyIAkJbXFzdGF0OworfTsKKwogc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCB7CiAJc3RydWN0IGF1ZGl0X2F1eF9kYXRhCWQ7CiAJc3RydWN0IGlwY19wZXJtCQlwOwpAQCAtMTEwLDYgKzE0NywxMyBAQAogCXUzMgkJCW9zaWQ7CiB9OwogCitzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfZXhlY3ZlIHsKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKKwlpbnQgYXJnYzsKKwlpbnQgZW52YzsKKwljaGFyIG1lbVswXTsKK307CisKIHN0cnVjdCBhdWRpdF9hdXhfZGF0YV9zb2NrZXRjYWxsIHsKIAlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKIAlpbnQJCQluYXJnczsKQEAgLTE0OCw3ICsxOTIsNyBAQAogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YSAqYXV4OwogCiAJCQkJLyogU2F2ZSB0aGluZ3MgdG8gcHJpbnQgYWJvdXQgdGFza19zdHJ1Y3QgKi8KLQlwaWRfdAkJICAgIHBpZDsKKwlwaWRfdAkJICAgIHBpZCwgcHBpZDsKIAl1aWRfdAkJICAgIHVpZCwgZXVpZCwgc3VpZCwgZnN1aWQ7CiAJZ2lkX3QJCSAgICBnaWQsIGVnaWQsIHNnaWQsIGZzZ2lkOwogCXVuc2lnbmVkIGxvbmcJICAgIHBlcnNvbmFsaXR5OwpAQCAtMTYwLDEyICsyMDQsMTMgQEAKICNlbmRpZgogfTsKIAotCisvKiBEZXRlcm1pbmUgaWYgYW55IGNvbnRleHQgbmFtZSBkYXRhIG1hdGNoZXMgYSBydWxlJ3Mgd2F0Y2ggZGF0YSAqLwogLyogQ29tcGFyZSBhIHRhc2tfc3RydWN0IHdpdGggYW4gYXVkaXRfcnVsZS4gIFJldHVybiAxIG9uIG1hdGNoLCAwCiAgKiBvdGhlcndpc2UuICovCiBzdGF0aWMgaW50IGF1ZGl0X2ZpbHRlcl9ydWxlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCSAgICAgIHN0cnVjdCBhdWRpdF9rcnVsZSAqcnVsZSwKIAkJCSAgICAgIHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsCisJCQkgICAgICBzdHJ1Y3QgYXVkaXRfbmFtZXMgKm5hbWUsCiAJCQkgICAgICBlbnVtIGF1ZGl0X3N0YXRlICpzdGF0ZSkKIHsKIAlpbnQgaSwgaiwgbmVlZF9zaWQgPSAxOwpAQCAtMTc5LDYgKzIyNCwxMCBAQAogCQljYXNlIEFVRElUX1BJRDoKIAkJCXJlc3VsdCA9IGF1ZGl0X2NvbXBhcmF0b3IodHNrLT5waWQsIGYtPm9wLCBmLT52YWwpOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfUFBJRDoKKwkJCWlmIChjdHgpCisJCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcihjdHgtPnBwaWQsIGYtPm9wLCBmLT52YWwpOworCQkJYnJlYWs7CiAJCWNhc2UgQVVESVRfVUlEOgogCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcih0c2stPnVpZCwgZi0+b3AsIGYtPnZhbCk7CiAJCQlicmVhazsKQEAgLTIyNCw3ICsyNzMsMTAgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFVRElUX0RFVk1BSk9SOgotCQkJaWYgKGN0eCkgeworCQkJaWYgKG5hbWUpCisJCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcihNQUpPUihuYW1lLT5kZXYpLAorCQkJCQkJCSAgZi0+b3AsIGYtPnZhbCk7CisJCQllbHNlIGlmIChjdHgpIHsKIAkJCQlmb3IgKGogPSAwOyBqIDwgY3R4LT5uYW1lX2NvdW50OyBqKyspIHsKIAkJCQkJaWYgKGF1ZGl0X2NvbXBhcmF0b3IoTUFKT1IoY3R4LT5uYW1lc1tqXS5kZXYpLAlmLT5vcCwgZi0+dmFsKSkgewogCQkJCQkJKytyZXN1bHQ7CkBAIC0yMzQsNyArMjg2LDEwIEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9ERVZNSU5PUjoKLQkJCWlmIChjdHgpIHsKKwkJCWlmIChuYW1lKQorCQkJCXJlc3VsdCA9IGF1ZGl0X2NvbXBhcmF0b3IoTUlOT1IobmFtZS0+ZGV2KSwKKwkJCQkJCQkgIGYtPm9wLCBmLT52YWwpOworCQkJZWxzZSBpZiAoY3R4KSB7CiAJCQkJZm9yIChqID0gMDsgaiA8IGN0eC0+bmFtZV9jb3VudDsgaisrKSB7CiAJCQkJCWlmIChhdWRpdF9jb21wYXJhdG9yKE1JTk9SKGN0eC0+bmFtZXNbal0uZGV2KSwgZi0+b3AsIGYtPnZhbCkpIHsKIAkJCQkJCSsrcmVzdWx0OwpAQCAtMjQ0LDE2ICsyOTksMjIgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFVRElUX0lOT0RFOgotCQkJaWYgKGN0eCkgeworCQkJaWYgKG5hbWUpCisJCQkJcmVzdWx0ID0gKG5hbWUtPmlubyA9PSBmLT52YWwpOworCQkJZWxzZSBpZiAoY3R4KSB7CiAJCQkJZm9yIChqID0gMDsgaiA8IGN0eC0+bmFtZV9jb3VudDsgaisrKSB7Ci0JCQkJCWlmIChhdWRpdF9jb21wYXJhdG9yKGN0eC0+bmFtZXNbal0uaW5vLCBmLT5vcCwgZi0+dmFsKSB8fAotCQkJCQkgICAgYXVkaXRfY29tcGFyYXRvcihjdHgtPm5hbWVzW2pdLnBpbm8sIGYtPm9wLCBmLT52YWwpKSB7CisJCQkJCWlmIChhdWRpdF9jb21wYXJhdG9yKGN0eC0+bmFtZXNbal0uaW5vLCBmLT5vcCwgZi0+dmFsKSkgewogCQkJCQkJKytyZXN1bHQ7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0KIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIEFVRElUX1dBVENIOgorCQkJaWYgKG5hbWUgJiYgcnVsZS0+d2F0Y2gtPmlubyAhPSAodW5zaWduZWQgbG9uZyktMSkKKwkJCQlyZXN1bHQgPSAobmFtZS0+ZGV2ID09IHJ1bGUtPndhdGNoLT5kZXYgJiYKKwkJCQkJICBuYW1lLT5pbm8gPT0gcnVsZS0+d2F0Y2gtPmlubyk7CisJCQlicmVhazsKIAkJY2FzZSBBVURJVF9MT0dJTlVJRDoKIAkJCXJlc3VsdCA9IDA7CiAJCQlpZiAoY3R4KQpAQCAtMjk0LDcgKzM1NSw2IEBACiAJfQogCXN3aXRjaCAocnVsZS0+YWN0aW9uKSB7CiAJY2FzZSBBVURJVF9ORVZFUjogICAgKnN0YXRlID0gQVVESVRfRElTQUJMRUQ7CSAgICBicmVhazsKLQljYXNlIEFVRElUX1BPU1NJQkxFOiAqc3RhdGUgPSBBVURJVF9CVUlMRF9DT05URVhUOyAgYnJlYWs7CiAJY2FzZSBBVURJVF9BTFdBWVM6ICAgKnN0YXRlID0gQVVESVRfUkVDT1JEX0NPTlRFWFQ7IGJyZWFrOwogCX0KIAlyZXR1cm4gMTsKQEAgLTMxMSw3ICszNzEsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsICZhdWRpdF9maWx0ZXJfbGlzdFtBVURJVF9GSUxURVJfVEFTS10sIGxpc3QpIHsKLQkJaWYgKGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBOVUxMLCAmc3RhdGUpKSB7CisJCWlmIChhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgTlVMTCwgTlVMTCwgJnN0YXRlKSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gc3RhdGU7CiAJCX0KQEAgLTM0MSw4ICs0MDEsOSBAQAogCQlpbnQgYml0ICA9IEFVRElUX0JJVChjdHgtPm1ham9yKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBsaXN0LCBsaXN0KSB7Ci0JCQlpZiAoKGUtPnJ1bGUubWFza1t3b3JkXSAmIGJpdCkgPT0gYml0Ci0JCQkJCSYmIGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBjdHgsICZzdGF0ZSkpIHsKKwkJCWlmICgoZS0+cnVsZS5tYXNrW3dvcmRdICYgYml0KSA9PSBiaXQgJiYKKwkJCSAgICBhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgY3R4LCBOVUxMLAorCQkJCQkgICAgICAgJnN0YXRlKSkgewogCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCXJldHVybiBzdGF0ZTsKIAkJCX0KQEAgLTM1Miw2ICs0MTMsNDkgQEAKIAlyZXR1cm4gQVVESVRfQlVJTERfQ09OVEVYVDsKIH0KIAorLyogQXQgc3lzY2FsbCBleGl0IHRpbWUsIHRoaXMgZmlsdGVyIGlzIGNhbGxlZCBpZiBhbnkgYXVkaXRfbmFtZXNbXSBoYXZlIGJlZW4KKyAqIGNvbGxlY3RlZCBkdXJpbmcgc3lzY2FsbCBwcm9jZXNzaW5nLiAgV2Ugb25seSBjaGVjayBydWxlcyBpbiBzdWJsaXN0cyBhdCBoYXNoCisgKiBidWNrZXRzIGFwcGxpY2FibGUgdG8gdGhlIGlub2RlIG51bWJlcnMgaW4gYXVkaXRfbmFtZXNbXS4KKyAqIFJlZ2FyZGluZyBhdWRpdF9zdGF0ZSwgc2FtZSBydWxlcyBhcHBseSBhcyBmb3IgYXVkaXRfZmlsdGVyX3N5c2NhbGwoKS4KKyAqLworZW51bSBhdWRpdF9zdGF0ZSBhdWRpdF9maWx0ZXJfaW5vZGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCSAgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgYXVkaXRfZW50cnkgKmU7CisJZW51bSBhdWRpdF9zdGF0ZSBzdGF0ZTsKKworCWlmIChhdWRpdF9waWQgJiYgdHNrLT50Z2lkID09IGF1ZGl0X3BpZCkKKwkJcmV0dXJuIEFVRElUX0RJU0FCTEVEOworCisJcmN1X3JlYWRfbG9jaygpOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPm5hbWVfY291bnQ7IGkrKykgeworCQlpbnQgd29yZCA9IEFVRElUX1dPUkQoY3R4LT5tYWpvcik7CisJCWludCBiaXQgID0gQVVESVRfQklUKGN0eC0+bWFqb3IpOworCQlzdHJ1Y3QgYXVkaXRfbmFtZXMgKm4gPSAmY3R4LT5uYW1lc1tpXTsKKwkJaW50IGggPSBhdWRpdF9oYXNoX2lubygodTMyKW4tPmlubyk7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSAmYXVkaXRfaW5vZGVfaGFzaFtoXTsKKworCQlpZiAobGlzdF9lbXB0eShsaXN0KSkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIGxpc3QsIGxpc3QpIHsKKwkJCWlmICgoZS0+cnVsZS5tYXNrW3dvcmRdICYgYml0KSA9PSBiaXQgJiYKKwkJCSAgICBhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgY3R4LCBuLCAmc3RhdGUpKSB7CisJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJcmV0dXJuIHN0YXRlOworCQkJfQorCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBBVURJVF9CVUlMRF9DT05URVhUOworfQorCit2b2lkIGF1ZGl0X3NldF9hdWRpdGFibGUoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCkKK3sKKwljdHgtPmF1ZGl0YWJsZSA9IDE7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmF1ZGl0X2dldF9jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJCQkJICAgICAgaW50IHJldHVybl92YWxpZCwKIAkJCQkJCSAgICAgIGludCByZXR1cm5fY29kZSkKQEAgLTM2NSwxMiArNDY5LDIyIEBACiAKIAlpZiAoY29udGV4dC0+aW5fc3lzY2FsbCAmJiAhY29udGV4dC0+YXVkaXRhYmxlKSB7CiAJCWVudW0gYXVkaXRfc3RhdGUgc3RhdGU7CisKIAkJc3RhdGUgPSBhdWRpdF9maWx0ZXJfc3lzY2FsbCh0c2ssIGNvbnRleHQsICZhdWRpdF9maWx0ZXJfbGlzdFtBVURJVF9GSUxURVJfRVhJVF0pOworCQlpZiAoc3RhdGUgPT0gQVVESVRfUkVDT1JEX0NPTlRFWFQpIHsKKwkJCWNvbnRleHQtPmF1ZGl0YWJsZSA9IDE7CisJCQlnb3RvIGdldF9jb250ZXh0OworCQl9CisKKwkJc3RhdGUgPSBhdWRpdF9maWx0ZXJfaW5vZGVzKHRzaywgY29udGV4dCk7CiAJCWlmIChzdGF0ZSA9PSBBVURJVF9SRUNPUkRfQ09OVEVYVCkKIAkJCWNvbnRleHQtPmF1ZGl0YWJsZSA9IDE7CisKIAl9CiAKK2dldF9jb250ZXh0OgogCWNvbnRleHQtPnBpZCA9IHRzay0+cGlkOworCWNvbnRleHQtPnBwaWQgPSBzeXNfZ2V0cHBpZCgpOwkvKiBzaWMuICB0c2sgPT0gY3VycmVudCBpbiBhbGwgY2FzZXMgKi8KIAljb250ZXh0LT51aWQgPSB0c2stPnVpZDsKIAljb250ZXh0LT5naWQgPSB0c2stPmdpZDsKIAljb250ZXh0LT5ldWlkID0gdHNrLT5ldWlkOwpAQCAtNDEzLDcgKzUyNyw3IEBACiAjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBjb250ZXh0LT5uYW1lX2NvdW50OyBpKyspIHsKLQkJaWYgKGNvbnRleHQtPm5hbWVzW2ldLm5hbWUpCisJCWlmIChjb250ZXh0LT5uYW1lc1tpXS5uYW1lICYmIGNvbnRleHQtPm5hbWVzW2ldLm5hbWVfcHV0KQogCQkJX19wdXRuYW1lKGNvbnRleHQtPm5hbWVzW2ldLm5hbWUpOwogCX0KIAljb250ZXh0LT5uYW1lX2NvdW50ID0gMDsKQEAgLTYwNiw3ICs3MjAsNyBAQAogCQl0dHkgPSAiKG5vbmUpIjsKIAlhdWRpdF9sb2dfZm9ybWF0KGFiLAogCQkgICIgYTA9JWx4IGExPSVseCBhMj0lbHggYTM9JWx4IGl0ZW1zPSVkIgotCQkgICIgcGlkPSVkIGF1aWQ9JXUgdWlkPSV1IGdpZD0ldSIKKwkJICAiIHBwaWQ9JWQgcGlkPSVkIGF1aWQ9JXUgdWlkPSV1IGdpZD0ldSIKIAkJICAiIGV1aWQ9JXUgc3VpZD0ldSBmc3VpZD0ldSIKIAkJICAiIGVnaWQ9JXUgc2dpZD0ldSBmc2dpZD0ldSB0dHk9JXMiLAogCQkgIGNvbnRleHQtPmFyZ3ZbMF0sCkBAIC02MTQsNiArNzI4LDcgQEAKIAkJICBjb250ZXh0LT5hcmd2WzJdLAogCQkgIGNvbnRleHQtPmFyZ3ZbM10sCiAJCSAgY29udGV4dC0+bmFtZV9jb3VudCwKKwkJICBjb250ZXh0LT5wcGlkLAogCQkgIGNvbnRleHQtPnBpZCwKIAkJICBjb250ZXh0LT5sb2dpbnVpZCwKIAkJICBjb250ZXh0LT51aWQsCkBAIC02MzAsMTEgKzc0NSw0OCBAQAogCQkJY29udGludWU7IC8qIGF1ZGl0X3BhbmljIGhhcyBiZWVuIGNhbGxlZCAqLwogCiAJCXN3aXRjaCAoYXV4LT50eXBlKSB7CisJCWNhc2UgQVVESVRfTVFfT1BFTjogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX29wZW4gKmF4aSA9ICh2b2lkICopYXV4OworCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKKwkJCQkib2ZsYWc9MHgleCBtb2RlPSUjbyBtcV9mbGFncz0weCVseCBtcV9tYXhtc2c9JWxkICIKKwkJCQkibXFfbXNnc2l6ZT0lbGQgbXFfY3VybXNncz0lbGQiLAorCQkJCWF4aS0+b2ZsYWcsIGF4aS0+bW9kZSwgYXhpLT5hdHRyLm1xX2ZsYWdzLAorCQkJCWF4aS0+YXR0ci5tcV9tYXhtc2csIGF4aS0+YXR0ci5tcV9tc2dzaXplLAorCQkJCWF4aS0+YXR0ci5tcV9jdXJtc2dzKTsKKwkJCWJyZWFrOyB9CisKKwkJY2FzZSBBVURJVF9NUV9TRU5EUkVDVjogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX3NlbmRyZWN2ICpheGkgPSAodm9pZCAqKWF1eDsKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsCisJCQkJIm1xZGVzPSVkIG1zZ19sZW49JXpkIG1zZ19wcmlvPSV1ICIKKwkJCQkiYWJzX3RpbWVvdXRfc2VjPSVsZCBhYnNfdGltZW91dF9uc2VjPSVsZCIsCisJCQkJYXhpLT5tcWRlcywgYXhpLT5tc2dfbGVuLCBheGktPm1zZ19wcmlvLAorCQkJCWF4aS0+YWJzX3RpbWVvdXQudHZfc2VjLCBheGktPmFic190aW1lb3V0LnR2X25zZWMpOworCQkJYnJlYWs7IH0KKworCQljYXNlIEFVRElUX01RX05PVElGWTogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX25vdGlmeSAqYXhpID0gKHZvaWQgKilhdXg7CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLAorCQkJCSJtcWRlcz0lZCBzaWdldl9zaWdubz0lZCIsCisJCQkJYXhpLT5tcWRlcywKKwkJCQlheGktPm5vdGlmaWNhdGlvbi5zaWdldl9zaWdubyk7CisJCQlicmVhazsgfQorCisJCWNhc2UgQVVESVRfTVFfR0VUU0VUQVRUUjogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX2dldHNldGF0dHIgKmF4aSA9ICh2b2lkICopYXV4OworCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKKwkJCQkibXFkZXM9JWQgbXFfZmxhZ3M9MHglbHggbXFfbWF4bXNnPSVsZCBtcV9tc2dzaXplPSVsZCAiCisJCQkJIm1xX2N1cm1zZ3M9JWxkICIsCisJCQkJYXhpLT5tcWRlcywKKwkJCQlheGktPm1xc3RhdC5tcV9mbGFncywgYXhpLT5tcXN0YXQubXFfbWF4bXNnLAorCQkJCWF4aS0+bXFzdGF0Lm1xX21zZ3NpemUsIGF4aS0+bXFzdGF0Lm1xX2N1cm1zZ3MpOworCQkJYnJlYWs7IH0KKwogCQljYXNlIEFVRElUX0lQQzogewogCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCAqYXhpID0gKHZvaWQgKilhdXg7CiAJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAKLQkJCQkgIiBxYnl0ZXM9JWx4IGl1aWQ9JXUgaWdpZD0ldSBtb2RlPSV4IiwKLQkJCQkgYXhpLT5xYnl0ZXMsIGF4aS0+dWlkLCBheGktPmdpZCwgYXhpLT5tb2RlKTsKKwkJCQkgIm91aWQ9JXUgb2dpZD0ldSBtb2RlPSV4IiwKKwkJCQkgYXhpLT51aWQsIGF4aS0+Z2lkLCBheGktPm1vZGUpOwogCQkJaWYgKGF4aS0+b3NpZCAhPSAwKSB7CiAJCQkJY2hhciAqY3R4ID0gTlVMTDsKIAkJCQl1MzIgbGVuOwpAQCAtNjUyLDE5ICs4MDQsMTggQEAKIAkJY2FzZSBBVURJVF9JUENfU0VUX1BFUk06IHsKIAkJCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9pcGNjdGwgKmF4aSA9ICh2b2lkICopYXV4OwogCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKLQkJCQkiIG5ldyBxYnl0ZXM9JWx4IG5ldyBpdWlkPSV1IG5ldyBpZ2lkPSV1IG5ldyBtb2RlPSV4IiwKKwkJCQkicWJ5dGVzPSVseCBvdWlkPSV1IG9naWQ9JXUgbW9kZT0leCIsCiAJCQkJYXhpLT5xYnl0ZXMsIGF4aS0+dWlkLCBheGktPmdpZCwgYXhpLT5tb2RlKTsKLQkJCWlmIChheGktPm9zaWQgIT0gMCkgewotCQkJCWNoYXIgKmN0eCA9IE5VTEw7Ci0JCQkJdTMyIGxlbjsKLQkJCQlpZiAoc2VsaW51eF9jdHhpZF90b19zdHJpbmcoCi0JCQkJCQlheGktPm9zaWQsICZjdHgsICZsZW4pKSB7Ci0JCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3NpZD0ldSIsCi0JCQkJCQkJYXhpLT5vc2lkKTsKLQkJCQkJY2FsbF9wYW5pYyA9IDE7Ci0JCQkJfSBlbHNlCi0JCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb2JqPSVzIiwgY3R4KTsKLQkJCQlrZnJlZShjdHgpOworCQkJYnJlYWs7IH0KKworCQljYXNlIEFVRElUX0VYRUNWRTogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2V4ZWN2ZSAqYXhpID0gKHZvaWQgKilhdXg7CisJCQlpbnQgaTsKKwkJCWNvbnN0IGNoYXIgKnA7CisJCQlmb3IgKGkgPSAwLCBwID0gYXhpLT5tZW07IGkgPCBheGktPmFyZ2M7IGkrKykgeworCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJhJWQ9IiwgaSk7CisJCQkJcCA9IGF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIHApOworCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJcbiIpOwogCQkJfQogCQkJYnJlYWs7IH0KIApAQCAtNzAwLDggKzg1MSw3IEBACiAJCX0KIAl9CiAJZm9yIChpID0gMDsgaSA8IGNvbnRleHQtPm5hbWVfY291bnQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGlubyAgPSBjb250ZXh0LT5uYW1lc1tpXS5pbm87Ci0JCXVuc2lnbmVkIGxvbmcgcGlubyA9IGNvbnRleHQtPm5hbWVzW2ldLnBpbm87CisJCXN0cnVjdCBhdWRpdF9uYW1lcyAqbiA9ICZjb250ZXh0LT5uYW1lc1tpXTsKIAogCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBHRlBfS0VSTkVMLCBBVURJVF9QQVRIKTsKIAkJaWYgKCFhYikKQEAgLTcwOSwzMyArODU5LDQ3IEBACiAKIAkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIml0ZW09JWQiLCBpKTsKIAotCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG5hbWU9Iik7Ci0JCWlmIChjb250ZXh0LT5uYW1lc1tpXS5uYW1lKQotCQkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgY29udGV4dC0+bmFtZXNbaV0ubmFtZSk7Ci0JCWVsc2UKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIobnVsbCkiKTsKKwkJaWYgKG4tPm5hbWUpIHsKKwkJCXN3aXRjaChuLT5uYW1lX2xlbikgeworCQkJY2FzZSBBVURJVF9OQU1FX0ZVTEw6CisJCQkJLyogbG9nIHRoZSBmdWxsIHBhdGggKi8KKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG5hbWU9Iik7CisJCQkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgbi0+bmFtZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJLyogbmFtZSB3YXMgc3BlY2lmaWVkIGFzIGEgcmVsYXRpdmUgcGF0aCBhbmQgdGhlCisJCQkJICogZGlyZWN0b3J5IGNvbXBvbmVudCBpcyB0aGUgY3dkICovCisJCQkJYXVkaXRfbG9nX2RfcGF0aChhYiwgIiBuYW1lPSIsIGNvbnRleHQtPnB3ZCwKKwkJCQkJCSBjb250ZXh0LT5wd2RtbnQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBsb2cgdGhlIG5hbWUncyBkaXJlY3RvcnkgY29tcG9uZW50ICovCisJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuYW1lPSIpOworCQkJCWF1ZGl0X2xvZ19uX3VudHJ1c3RlZHN0cmluZyhhYiwgbi0+bmFtZV9sZW4sCisJCQkJCQkJICAgIG4tPm5hbWUpOworCQkJfQorCQl9IGVsc2UKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbmFtZT0obnVsbCkiKTsKIAotCQlpZiAocGlubyAhPSAodW5zaWduZWQgbG9uZyktMSkKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgcGFyZW50PSVsdSIsICBwaW5vKTsKLQkJaWYgKGlubyAhPSAodW5zaWduZWQgbG9uZyktMSkKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgaW5vZGU9JWx1IiwgIGlubyk7Ci0JCWlmICgocGlubyAhPSAodW5zaWduZWQgbG9uZyktMSkgfHwgKGlubyAhPSAodW5zaWduZWQgbG9uZyktMSkpCi0JCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGRldj0lMDJ4OiUwMnggbW9kZT0lI28iIAotCQkJCQkgIiBvdWlkPSV1IG9naWQ9JXUgcmRldj0lMDJ4OiUwMngiLCAKLQkJCQkJIE1BSk9SKGNvbnRleHQtPm5hbWVzW2ldLmRldiksIAotCQkJCQkgTUlOT1IoY29udGV4dC0+bmFtZXNbaV0uZGV2KSwgCi0JCQkJCSBjb250ZXh0LT5uYW1lc1tpXS5tb2RlLCAKLQkJCQkJIGNvbnRleHQtPm5hbWVzW2ldLnVpZCwgCi0JCQkJCSBjb250ZXh0LT5uYW1lc1tpXS5naWQsIAotCQkJCQkgTUFKT1IoY29udGV4dC0+bmFtZXNbaV0ucmRldiksIAotCQkJCQkgTUlOT1IoY29udGV4dC0+bmFtZXNbaV0ucmRldikpOwotCQlpZiAoY29udGV4dC0+bmFtZXNbaV0ub3NpZCAhPSAwKSB7CisJCWlmIChuLT5pbm8gIT0gKHVuc2lnbmVkIGxvbmcpLTEpIHsKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgaW5vZGU9JWx1IgorCQkJCQkgIiBkZXY9JTAyeDolMDJ4IG1vZGU9JSNvIgorCQkJCQkgIiBvdWlkPSV1IG9naWQ9JXUgcmRldj0lMDJ4OiUwMngiLAorCQkJCQkgbi0+aW5vLAorCQkJCQkgTUFKT1Iobi0+ZGV2KSwKKwkJCQkJIE1JTk9SKG4tPmRldiksCisJCQkJCSBuLT5tb2RlLAorCQkJCQkgbi0+dWlkLAorCQkJCQkgbi0+Z2lkLAorCQkJCQkgTUFKT1Iobi0+cmRldiksCisJCQkJCSBNSU5PUihuLT5yZGV2KSk7CisJCX0KKwkJaWYgKG4tPm9zaWQgIT0gMCkgewogCQkJY2hhciAqY3R4ID0gTlVMTDsKIAkJCXUzMiBsZW47CiAJCQlpZiAoc2VsaW51eF9jdHhpZF90b19zdHJpbmcoCi0JCQkJY29udGV4dC0+bmFtZXNbaV0ub3NpZCwgJmN0eCwgJmxlbikpIHsKLQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9zaWQ9JXUiLAotCQkJCQkJY29udGV4dC0+bmFtZXNbaV0ub3NpZCk7CisJCQkJbi0+b3NpZCwgJmN0eCwgJmxlbikpIHsKKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9zaWQ9JXUiLCBuLT5vc2lkKTsKIAkJCQljYWxsX3BhbmljID0gMjsKIAkJCX0gZWxzZQogCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb2JqPSVzIiwgY3R4KTsKQEAgLTkwOCwxMSArMTA3MiwxMSBAQAogICogQWRkIGEgbmFtZSB0byB0aGUgbGlzdCBvZiBhdWRpdCBuYW1lcyBmb3IgdGhpcyBjb250ZXh0LgogICogQ2FsbGVkIGZyb20gZnMvbmFtZWkuYzpnZXRuYW1lKCkuCiAgKi8KLXZvaWQgYXVkaXRfZ2V0bmFtZShjb25zdCBjaGFyICpuYW1lKQordm9pZCBfX2F1ZGl0X2dldG5hbWUoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CiAKLQlpZiAoIWNvbnRleHQgfHwgSVNfRVJSKG5hbWUpIHx8ICFuYW1lKQorCWlmIChJU19FUlIobmFtZSkgfHwgIW5hbWUpCiAJCXJldHVybjsKIAogCWlmICghY29udGV4dC0+aW5fc3lzY2FsbCkgewpAQCAtOTI1LDYgKzEwODksOCBAQAogCX0KIAlCVUdfT04oY29udGV4dC0+bmFtZV9jb3VudCA+PSBBVURJVF9OQU1FUyk7CiAJY29udGV4dC0+bmFtZXNbY29udGV4dC0+bmFtZV9jb3VudF0ubmFtZSA9IG5hbWU7CisJY29udGV4dC0+bmFtZXNbY29udGV4dC0+bmFtZV9jb3VudF0ubmFtZV9sZW4gPSBBVURJVF9OQU1FX0ZVTEw7CisJY29udGV4dC0+bmFtZXNbY29udGV4dC0+bmFtZV9jb3VudF0ubmFtZV9wdXQgPSAxOwogCWNvbnRleHQtPm5hbWVzW2NvbnRleHQtPm5hbWVfY291bnRdLmlubyAgPSAodW5zaWduZWQgbG9uZyktMTsKIAkrK2NvbnRleHQtPm5hbWVfY291bnQ7CiAJaWYgKCFjb250ZXh0LT5wd2QpIHsKQEAgLTk5MSwxMSArMTE1NywxMCBAQAogICogYXVkaXRfaW5vZGUgLSBzdG9yZSB0aGUgaW5vZGUgYW5kIGRldmljZSBmcm9tIGEgbG9va3VwCiAgKiBAbmFtZTogbmFtZSBiZWluZyBhdWRpdGVkCiAgKiBAaW5vZGU6IGlub2RlIGJlaW5nIGF1ZGl0ZWQKLSAqIEBmbGFnczogbG9va3VwIGZsYWdzIChhcyB1c2VkIGluIHBhdGhfbG9va3VwKCkpCiAgKgogICogQ2FsbGVkIGZyb20gZnMvbmFtZWkuYzpwYXRoX2xvb2t1cCgpLgogICovCi12b2lkIF9fYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgZmxhZ3MpCit2b2lkIF9fYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpbnQgaWR4OwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKQEAgLTEwMjEsMjAgKzExODYsMTMgQEAKIAkJKytjb250ZXh0LT5pbm9fY291bnQ7CiAjZW5kaWYKIAl9CisJY29udGV4dC0+bmFtZXNbaWR4XS5pbm8gICA9IGlub2RlLT5pX2lubzsKIAljb250ZXh0LT5uYW1lc1tpZHhdLmRldgkgID0gaW5vZGUtPmlfc2ItPnNfZGV2OwogCWNvbnRleHQtPm5hbWVzW2lkeF0ubW9kZSAgPSBpbm9kZS0+aV9tb2RlOwogCWNvbnRleHQtPm5hbWVzW2lkeF0udWlkICAgPSBpbm9kZS0+aV91aWQ7CiAJY29udGV4dC0+bmFtZXNbaWR4XS5naWQgICA9IGlub2RlLT5pX2dpZDsKIAljb250ZXh0LT5uYW1lc1tpZHhdLnJkZXYgID0gaW5vZGUtPmlfcmRldjsKIAlhdWRpdF9pbm9kZV9jb250ZXh0KGlkeCwgaW5vZGUpOwotCWlmICgoZmxhZ3MgJiBMT09LVVBfUEFSRU5UKSAmJiAoc3RyY21wKG5hbWUsICIvIikgIT0gMCkgJiYgCi0JICAgIChzdHJjbXAobmFtZSwgIi4iKSAhPSAwKSkgewotCQljb250ZXh0LT5uYW1lc1tpZHhdLmlubyAgID0gKHVuc2lnbmVkIGxvbmcpLTE7Ci0JCWNvbnRleHQtPm5hbWVzW2lkeF0ucGlubyAgPSBpbm9kZS0+aV9pbm87Ci0JfSBlbHNlIHsKLQkJY29udGV4dC0+bmFtZXNbaWR4XS5pbm8gICA9IGlub2RlLT5pX2lubzsKLQkJY29udGV4dC0+bmFtZXNbaWR4XS5waW5vICA9ICh1bnNpZ25lZCBsb25nKS0xOwotCX0KIH0KIAogLyoqCkBAIC0xMDU2LDUxICsxMjE0LDQwIEBACiB7CiAJaW50IGlkeDsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisJY29uc3QgY2hhciAqZm91bmRfbmFtZSA9IE5VTEw7CisJaW50IGRpcmxlbiA9IDA7CiAKIAlpZiAoIWNvbnRleHQtPmluX3N5c2NhbGwpCiAJCXJldHVybjsKIAogCS8qIGRldGVybWluZSBtYXRjaGluZyBwYXJlbnQgKi8KLQlpZiAoZG5hbWUpCi0JCWZvciAoaWR4ID0gMDsgaWR4IDwgY29udGV4dC0+bmFtZV9jb3VudDsgaWR4KyspCi0JCQlpZiAoY29udGV4dC0+bmFtZXNbaWR4XS5waW5vID09IHBpbm8pIHsKLQkJCQljb25zdCBjaGFyICpuOwotCQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBjb250ZXh0LT5uYW1lc1tpZHhdLm5hbWU7Ci0JCQkJaW50IGRsZW4gPSBzdHJsZW4oZG5hbWUpOwotCQkJCWludCBubGVuID0gbmFtZSA/IHN0cmxlbihuYW1lKSA6IDA7CisJaWYgKCFkbmFtZSkKKwkJZ290byB1cGRhdGVfY29udGV4dDsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvbnRleHQtPm5hbWVfY291bnQ7IGlkeCsrKQorCQlpZiAoY29udGV4dC0+bmFtZXNbaWR4XS5pbm8gPT0gcGlubykgeworCQkJY29uc3QgY2hhciAqbmFtZSA9IGNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZTsKIAotCQkJCWlmIChubGVuIDwgZGxlbikKLQkJCQkJY29udGludWU7Ci0JCQkJCi0JCQkJLyogZGlzcmVnYXJkIHRyYWlsaW5nIHNsYXNoZXMgKi8KLQkJCQluID0gbmFtZSArIG5sZW4gLSAxOwotCQkJCXdoaWxlICgoKm4gPT0gJy8nKSAmJiAobiA+IG5hbWUpKQotCQkJCQluLS07CisJCQlpZiAoIW5hbWUpCisJCQkJY29udGludWU7CiAKLQkJCQkvKiBmaW5kIGxhc3QgcGF0aCBjb21wb25lbnQgKi8KLQkJCQluID0gbiAtIGRsZW4gKyAxOwotCQkJCWlmIChuIDwgbmFtZSkKLQkJCQkJY29udGludWU7Ci0JCQkJZWxzZSBpZiAobiA+IG5hbWUpIHsKLQkJCQkJaWYgKCotLW4gIT0gJy8nKQotCQkJCQkJY29udGludWU7Ci0JCQkJCWVsc2UKLQkJCQkJCW4rKzsKLQkJCQl9Ci0KLQkJCQlpZiAoc3RybmNtcChuLCBkbmFtZSwgZGxlbikgPT0gMCkKLQkJCQkJZ290byB1cGRhdGVfY29udGV4dDsKKwkJCWlmIChhdWRpdF9jb21wYXJlX2RuYW1lX3BhdGgoZG5hbWUsIG5hbWUsICZkaXJsZW4pID09IDApIHsKKwkJCQljb250ZXh0LT5uYW1lc1tpZHhdLm5hbWVfbGVuID0gZGlybGVuOworCQkJCWZvdW5kX25hbWUgPSBuYW1lOworCQkJCWJyZWFrOwogCQkJfQorCQl9CiAKLQkvKiBjYXRjaC1hbGwgaW4gY2FzZSBtYXRjaCBub3QgZm91bmQgKi8KK3VwZGF0ZV9jb250ZXh0OgogCWlkeCA9IGNvbnRleHQtPm5hbWVfY291bnQrKzsKLQljb250ZXh0LT5uYW1lc1tpZHhdLm5hbWUgID0gTlVMTDsKLQljb250ZXh0LT5uYW1lc1tpZHhdLnBpbm8gID0gcGlubzsKICNpZiBBVURJVF9ERUJVRwogCWNvbnRleHQtPmlub19jb3VudCsrOwogI2VuZGlmCisJLyogUmUtdXNlIHRoZSBuYW1lIGJlbG9uZ2luZyB0byB0aGUgc2xvdCBmb3IgYSBtYXRjaGluZyBwYXJlbnQgZGlyZWN0b3J5LgorCSAqIEFsbCBuYW1lcyBmb3IgdGhpcyBjb250ZXh0IGFyZSByZWxpbnF1aXNoZWQgaW4gYXVkaXRfZnJlZV9uYW1lcygpICovCisJY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lID0gZm91bmRfbmFtZTsKKwljb250ZXh0LT5uYW1lc1tpZHhdLm5hbWVfbGVuID0gQVVESVRfTkFNRV9GVUxMOworCWNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZV9wdXQgPSAwOwkvKiBkb24ndCBjYWxsIF9fcHV0bmFtZSgpICovCiAKLXVwZGF0ZV9jb250ZXh0OgogCWlmIChpbm9kZSkgewogCQljb250ZXh0LT5uYW1lc1tpZHhdLmlubyAgID0gaW5vZGUtPmlfaW5vOwogCQljb250ZXh0LT5uYW1lc1tpZHhdLmRldgkgID0gaW5vZGUtPmlfc2ItPnNfZGV2OwpAQCAtMTEwOSw3ICsxMjU2LDggQEAKIAkJY29udGV4dC0+bmFtZXNbaWR4XS5naWQgICA9IGlub2RlLT5pX2dpZDsKIAkJY29udGV4dC0+bmFtZXNbaWR4XS5yZGV2ICA9IGlub2RlLT5pX3JkZXY7CiAJCWF1ZGl0X2lub2RlX2NvbnRleHQoaWR4LCBpbm9kZSk7Ci0JfQorCX0gZWxzZQorCQljb250ZXh0LT5uYW1lc1tpZHhdLmlubyAgID0gKHVuc2lnbmVkIGxvbmcpLTE7CiB9CiAKIC8qKgpAQCAtMTE0MiwxOCArMTI5MCwyMyBAQAogICovCiBpbnQgYXVkaXRfc2V0X2xvZ2ludWlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdWlkX3QgbG9naW51aWQpCiB7Ci0JaWYgKHRhc2stPmF1ZGl0X2NvbnRleHQpIHsKLQkJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CisJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSB0YXNrLT5hdWRpdF9jb250ZXh0OwogCi0JCWFiID0gYXVkaXRfbG9nX3N0YXJ0KE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0xPR0lOKTsKLQkJaWYgKGFiKSB7Ci0JCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAibG9naW4gcGlkPSVkIHVpZD0ldSAiCi0JCQkJIm9sZCBhdWlkPSV1IG5ldyBhdWlkPSV1IiwKLQkJCQl0YXNrLT5waWQsIHRhc2stPnVpZCwgCi0JCQkJdGFzay0+YXVkaXRfY29udGV4dC0+bG9naW51aWQsIGxvZ2ludWlkKTsKLQkJCWF1ZGl0X2xvZ19lbmQoYWIpOworCWlmIChjb250ZXh0KSB7CisJCS8qIE9ubHkgbG9nIGlmIGF1ZGl0IGlzIGVuYWJsZWQgKi8KKwkJaWYgKGNvbnRleHQtPmluX3N5c2NhbGwpIHsKKwkJCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOworCisJCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9MT0dJTik7CisJCQlpZiAoYWIpIHsKKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAibG9naW4gcGlkPSVkIHVpZD0ldSAiCisJCQkJCSJvbGQgYXVpZD0ldSBuZXcgYXVpZD0ldSIsCisJCQkJCXRhc2stPnBpZCwgdGFzay0+dWlkLAorCQkJCQljb250ZXh0LT5sb2dpbnVpZCwgbG9naW51aWQpOworCQkJCWF1ZGl0X2xvZ19lbmQoYWIpOworCQkJfQogCQl9Ci0JCXRhc2stPmF1ZGl0X2NvbnRleHQtPmxvZ2ludWlkID0gbG9naW51aWQ7CisJCWNvbnRleHQtPmxvZ2ludWlkID0gbG9naW51aWQ7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTE3MCwxOSArMTMyMywyMjAgQEAKIH0KIAogLyoqCisgKiBfX2F1ZGl0X21xX29wZW4gLSByZWNvcmQgYXVkaXQgZGF0YSBmb3IgYSBQT1NJWCBNUSBvcGVuCisgKiBAb2ZsYWc6IG9wZW4gZmxhZworICogQG1vZGU6IG1vZGUgYml0cworICogQHVfYXR0cjogcXVldWUgYXR0cmlidXRlcworICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyBvciBOVUxMIGNvbnRleHQgb3IgPCAwIG9uIGVycm9yLgorICovCitpbnQgX19hdWRpdF9tcV9vcGVuKGludCBvZmxhZywgbW9kZV90IG1vZGUsIHN0cnVjdCBtcV9hdHRyIF9fdXNlciAqdV9hdHRyKQoreworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9tcV9vcGVuICpheDsKKwlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisKKwlpZiAoIWF1ZGl0X2VuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseSghY29udGV4dCkpCisJCXJldHVybiAwOworCisJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWF4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh1X2F0dHIgIT0gTlVMTCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJmF4LT5hdHRyLCB1X2F0dHIsIHNpemVvZihheC0+YXR0cikpKSB7CisJCQlrZnJlZShheCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0gZWxzZQorCQltZW1zZXQoJmF4LT5hdHRyLCAwLCBzaXplb2YoYXgtPmF0dHIpKTsKKworCWF4LT5vZmxhZyA9IG9mbGFnOworCWF4LT5tb2RlID0gbW9kZTsKKworCWF4LT5kLnR5cGUgPSBBVURJVF9NUV9PUEVOOworCWF4LT5kLm5leHQgPSBjb250ZXh0LT5hdXg7CisJY29udGV4dC0+YXV4ID0gKHZvaWQgKilheDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfX2F1ZGl0X21xX3RpbWVkc2VuZCAtIHJlY29yZCBhdWRpdCBkYXRhIGZvciBhIFBPU0lYIE1RIHRpbWVkIHNlbmQKKyAqIEBtcWRlczogTVEgZGVzY3JpcHRvcgorICogQG1zZ19sZW46IE1lc3NhZ2UgbGVuZ3RoCisgKiBAbXNnX3ByaW86IE1lc3NhZ2UgcHJpb3JpdHkKKyAqIEBhYnNfdGltZW91dDogTWVzc2FnZSB0aW1lb3V0IGluIGFic29sdXRlIHRpbWUKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KKyAqLworaW50IF9fYXVkaXRfbXFfdGltZWRzZW5kKG1xZF90IG1xZGVzLCBzaXplX3QgbXNnX2xlbiwgdW5zaWduZWQgaW50IG1zZ19wcmlvLAorCQkJY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqdV9hYnNfdGltZW91dCkKK3sKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfc2VuZHJlY3YgKmF4OworCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKKworCWlmICghYXVkaXRfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGlrZWx5KCFjb250ZXh0KSkKKwkJcmV0dXJuIDA7CisKKwlheCA9IGttYWxsb2Moc2l6ZW9mKCpheCksIEdGUF9BVE9NSUMpOworCWlmICghYXgpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHVfYWJzX3RpbWVvdXQgIT0gTlVMTCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJmF4LT5hYnNfdGltZW91dCwgdV9hYnNfdGltZW91dCwgc2l6ZW9mKGF4LT5hYnNfdGltZW91dCkpKSB7CisJCQlrZnJlZShheCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0gZWxzZQorCQltZW1zZXQoJmF4LT5hYnNfdGltZW91dCwgMCwgc2l6ZW9mKGF4LT5hYnNfdGltZW91dCkpOworCisJYXgtPm1xZGVzID0gbXFkZXM7CisJYXgtPm1zZ19sZW4gPSBtc2dfbGVuOworCWF4LT5tc2dfcHJpbyA9IG1zZ19wcmlvOworCisJYXgtPmQudHlwZSA9IEFVRElUX01RX1NFTkRSRUNWOworCWF4LT5kLm5leHQgPSBjb250ZXh0LT5hdXg7CisJY29udGV4dC0+YXV4ID0gKHZvaWQgKilheDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfX2F1ZGl0X21xX3RpbWVkcmVjZWl2ZSAtIHJlY29yZCBhdWRpdCBkYXRhIGZvciBhIFBPU0lYIE1RIHRpbWVkIHJlY2VpdmUKKyAqIEBtcWRlczogTVEgZGVzY3JpcHRvcgorICogQG1zZ19sZW46IE1lc3NhZ2UgbGVuZ3RoCisgKiBAbXNnX3ByaW86IE1lc3NhZ2UgcHJpb3JpdHkKKyAqIEBhYnNfdGltZW91dDogTWVzc2FnZSB0aW1lb3V0IGluIGFic29sdXRlIHRpbWUKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KKyAqLworaW50IF9fYXVkaXRfbXFfdGltZWRyZWNlaXZlKG1xZF90IG1xZGVzLCBzaXplX3QgbXNnX2xlbiwKKwkJCQl1bnNpZ25lZCBpbnQgX191c2VyICp1X21zZ19wcmlvLAorCQkJCWNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpCit7CisJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX3NlbmRyZWN2ICpheDsKKwlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisKKwlpZiAoIWF1ZGl0X2VuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseSghY29udGV4dCkpCisJCXJldHVybiAwOworCisJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWF4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh1X21zZ19wcmlvICE9IE5VTEwpIHsKKwkJaWYgKGdldF91c2VyKGF4LT5tc2dfcHJpbywgdV9tc2dfcHJpbykpIHsKKwkJCWtmcmVlKGF4KTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlCisJCWF4LT5tc2dfcHJpbyA9IDA7CisKKwlpZiAodV9hYnNfdGltZW91dCAhPSBOVUxMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXgtPmFic190aW1lb3V0LCB1X2Fic190aW1lb3V0LCBzaXplb2YoYXgtPmFic190aW1lb3V0KSkpIHsKKwkJCWtmcmVlKGF4KTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlCisJCW1lbXNldCgmYXgtPmFic190aW1lb3V0LCAwLCBzaXplb2YoYXgtPmFic190aW1lb3V0KSk7CisKKwlheC0+bXFkZXMgPSBtcWRlczsKKwlheC0+bXNnX2xlbiA9IG1zZ19sZW47CisKKwlheC0+ZC50eXBlID0gQVVESVRfTVFfU0VORFJFQ1Y7CisJYXgtPmQubmV4dCA9IGNvbnRleHQtPmF1eDsKKwljb250ZXh0LT5hdXggPSAodm9pZCAqKWF4OworCXJldHVybiAwOworfQorCisvKioKKyAqIF9fYXVkaXRfbXFfbm90aWZ5IC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGEgUE9TSVggTVEgbm90aWZ5CisgKiBAbXFkZXM6IE1RIGRlc2NyaXB0b3IKKyAqIEB1X25vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uIGV2ZW50CisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzIG9yIE5VTEwgY29udGV4dCBvciA8IDAgb24gZXJyb3IuCisgKi8KKworaW50IF9fYXVkaXRfbXFfbm90aWZ5KG1xZF90IG1xZGVzLCBjb25zdCBzdHJ1Y3Qgc2lnZXZlbnQgX191c2VyICp1X25vdGlmaWNhdGlvbikKK3sKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfbm90aWZ5ICpheDsKKwlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisKKwlpZiAoIWF1ZGl0X2VuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseSghY29udGV4dCkpCisJCXJldHVybiAwOworCisJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWF4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh1X25vdGlmaWNhdGlvbiAhPSBOVUxMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXgtPm5vdGlmaWNhdGlvbiwgdV9ub3RpZmljYXRpb24sIHNpemVvZihheC0+bm90aWZpY2F0aW9uKSkpIHsKKwkJCWtmcmVlKGF4KTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlCisJCW1lbXNldCgmYXgtPm5vdGlmaWNhdGlvbiwgMCwgc2l6ZW9mKGF4LT5ub3RpZmljYXRpb24pKTsKKworCWF4LT5tcWRlcyA9IG1xZGVzOworCisJYXgtPmQudHlwZSA9IEFVRElUX01RX05PVElGWTsKKwlheC0+ZC5uZXh0ID0gY29udGV4dC0+YXV4OworCWNvbnRleHQtPmF1eCA9ICh2b2lkICopYXg7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX19hdWRpdF9tcV9nZXRzZXRhdHRyIC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGEgUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUKKyAqIEBtcWRlczogTVEgZGVzY3JpcHRvcgorICogQG1xc3RhdDogTVEgZmxhZ3MKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KKyAqLworaW50IF9fYXVkaXRfbXFfZ2V0c2V0YXR0cihtcWRfdCBtcWRlcywgc3RydWN0IG1xX2F0dHIgKm1xc3RhdCkKK3sKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfZ2V0c2V0YXR0ciAqYXg7CisJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OworCisJaWYgKCFhdWRpdF9lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWlmIChsaWtlbHkoIWNvbnRleHQpKQorCQlyZXR1cm4gMDsKKworCWF4ID0ga21hbGxvYyhzaXplb2YoKmF4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFheCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlheC0+bXFkZXMgPSBtcWRlczsKKwlheC0+bXFzdGF0ID0gKm1xc3RhdDsKKworCWF4LT5kLnR5cGUgPSBBVURJVF9NUV9HRVRTRVRBVFRSOworCWF4LT5kLm5leHQgPSBjb250ZXh0LT5hdXg7CisJY29udGV4dC0+YXV4ID0gKHZvaWQgKilheDsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBhdWRpdF9pcGNfb2JqIC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGlwYyBvYmplY3QKICAqIEBpcGNwOiBpcGMgcGVybWlzc2lvbnMKICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KICAqLwotaW50IGF1ZGl0X2lwY19vYmooc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApCitpbnQgX19hdWRpdF9pcGNfb2JqKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKQogewogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9pcGNjdGwgKmF4OwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKIAotCWlmIChsaWtlbHkoIWNvbnRleHQpKQotCQlyZXR1cm4gMDsKLQogCWF4ID0ga21hbGxvYyhzaXplb2YoKmF4KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFheCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjA3LDE0ICsxNTYxLDExIEBACiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzIG9yIE5VTEwgY29udGV4dCBvciA8IDAgb24gZXJyb3IuCiAgKi8KLWludCBhdWRpdF9pcGNfc2V0X3Blcm0odW5zaWduZWQgbG9uZyBxYnl0ZXMsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBtb2RlX3QgbW9kZSwgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApCitpbnQgX19hdWRpdF9pcGNfc2V0X3Blcm0odW5zaWduZWQgbG9uZyBxYnl0ZXMsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfaXBjY3RsICpheDsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CiAKLQlpZiAobGlrZWx5KCFjb250ZXh0KSkKLQkJcmV0dXJuIDA7Ci0KIAlheCA9IGttYWxsb2Moc2l6ZW9mKCpheCksIEdGUF9BVE9NSUMpOwogCWlmICghYXgpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTIyMyw3ICsxNTc0LDYgQEAKIAlheC0+dWlkID0gdWlkOwogCWF4LT5naWQgPSBnaWQ7CiAJYXgtPm1vZGUgPSBtb2RlOwotCXNlbGludXhfZ2V0X2lwY19zaWQoaXBjcCwgJmF4LT5vc2lkKTsKIAogCWF4LT5kLnR5cGUgPSBBVURJVF9JUENfU0VUX1BFUk07CiAJYXgtPmQubmV4dCA9IGNvbnRleHQtPmF1eDsKQEAgLTEyMzEsNiArMTU4MSwzOSBAQAogCXJldHVybiAwOwogfQogCitpbnQgYXVkaXRfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9leGVjdmUgKmF4OworCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIHAsIG5leHQ7CisJdm9pZCAqdG87CisKKwlpZiAobGlrZWx5KCFhdWRpdF9lbmFibGVkIHx8ICFjb250ZXh0KSkKKwkJcmV0dXJuIDA7CisKKwlheCA9IGttYWxsb2Moc2l6ZW9mKCpheCkgKyBQQUdFX1NJWkUgKiBNQVhfQVJHX1BBR0VTIC0gYnBybS0+cCwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWF4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWF4LT5hcmdjID0gYnBybS0+YXJnYzsKKwlheC0+ZW52YyA9IGJwcm0tPmVudmM7CisJZm9yIChwID0gYnBybS0+cCwgdG8gPSBheC0+bWVtOyBwIDwgTUFYX0FSR19QQUdFUypQQUdFX1NJWkU7IHAgPSBuZXh0KSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gYnBybS0+cGFnZVtwIC8gUEFHRV9TSVpFXTsKKwkJdm9pZCAqa2FkZHIgPSBrbWFwKHBhZ2UpOworCQluZXh0ID0gKHAgKyBQQUdFX1NJWkUpICYgfihQQUdFX1NJWkUgLSAxKTsKKwkJbWVtY3B5KHRvLCBrYWRkciArIChwICYgKFBBR0VfU0laRSAtIDEpKSwgbmV4dCAtIHApOworCQl0byArPSBuZXh0IC0gcDsKKwkJa3VubWFwKHBhZ2UpOworCX0KKworCWF4LT5kLnR5cGUgPSBBVURJVF9FWEVDVkU7CisJYXgtPmQubmV4dCA9IGNvbnRleHQtPmF1eDsKKwljb250ZXh0LT5hdXggPSAodm9pZCAqKWF4OworCXJldHVybiAwOworfQorCisKIC8qKgogICogYXVkaXRfc29ja2V0Y2FsbCAtIHJlY29yZCBhdWRpdCBkYXRhIGZvciBzeXNfc29ja2V0Y2FsbAogICogQG5hcmdzOiBudW1iZXIgb2YgYXJncwpAQCAtMTMyNSwxOSArMTcwOCwyMCBAQAogICogSWYgdGhlIGF1ZGl0IHN1YnN5c3RlbSBpcyBiZWluZyB0ZXJtaW5hdGVkLCByZWNvcmQgdGhlIHRhc2sgKHBpZCkKICAqIGFuZCB1aWQgdGhhdCBpcyBkb2luZyB0aGF0LgogICovCi12b2lkIGF1ZGl0X3NpZ25hbF9pbmZvKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKK3ZvaWQgX19hdWRpdF9zaWduYWxfaW5mbyhpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCiB7CiAJZXh0ZXJuIHBpZF90IGF1ZGl0X3NpZ19waWQ7CiAJZXh0ZXJuIHVpZF90IGF1ZGl0X3NpZ191aWQ7CisJZXh0ZXJuIHUzMiBhdWRpdF9zaWdfc2lkOwogCi0JaWYgKHVubGlrZWx5KGF1ZGl0X3BpZCAmJiB0LT50Z2lkID09IGF1ZGl0X3BpZCkpIHsKLQkJaWYgKHNpZyA9PSBTSUdURVJNIHx8IHNpZyA9PSBTSUdIVVApIHsKLQkJCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHggPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwotCQkJYXVkaXRfc2lnX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQkJCWlmIChjdHgpCi0JCQkJYXVkaXRfc2lnX3VpZCA9IGN0eC0+bG9naW51aWQ7Ci0JCQllbHNlCi0JCQkJYXVkaXRfc2lnX3VpZCA9IGN1cnJlbnQtPnVpZDsKLQkJfQorCWlmIChzaWcgPT0gU0lHVEVSTSB8fCBzaWcgPT0gU0lHSFVQIHx8IHNpZyA9PSBTSUdVU1IxKSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwkJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCA9IHRzay0+YXVkaXRfY29udGV4dDsKKwkJYXVkaXRfc2lnX3BpZCA9IHRzay0+cGlkOworCQlpZiAoY3R4KQorCQkJYXVkaXRfc2lnX3VpZCA9IGN0eC0+bG9naW51aWQ7CisJCWVsc2UKKwkJCWF1ZGl0X3NpZ191aWQgPSB0c2stPnVpZDsKKwkJc2VsaW51eF9nZXRfdGFza19zaWQodHNrLCAmYXVkaXRfc2lnX3NpZCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2hydGltZXIuYyBiL2tlcm5lbC9ocnRpbWVyLmMKaW5kZXggMDFmYTJhZS4uMTgzMjQzMCAxMDA2NDQKLS0tIGEva2VybmVsL2hydGltZXIuYworKysgYi9rZXJuZWwvaHJ0aW1lci5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAlpZiAoYmFzZS0+Zmlyc3QgPT0gJnRpbWVyLT5ub2RlKQogCQliYXNlLT5maXJzdCA9IHJiX25leHQoJnRpbWVyLT5ub2RlKTsKIAlyYl9lcmFzZSgmdGltZXItPm5vZGUsICZiYXNlLT5hY3RpdmUpOwotCXRpbWVyLT5ub2RlLnJiX3BhcmVudCA9IEhSVElNRVJfSU5BQ1RJVkU7CisJcmJfc2V0X3BhcmVudCgmdGltZXItPm5vZGUsICZ0aW1lci0+bm9kZSk7CiB9CiAKIC8qCkBAIC01ODIsNyArNTgyLDcgQEAKIAkJY2xvY2tfaWQgPSBDTE9DS19NT05PVE9OSUM7CiAKIAl0aW1lci0+YmFzZSA9ICZiYXNlc1tjbG9ja19pZF07Ci0JdGltZXItPm5vZGUucmJfcGFyZW50ID0gSFJUSU1FUl9JTkFDVElWRTsKKwlyYl9zZXRfcGFyZW50KCZ0aW1lci0+bm9kZSwgJnRpbWVyLT5ub2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pbnRlcm1vZHVsZS5jIGIva2VybmVsL2ludGVybW9kdWxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YjFlNWIuLjAwMDAwMDAKLS0tIGEva2VybmVsL2ludGVybW9kdWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyogRGVwcmVjYXRlZCwgZG8gbm90IHVzZS4gIE1vdmVkIGZyb20gbW9kdWxlLmMgdG8gaGVyZS4gLS1SUiAqLwotCi0vKiBXcml0dGVuIGJ5IEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IE9jdCAyMDAwICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotLyogaW50ZXJfbW9kdWxlIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGF2YWlsYWJsZSwgZXZlbiB3aGVuIHRoZSBrZXJuZWwgaXMKLSAqIGNvbXBpbGVkIHdpdGhvdXQgbW9kdWxlcy4gIENvbnN1bWVycyBvZiBpbnRlcl9tb2R1bGVfeHh4IHJvdXRpbmVzCi0gKiB3aWxsIGFsd2F5cyB3b3JrLCBldmVuIHdoZW4gYm90aCBhcmUgYnVpbHQgaW50byB0aGUga2VybmVsLCB0aGlzCi0gKiBhcHByb2FjaCByZW1vdmVzIGxvdHMgb2YgI2lmZGVmcyBpbiBtYWlubGluZSBjb2RlLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGltZV9saXN0ID0gTElTVF9IRUFEX0lOSVQoaW1lX2xpc3QpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhpbWVfbG9jayk7Ci1zdGF0aWMgaW50IGttYWxsb2NfZmFpbGVkOwotCi1zdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JY29uc3QgY2hhciAqaW1fbmFtZTsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQljb25zdCB2b2lkICp1c2VyZGF0YTsKLX07Ci0KLS8qKgotICogaW50ZXJfbW9kdWxlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBuZXcgc2V0IG9mIGludGVyIG1vZHVsZSBkYXRhLgotICogQGltX25hbWU6IGFuIGFyYml0cmFyeSBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIGRhdGEsIG11c3QgYmUgdW5pcXVlCi0gKiBAb3duZXI6IG1vZHVsZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoZSBkYXRhLCBhbHdheXMgdXNlIFRISVNfTU9EVUxFCi0gKiBAdXNlcmRhdGE6IHBvaW50ZXIgdG8gYXJiaXRyYXJ5IHVzZXJkYXRhIHRvIGJlIHJlZ2lzdGVyZWQKLSAqCi0gKiBEZXNjcmlwdGlvbjogQ2hlY2sgdGhhdCB0aGUgaW1fbmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZWdpc3RlcmVkLAotICogY29tcGxhaW4gaWYgaXQgaGFzLiAgRm9yIG5ldyBkYXRhLCBhZGQgaXQgdG8gdGhlIGludGVyX21vZHVsZV9lbnRyeQotICogbGlzdC4KLSAqLwotdm9pZCBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoY29uc3QgY2hhciAqaW1fbmFtZSwgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IHZvaWQgKnVzZXJkYXRhKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKLQlzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5ICppbWUsICppbWVfbmV3OwotCi0JaWYgKCEoaW1lX25ldyA9IGt6YWxsb2Moc2l6ZW9mKCppbWUpLCBHRlBfS0VSTkVMKSkpIHsKLQkJLyogT3ZlcmxvYWRlZCBrZXJuZWwsIG5vdCBmYXRhbCAqLwotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJBaWVlLCBpbnRlcl9tb2R1bGVfcmVnaXN0ZXI6IGNhbm5vdCBrbWFsbG9jIGVudHJ5IGZvciAnJXMnXG4iLAotCQkJaW1fbmFtZSk7Ci0JCWttYWxsb2NfZmFpbGVkID0gMTsKLQkJcmV0dXJuOwotCX0KLQlpbWVfbmV3LT5pbV9uYW1lID0gaW1fbmFtZTsKLQlpbWVfbmV3LT5vd25lciA9IG93bmVyOwotCWltZV9uZXctPnVzZXJkYXRhID0gdXNlcmRhdGE7Ci0KLQlzcGluX2xvY2soJmltZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKHRtcCwgJmltZV9saXN0KSB7Ci0JCWltZSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsKLQkJaWYgKHN0cmNtcChpbWUtPmltX25hbWUsIGltX25hbWUpID09IDApIHsKLQkJCXNwaW5fdW5sb2NrKCZpbWVfbG9jayk7Ci0JCQlrZnJlZShpbWVfbmV3KTsKLQkJCS8qIFByb2dyYW0gbG9naWMgZXJyb3IsIGZhdGFsICovCi0JCQlwcmludGsoS0VSTl9FUlIgImludGVyX21vZHVsZV9yZWdpc3RlcjogZHVwbGljYXRlIGltX25hbWUgJyVzJyIsIGltX25hbWUpOwotCQkJQlVHKCk7Ci0JCX0KLQl9Ci0JbGlzdF9hZGQoJihpbWVfbmV3LT5saXN0KSwgJmltZV9saXN0KTsKLQlzcGluX3VubG9jaygmaW1lX2xvY2spOwotfQotCi0vKioKLSAqIGludGVyX21vZHVsZV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhIHNldCBvZiBpbnRlciBtb2R1bGUgZGF0YS4KLSAqIEBpbV9uYW1lOiBhbiBhcmJpdHJhcnkgc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkYXRhLCBtdXN0IGJlIHVuaXF1ZQotICoKLSAqIERlc2NyaXB0aW9uOiBDaGVjayB0aGF0IHRoZSBpbV9uYW1lIGhhcyBiZWVuIHJlZ2lzdGVyZWQsIGNvbXBsYWluIGlmCi0gKiBpdCBoYXMgbm90LiAgRm9yIGV4aXN0aW5nIGRhdGEsIHJlbW92ZSBpdCBmcm9tIHRoZQotICogaW50ZXJfbW9kdWxlX2VudHJ5IGxpc3QuCi0gKi8KLXZvaWQgaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqaW1fbmFtZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0Jc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwotCi0Jc3Bpbl9sb2NrKCZpbWVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaCh0bXAsICZpbWVfbGlzdCkgewotCQlpbWUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSwgbGlzdCk7Ci0JCWlmIChzdHJjbXAoaW1lLT5pbV9uYW1lLCBpbV9uYW1lKSA9PSAwKSB7Ci0JCQlsaXN0X2RlbCgmKGltZS0+bGlzdCkpOwotCQkJc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKLQkJCWtmcmVlKGltZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKLQlpZiAoa21hbGxvY19mYWlsZWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXI6IG5vIGVudHJ5IGZvciAnJXMnLCAiCi0JCQkicHJvYmFibHkgY2F1c2VkIGJ5IHByZXZpb3VzIGttYWxsb2MgZmFpbHVyZVxuIiwKLQkJCWltX25hbWUpOwotCQlyZXR1cm47Ci0JfQotCWVsc2UgewotCQkvKiBQcm9ncmFtIGxvZ2ljIGVycm9yLCBmYXRhbCAqLwotCQlwcmludGsoS0VSTl9FUlIgImludGVyX21vZHVsZV91bnJlZ2lzdGVyOiBubyBlbnRyeSBmb3IgJyVzJyIsIGltX25hbWUpOwotCQlCVUcoKTsKLQl9Ci19Ci0KLS8qKgotICogaW50ZXJfbW9kdWxlX2dldCAtIHJldHVybiBhcmJpdHJhcnkgdXNlcmRhdGEgZnJvbSBhbm90aGVyIG1vZHVsZS4KLSAqIEBpbV9uYW1lOiBhbiBhcmJpdHJhcnkgc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkYXRhLCBtdXN0IGJlIHVuaXF1ZQotICoKLSAqIERlc2NyaXB0aW9uOiBJZiB0aGUgaW1fbmFtZSBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCwgcmV0dXJuIE5VTEwuCi0gKiBUcnkgdG8gaW5jcmVtZW50IHRoZSB1c2UgY291bnQgb24gdGhlIG93bmluZyBtb2R1bGUsIGlmIHRoYXQgZmFpbHMKLSAqIHRoZW4gcmV0dXJuIE5VTEwuICBPdGhlcndpc2UgcmV0dXJuIHRoZSB1c2VyZGF0YS4KLSAqLwotc3RhdGljIGNvbnN0IHZvaWQgKmludGVyX21vZHVsZV9nZXQoY29uc3QgY2hhciAqaW1fbmFtZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0Jc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwotCWNvbnN0IHZvaWQgKnJlc3VsdCA9IE5VTEw7Ci0KLQlzcGluX2xvY2soJmltZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKHRtcCwgJmltZV9saXN0KSB7Ci0JCWltZSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsKLQkJaWYgKHN0cmNtcChpbWUtPmltX25hbWUsIGltX25hbWUpID09IDApIHsKLQkJCWlmICh0cnlfbW9kdWxlX2dldChpbWUtPm93bmVyKSkKLQkJCQlyZXN1bHQgPSBpbWUtPnVzZXJkYXRhOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKLQlyZXR1cm4ocmVzdWx0KTsKLX0KLQotLyoqCi0gKiBpbnRlcl9tb2R1bGVfZ2V0X3JlcXVlc3QgLSBpbSBnZXQgd2l0aCBhdXRvbWF0aWMgcmVxdWVzdF9tb2R1bGUuCi0gKiBAaW1fbmFtZTogYW4gYXJiaXRyYXJ5IHN0cmluZyB0byBpZGVudGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKLSAqIEBtb2RuYW1lOiBtb2R1bGUgdGhhdCBpcyBleHBlY3RlZCB0byByZWdpc3RlciBpbV9uYW1lCi0gKgotICogRGVzY3JpcHRpb246IElmIGludGVyX21vZHVsZV9nZXQgZmFpbHMsIGRvIHJlcXVlc3RfbW9kdWxlIHRoZW4gcmV0cnkuCi0gKi8KLWNvbnN0IHZvaWQgKmludGVyX21vZHVsZV9nZXRfcmVxdWVzdChjb25zdCBjaGFyICppbV9uYW1lLCBjb25zdCBjaGFyICptb2RuYW1lKQotewotCWNvbnN0IHZvaWQgKnJlc3VsdCA9IGludGVyX21vZHVsZV9nZXQoaW1fbmFtZSk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJcmVxdWVzdF9tb2R1bGUoIiVzIiwgbW9kbmFtZSk7Ci0JCXJlc3VsdCA9IGludGVyX21vZHVsZV9nZXQoaW1fbmFtZSk7Ci0JfQotCXJldHVybihyZXN1bHQpOwotfQotCi0vKioKLSAqIGludGVyX21vZHVsZV9wdXQgLSByZWxlYXNlIHVzZSBvZiBkYXRhIGZyb20gYW5vdGhlciBtb2R1bGUuCi0gKiBAaW1fbmFtZTogYW4gYXJiaXRyYXJ5IHN0cmluZyB0byBpZGVudGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKLSAqCi0gKiBEZXNjcmlwdGlvbjogSWYgdGhlIGltX25hbWUgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQsIGNvbXBsYWluLAotICogb3RoZXJ3aXNlIGRlY3JlbWVudCB0aGUgdXNlIGNvdW50IG9uIHRoZSBvd25pbmcgbW9kdWxlLgotICovCi12b2lkIGludGVyX21vZHVsZV9wdXQoY29uc3QgY2hhciAqaW1fbmFtZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0Jc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwotCi0Jc3Bpbl9sb2NrKCZpbWVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaCh0bXAsICZpbWVfbGlzdCkgewotCQlpbWUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSwgbGlzdCk7Ci0JCWlmIChzdHJjbXAoaW1lLT5pbV9uYW1lLCBpbV9uYW1lKSA9PSAwKSB7Ci0JCQlpZiAoaW1lLT5vd25lcikKLQkJCQltb2R1bGVfcHV0KGltZS0+b3duZXIpOwotCQkJc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmaW1lX2xvY2spOwotCXByaW50ayhLRVJOX0VSUiAiaW50ZXJfbW9kdWxlX3B1dDogbm8gZW50cnkgZm9yICclcyciLCBpbV9uYW1lKTsKLQlCVUcoKTsKLX0KLQotRVhQT1JUX1NZTUJPTChpbnRlcl9tb2R1bGVfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChpbnRlcl9tb2R1bGVfdW5yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKGludGVyX21vZHVsZV9nZXRfcmVxdWVzdCk7Ci1FWFBPUlRfU1lNQk9MKGludGVyX21vZHVsZV9wdXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCBlNWY4YWVhLi4xYjNjOTIxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0yMywxMiArMjMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9zaWdpbmZvLmg+CisjaW5jbHVkZSAiYXVkaXQuaCIJLyogYXVkaXRfc2lnbmFsX2luZm8oKSAqLwogCiAvKgogICogU0xBQiBjYWNoZXMgZm9yIHNpZ25hbCBiaXRzLgpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IGU4MjcyNmYuLjBkNjU2ZTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogI2lmZGVmIENPTkZJR19VTklYOThfUFRZUwogZXh0ZXJuIGN0bF90YWJsZSBwdHlfdGFibGVbXTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19JTk9USUZZCisjaWZkZWYgQ09ORklHX0lOT1RJRllfVVNFUgogZXh0ZXJuIGN0bF90YWJsZSBpbm90aWZ5X3RhYmxlW107CiAjZW5kaWYKIApAQCAtMTAyOCw3ICsxMDI4LDcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAogCX0sCi0jaWZkZWYgQ09ORklHX0lOT1RJRlkKKyNpZmRlZiBDT05GSUdfSU5PVElGWV9VU0VSCiAJewogCQkuY3RsX25hbWUJPSBGU19JTk9USUZZLAogCQkucHJvY25hbWUJPSAiaW5vdGlmeSIsCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlci5jIGIva2VybmVsL3VzZXIuYwppbmRleCAyMTE2NjQyLi40YjFlYjc0IDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlci5jCisrKyBiL2tlcm5lbC91c2VyLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCQlhdG9taWNfc2V0KCZuZXctPnByb2Nlc3NlcywgMCk7CiAJCWF0b21pY19zZXQoJm5ldy0+ZmlsZXMsIDApOwogCQlhdG9taWNfc2V0KCZuZXctPnNpZ3BlbmRpbmcsIDApOwotI2lmZGVmIENPTkZJR19JTk9USUZZCisjaWZkZWYgQ09ORklHX0lOT1RJRllfVVNFUgogCQlhdG9taWNfc2V0KCZuZXctPmlub3RpZnlfd2F0Y2hlcywgMCk7CiAJCWF0b21pY19zZXQoJm5ldy0+aW5vdGlmeV9kZXZzLCAwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3JidHJlZS5jIGIvbGliL3JidHJlZS5jCmluZGV4IDE0Yjc5MWEuLjFlNTViYTEgMTAwNjQ0Ci0tLSBhL2xpYi9yYnRyZWUuYworKysgYi9saWIvcmJ0cmVlLmMKQEAgLTI2LDYwICsyNiw2NiBAQAogc3RhdGljIHZvaWQgX19yYl9yb3RhdGVfbGVmdChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiB7CiAJc3RydWN0IHJiX25vZGUgKnJpZ2h0ID0gbm9kZS0+cmJfcmlnaHQ7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKIAogCWlmICgobm9kZS0+cmJfcmlnaHQgPSByaWdodC0+cmJfbGVmdCkpCi0JCXJpZ2h0LT5yYl9sZWZ0LT5yYl9wYXJlbnQgPSBub2RlOworCQlyYl9zZXRfcGFyZW50KHJpZ2h0LT5yYl9sZWZ0LCBub2RlKTsKIAlyaWdodC0+cmJfbGVmdCA9IG5vZGU7CiAKLQlpZiAoKHJpZ2h0LT5yYl9wYXJlbnQgPSBub2RlLT5yYl9wYXJlbnQpKQorCXJiX3NldF9wYXJlbnQocmlnaHQsIHBhcmVudCk7CisKKwlpZiAocGFyZW50KQogCXsKLQkJaWYgKG5vZGUgPT0gbm9kZS0+cmJfcGFyZW50LT5yYl9sZWZ0KQotCQkJbm9kZS0+cmJfcGFyZW50LT5yYl9sZWZ0ID0gcmlnaHQ7CisJCWlmIChub2RlID09IHBhcmVudC0+cmJfbGVmdCkKKwkJCXBhcmVudC0+cmJfbGVmdCA9IHJpZ2h0OwogCQllbHNlCi0JCQlub2RlLT5yYl9wYXJlbnQtPnJiX3JpZ2h0ID0gcmlnaHQ7CisJCQlwYXJlbnQtPnJiX3JpZ2h0ID0gcmlnaHQ7CiAJfQogCWVsc2UKIAkJcm9vdC0+cmJfbm9kZSA9IHJpZ2h0OwotCW5vZGUtPnJiX3BhcmVudCA9IHJpZ2h0OworCXJiX3NldF9wYXJlbnQobm9kZSwgcmlnaHQpOwogfQogCiBzdGF0aWMgdm9pZCBfX3JiX3JvdGF0ZV9yaWdodChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiB7CiAJc3RydWN0IHJiX25vZGUgKmxlZnQgPSBub2RlLT5yYl9sZWZ0OworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CiAKIAlpZiAoKG5vZGUtPnJiX2xlZnQgPSBsZWZ0LT5yYl9yaWdodCkpCi0JCWxlZnQtPnJiX3JpZ2h0LT5yYl9wYXJlbnQgPSBub2RlOworCQlyYl9zZXRfcGFyZW50KGxlZnQtPnJiX3JpZ2h0LCBub2RlKTsKIAlsZWZ0LT5yYl9yaWdodCA9IG5vZGU7CiAKLQlpZiAoKGxlZnQtPnJiX3BhcmVudCA9IG5vZGUtPnJiX3BhcmVudCkpCisJcmJfc2V0X3BhcmVudChsZWZ0LCBwYXJlbnQpOworCisJaWYgKHBhcmVudCkKIAl7Ci0JCWlmIChub2RlID09IG5vZGUtPnJiX3BhcmVudC0+cmJfcmlnaHQpCi0JCQlub2RlLT5yYl9wYXJlbnQtPnJiX3JpZ2h0ID0gbGVmdDsKKwkJaWYgKG5vZGUgPT0gcGFyZW50LT5yYl9yaWdodCkKKwkJCXBhcmVudC0+cmJfcmlnaHQgPSBsZWZ0OwogCQllbHNlCi0JCQlub2RlLT5yYl9wYXJlbnQtPnJiX2xlZnQgPSBsZWZ0OworCQkJcGFyZW50LT5yYl9sZWZ0ID0gbGVmdDsKIAl9CiAJZWxzZQogCQlyb290LT5yYl9ub2RlID0gbGVmdDsKLQlub2RlLT5yYl9wYXJlbnQgPSBsZWZ0OworCXJiX3NldF9wYXJlbnQobm9kZSwgbGVmdCk7CiB9CiAKIHZvaWQgcmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50LCAqZ3BhcmVudDsKIAotCXdoaWxlICgocGFyZW50ID0gbm9kZS0+cmJfcGFyZW50KSAmJiBwYXJlbnQtPnJiX2NvbG9yID09IFJCX1JFRCkKKwl3aGlsZSAoKHBhcmVudCA9IHJiX3BhcmVudChub2RlKSkgJiYgcmJfaXNfcmVkKHBhcmVudCkpCiAJewotCQlncGFyZW50ID0gcGFyZW50LT5yYl9wYXJlbnQ7CisJCWdwYXJlbnQgPSByYl9wYXJlbnQocGFyZW50KTsKIAogCQlpZiAocGFyZW50ID09IGdwYXJlbnQtPnJiX2xlZnQpCiAJCXsKIAkJCXsKIAkJCQlyZWdpc3RlciBzdHJ1Y3QgcmJfbm9kZSAqdW5jbGUgPSBncGFyZW50LT5yYl9yaWdodDsKLQkJCQlpZiAodW5jbGUgJiYgdW5jbGUtPnJiX2NvbG9yID09IFJCX1JFRCkKKwkJCQlpZiAodW5jbGUgJiYgcmJfaXNfcmVkKHVuY2xlKSkKIAkJCQl7Ci0JCQkJCXVuY2xlLT5yYl9jb2xvciA9IFJCX0JMQUNLOwotCQkJCQlwYXJlbnQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQkJCWdwYXJlbnQtPnJiX2NvbG9yID0gUkJfUkVEOworCQkJCQlyYl9zZXRfYmxhY2sodW5jbGUpOworCQkJCQlyYl9zZXRfYmxhY2socGFyZW50KTsKKwkJCQkJcmJfc2V0X3JlZChncGFyZW50KTsKIAkJCQkJbm9kZSA9IGdwYXJlbnQ7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KQEAgLTk0LDE3ICsxMDAsMTcgQEAKIAkJCQlub2RlID0gdG1wOwogCQkJfQogCi0JCQlwYXJlbnQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQlncGFyZW50LT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCXJiX3NldF9ibGFjayhwYXJlbnQpOworCQkJcmJfc2V0X3JlZChncGFyZW50KTsKIAkJCV9fcmJfcm90YXRlX3JpZ2h0KGdwYXJlbnQsIHJvb3QpOwogCQl9IGVsc2UgewogCQkJewogCQkJCXJlZ2lzdGVyIHN0cnVjdCByYl9ub2RlICp1bmNsZSA9IGdwYXJlbnQtPnJiX2xlZnQ7Ci0JCQkJaWYgKHVuY2xlICYmIHVuY2xlLT5yYl9jb2xvciA9PSBSQl9SRUQpCisJCQkJaWYgKHVuY2xlICYmIHJiX2lzX3JlZCh1bmNsZSkpCiAJCQkJewotCQkJCQl1bmNsZS0+cmJfY29sb3IgPSBSQl9CTEFDSzsKLQkJCQkJcGFyZW50LT5yYl9jb2xvciA9IFJCX0JMQUNLOwotCQkJCQlncGFyZW50LT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCQkJcmJfc2V0X2JsYWNrKHVuY2xlKTsKKwkJCQkJcmJfc2V0X2JsYWNrKHBhcmVudCk7CisJCQkJCXJiX3NldF9yZWQoZ3BhcmVudCk7CiAJCQkJCW5vZGUgPSBncGFyZW50OwogCQkJCQljb250aW51ZTsKIAkJCQl9CkBAIC0xMTksMTMgKzEyNSwxMyBAQAogCQkJCW5vZGUgPSB0bXA7CiAJCQl9CiAKLQkJCXBhcmVudC0+cmJfY29sb3IgPSBSQl9CTEFDSzsKLQkJCWdwYXJlbnQtPnJiX2NvbG9yID0gUkJfUkVEOworCQkJcmJfc2V0X2JsYWNrKHBhcmVudCk7CisJCQlyYl9zZXRfcmVkKGdwYXJlbnQpOwogCQkJX19yYl9yb3RhdGVfbGVmdChncGFyZW50LCByb290KTsKIAkJfQogCX0KIAotCXJvb3QtPnJiX25vZGUtPnJiX2NvbG9yID0gUkJfQkxBQ0s7CisJcmJfc2V0X2JsYWNrKHJvb3QtPnJiX25vZGUpOwogfQogRVhQT1JUX1NZTUJPTChyYl9pbnNlcnRfY29sb3IpOwogCkBAIC0xMzQsNDMgKzE0MCw0MCBAQAogewogCXN0cnVjdCByYl9ub2RlICpvdGhlcjsKIAotCXdoaWxlICgoIW5vZGUgfHwgbm9kZS0+cmJfY29sb3IgPT0gUkJfQkxBQ0spICYmIG5vZGUgIT0gcm9vdC0+cmJfbm9kZSkKKwl3aGlsZSAoKCFub2RlIHx8IHJiX2lzX2JsYWNrKG5vZGUpKSAmJiBub2RlICE9IHJvb3QtPnJiX25vZGUpCiAJewogCQlpZiAocGFyZW50LT5yYl9sZWZ0ID09IG5vZGUpCiAJCXsKIAkJCW90aGVyID0gcGFyZW50LT5yYl9yaWdodDsKLQkJCWlmIChvdGhlci0+cmJfY29sb3IgPT0gUkJfUkVEKQorCQkJaWYgKHJiX2lzX3JlZChvdGhlcikpCiAJCQl7Ci0JCQkJb3RoZXItPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQkJcGFyZW50LT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCQlyYl9zZXRfYmxhY2sob3RoZXIpOworCQkJCXJiX3NldF9yZWQocGFyZW50KTsKIAkJCQlfX3JiX3JvdGF0ZV9sZWZ0KHBhcmVudCwgcm9vdCk7CiAJCQkJb3RoZXIgPSBwYXJlbnQtPnJiX3JpZ2h0OwogCQkJfQotCQkJaWYgKCghb3RoZXItPnJiX2xlZnQgfHwKLQkJCSAgICAgb3RoZXItPnJiX2xlZnQtPnJiX2NvbG9yID09IFJCX0JMQUNLKQotCQkJICAgICYmICghb3RoZXItPnJiX3JpZ2h0IHx8Ci0JCQkJb3RoZXItPnJiX3JpZ2h0LT5yYl9jb2xvciA9PSBSQl9CTEFDSykpCisJCQlpZiAoKCFvdGhlci0+cmJfbGVmdCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfbGVmdCkpICYmCisJCQkgICAgKCFvdGhlci0+cmJfcmlnaHQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX3JpZ2h0KSkpCiAJCQl7Ci0JCQkJb3RoZXItPnJiX2NvbG9yID0gUkJfUkVEOworCQkJCXJiX3NldF9yZWQob3RoZXIpOwogCQkJCW5vZGUgPSBwYXJlbnQ7Ci0JCQkJcGFyZW50ID0gbm9kZS0+cmJfcGFyZW50OworCQkJCXBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlpZiAoIW90aGVyLT5yYl9yaWdodCB8fAotCQkJCSAgICBvdGhlci0+cmJfcmlnaHQtPnJiX2NvbG9yID09IFJCX0JMQUNLKQorCQkJCWlmICghb3RoZXItPnJiX3JpZ2h0IHx8IHJiX2lzX2JsYWNrKG90aGVyLT5yYl9yaWdodCkpCiAJCQkJewotCQkJCQlyZWdpc3RlciBzdHJ1Y3QgcmJfbm9kZSAqb19sZWZ0OworCQkJCQlzdHJ1Y3QgcmJfbm9kZSAqb19sZWZ0OwogCQkJCQlpZiAoKG9fbGVmdCA9IG90aGVyLT5yYl9sZWZ0KSkKLQkJCQkJCW9fbGVmdC0+cmJfY29sb3IgPSBSQl9CTEFDSzsKLQkJCQkJb3RoZXItPnJiX2NvbG9yID0gUkJfUkVEOworCQkJCQkJcmJfc2V0X2JsYWNrKG9fbGVmdCk7CisJCQkJCXJiX3NldF9yZWQob3RoZXIpOwogCQkJCQlfX3JiX3JvdGF0ZV9yaWdodChvdGhlciwgcm9vdCk7CiAJCQkJCW90aGVyID0gcGFyZW50LT5yYl9yaWdodDsKIAkJCQl9Ci0JCQkJb3RoZXItPnJiX2NvbG9yID0gcGFyZW50LT5yYl9jb2xvcjsKLQkJCQlwYXJlbnQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7CisJCQkJcmJfc2V0X2NvbG9yKG90aGVyLCByYl9jb2xvcihwYXJlbnQpKTsKKwkJCQlyYl9zZXRfYmxhY2socGFyZW50KTsKIAkJCQlpZiAob3RoZXItPnJiX3JpZ2h0KQotCQkJCQlvdGhlci0+cmJfcmlnaHQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7CisJCQkJCXJiX3NldF9ibGFjayhvdGhlci0+cmJfcmlnaHQpOwogCQkJCV9fcmJfcm90YXRlX2xlZnQocGFyZW50LCByb290KTsKIAkJCQlub2RlID0gcm9vdC0+cmJfbm9kZTsKIAkJCQlicmVhazsKQEAgLTE3OSwzOCArMTgyLDM1IEBACiAJCWVsc2UKIAkJewogCQkJb3RoZXIgPSBwYXJlbnQtPnJiX2xlZnQ7Ci0JCQlpZiAob3RoZXItPnJiX2NvbG9yID09IFJCX1JFRCkKKwkJCWlmIChyYl9pc19yZWQob3RoZXIpKQogCQkJewotCQkJCW90aGVyLT5yYl9jb2xvciA9IFJCX0JMQUNLOwotCQkJCXBhcmVudC0+cmJfY29sb3IgPSBSQl9SRUQ7CisJCQkJcmJfc2V0X2JsYWNrKG90aGVyKTsKKwkJCQlyYl9zZXRfcmVkKHBhcmVudCk7CiAJCQkJX19yYl9yb3RhdGVfcmlnaHQocGFyZW50LCByb290KTsKIAkJCQlvdGhlciA9IHBhcmVudC0+cmJfbGVmdDsKIAkJCX0KLQkJCWlmICgoIW90aGVyLT5yYl9sZWZ0IHx8Ci0JCQkgICAgIG90aGVyLT5yYl9sZWZ0LT5yYl9jb2xvciA9PSBSQl9CTEFDSykKLQkJCSAgICAmJiAoIW90aGVyLT5yYl9yaWdodCB8fAotCQkJCW90aGVyLT5yYl9yaWdodC0+cmJfY29sb3IgPT0gUkJfQkxBQ0spKQorCQkJaWYgKCghb3RoZXItPnJiX2xlZnQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX2xlZnQpKSAmJgorCQkJICAgICghb3RoZXItPnJiX3JpZ2h0IHx8IHJiX2lzX2JsYWNrKG90aGVyLT5yYl9yaWdodCkpKQogCQkJewotCQkJCW90aGVyLT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCQlyYl9zZXRfcmVkKG90aGVyKTsKIAkJCQlub2RlID0gcGFyZW50OwotCQkJCXBhcmVudCA9IG5vZGUtPnJiX3BhcmVudDsKKwkJCQlwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJaWYgKCFvdGhlci0+cmJfbGVmdCB8fAotCQkJCSAgICBvdGhlci0+cmJfbGVmdC0+cmJfY29sb3IgPT0gUkJfQkxBQ0spCisJCQkJaWYgKCFvdGhlci0+cmJfbGVmdCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfbGVmdCkpCiAJCQkJewogCQkJCQlyZWdpc3RlciBzdHJ1Y3QgcmJfbm9kZSAqb19yaWdodDsKIAkJCQkJaWYgKChvX3JpZ2h0ID0gb3RoZXItPnJiX3JpZ2h0KSkKLQkJCQkJCW9fcmlnaHQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQkJCW90aGVyLT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCQkJCXJiX3NldF9ibGFjayhvX3JpZ2h0KTsKKwkJCQkJcmJfc2V0X3JlZChvdGhlcik7CiAJCQkJCV9fcmJfcm90YXRlX2xlZnQob3RoZXIsIHJvb3QpOwogCQkJCQlvdGhlciA9IHBhcmVudC0+cmJfbGVmdDsKIAkJCQl9Ci0JCQkJb3RoZXItPnJiX2NvbG9yID0gcGFyZW50LT5yYl9jb2xvcjsKLQkJCQlwYXJlbnQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7CisJCQkJcmJfc2V0X2NvbG9yKG90aGVyLCByYl9jb2xvcihwYXJlbnQpKTsKKwkJCQlyYl9zZXRfYmxhY2socGFyZW50KTsKIAkJCQlpZiAob3RoZXItPnJiX2xlZnQpCi0JCQkJCW90aGVyLT5yYl9sZWZ0LT5yYl9jb2xvciA9IFJCX0JMQUNLOworCQkJCQlyYl9zZXRfYmxhY2sob3RoZXItPnJiX2xlZnQpOwogCQkJCV9fcmJfcm90YXRlX3JpZ2h0KHBhcmVudCwgcm9vdCk7CiAJCQkJbm9kZSA9IHJvb3QtPnJiX25vZGU7CiAJCQkJYnJlYWs7CkBAIC0yMTgsNyArMjE4LDcgQEAKIAkJfQogCX0KIAlpZiAobm9kZSkKLQkJbm9kZS0+cmJfY29sb3IgPSBSQl9CTEFDSzsKKwkJcmJfc2V0X2JsYWNrKG5vZGUpOwogfQogCiB2b2lkIHJiX2VyYXNlKHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKQEAgLTIzOCw0OCArMjM4LDQxIEBACiAJCXdoaWxlICgobGVmdCA9IG5vZGUtPnJiX2xlZnQpICE9IE5VTEwpCiAJCQlub2RlID0gbGVmdDsKIAkJY2hpbGQgPSBub2RlLT5yYl9yaWdodDsKLQkJcGFyZW50ID0gbm9kZS0+cmJfcGFyZW50OwotCQljb2xvciA9IG5vZGUtPnJiX2NvbG9yOworCQlwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CisJCWNvbG9yID0gcmJfY29sb3Iobm9kZSk7CiAKIAkJaWYgKGNoaWxkKQotCQkJY2hpbGQtPnJiX3BhcmVudCA9IHBhcmVudDsKLQkJaWYgKHBhcmVudCkKLQkJewotCQkJaWYgKHBhcmVudC0+cmJfbGVmdCA9PSBub2RlKQotCQkJCXBhcmVudC0+cmJfbGVmdCA9IGNoaWxkOwotCQkJZWxzZQotCQkJCXBhcmVudC0+cmJfcmlnaHQgPSBjaGlsZDsKLQkJfQotCQllbHNlCi0JCQlyb290LT5yYl9ub2RlID0gY2hpbGQ7Ci0KLQkJaWYgKG5vZGUtPnJiX3BhcmVudCA9PSBvbGQpCisJCQlyYl9zZXRfcGFyZW50KGNoaWxkLCBwYXJlbnQpOworCQlpZiAocGFyZW50ID09IG9sZCkgeworCQkJcGFyZW50LT5yYl9yaWdodCA9IGNoaWxkOwogCQkJcGFyZW50ID0gbm9kZTsKLQkJbm9kZS0+cmJfcGFyZW50ID0gb2xkLT5yYl9wYXJlbnQ7Ci0JCW5vZGUtPnJiX2NvbG9yID0gb2xkLT5yYl9jb2xvcjsKKwkJfSBlbHNlCisJCQlwYXJlbnQtPnJiX2xlZnQgPSBjaGlsZDsKKworCQlub2RlLT5yYl9wYXJlbnRfY29sb3IgPSBvbGQtPnJiX3BhcmVudF9jb2xvcjsKIAkJbm9kZS0+cmJfcmlnaHQgPSBvbGQtPnJiX3JpZ2h0OwogCQlub2RlLT5yYl9sZWZ0ID0gb2xkLT5yYl9sZWZ0OwogCi0JCWlmIChvbGQtPnJiX3BhcmVudCkKKwkJaWYgKHJiX3BhcmVudChvbGQpKQogCQl7Ci0JCQlpZiAob2xkLT5yYl9wYXJlbnQtPnJiX2xlZnQgPT0gb2xkKQotCQkJCW9sZC0+cmJfcGFyZW50LT5yYl9sZWZ0ID0gbm9kZTsKKwkJCWlmIChyYl9wYXJlbnQob2xkKS0+cmJfbGVmdCA9PSBvbGQpCisJCQkJcmJfcGFyZW50KG9sZCktPnJiX2xlZnQgPSBub2RlOwogCQkJZWxzZQotCQkJCW9sZC0+cmJfcGFyZW50LT5yYl9yaWdodCA9IG5vZGU7CisJCQkJcmJfcGFyZW50KG9sZCktPnJiX3JpZ2h0ID0gbm9kZTsKIAkJfSBlbHNlCiAJCQlyb290LT5yYl9ub2RlID0gbm9kZTsKIAotCQlvbGQtPnJiX2xlZnQtPnJiX3BhcmVudCA9IG5vZGU7CisJCXJiX3NldF9wYXJlbnQob2xkLT5yYl9sZWZ0LCBub2RlKTsKIAkJaWYgKG9sZC0+cmJfcmlnaHQpCi0JCQlvbGQtPnJiX3JpZ2h0LT5yYl9wYXJlbnQgPSBub2RlOworCQkJcmJfc2V0X3BhcmVudChvbGQtPnJiX3JpZ2h0LCBub2RlKTsKIAkJZ290byBjb2xvcjsKIAl9CiAKLQlwYXJlbnQgPSBub2RlLT5yYl9wYXJlbnQ7Ci0JY29sb3IgPSBub2RlLT5yYl9jb2xvcjsKKwlwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CisJY29sb3IgPSByYl9jb2xvcihub2RlKTsKIAogCWlmIChjaGlsZCkKLQkJY2hpbGQtPnJiX3BhcmVudCA9IHBhcmVudDsKKwkJcmJfc2V0X3BhcmVudChjaGlsZCwgcGFyZW50KTsKIAlpZiAocGFyZW50KQogCXsKIAkJaWYgKHBhcmVudC0+cmJfbGVmdCA9PSBub2RlKQpAQCAtMzI3LDYgKzMyMCw4IEBACiAKIHN0cnVjdCByYl9ub2RlICpyYl9uZXh0KHN0cnVjdCByYl9ub2RlICpub2RlKQogeworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CisKIAkvKiBJZiB3ZSBoYXZlIGEgcmlnaHQtaGFuZCBjaGlsZCwgZ28gZG93biBhbmQgdGhlbiBsZWZ0IGFzIGZhcgogCSAgIGFzIHdlIGNhbi4gKi8KIAlpZiAobm9kZS0+cmJfcmlnaHQpIHsKQEAgLTM0MiwxNSArMzM3LDE3IEBACiAJICAgYW5jZXN0b3IgaXMgYSByaWdodC1oYW5kIGNoaWxkIG9mIGl0cyBwYXJlbnQsIGtlZXAgZ29pbmcKIAkgICB1cC4gRmlyc3QgdGltZSBpdCdzIGEgbGVmdC1oYW5kIGNoaWxkIG9mIGl0cyBwYXJlbnQsIHNhaWQKIAkgICBwYXJlbnQgaXMgb3VyICduZXh0JyBub2RlLiAqLwotCXdoaWxlIChub2RlLT5yYl9wYXJlbnQgJiYgbm9kZSA9PSBub2RlLT5yYl9wYXJlbnQtPnJiX3JpZ2h0KQotCQlub2RlID0gbm9kZS0+cmJfcGFyZW50OworCXdoaWxlICgocGFyZW50ID0gcmJfcGFyZW50KG5vZGUpKSAmJiBub2RlID09IHBhcmVudC0+cmJfcmlnaHQpCisJCW5vZGUgPSBwYXJlbnQ7CiAKLQlyZXR1cm4gbm9kZS0+cmJfcGFyZW50OworCXJldHVybiBwYXJlbnQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJiX25leHQpOwogCiBzdHJ1Y3QgcmJfbm9kZSAqcmJfcHJldihzdHJ1Y3QgcmJfbm9kZSAqbm9kZSkKIHsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50OworCiAJLyogSWYgd2UgaGF2ZSBhIGxlZnQtaGFuZCBjaGlsZCwgZ28gZG93biBhbmQgdGhlbiByaWdodCBhcyBmYXIKIAkgICBhcyB3ZSBjYW4uICovCiAJaWYgKG5vZGUtPnJiX2xlZnQpIHsKQEAgLTM2MiwxNyArMzU5LDE3IEBACiAKIAkvKiBObyBsZWZ0LWhhbmQgY2hpbGRyZW4uIEdvIHVwIHRpbGwgd2UgZmluZCBhbiBhbmNlc3RvciB3aGljaAogCSAgIGlzIGEgcmlnaHQtaGFuZCBjaGlsZCBvZiBpdHMgcGFyZW50ICovCi0Jd2hpbGUgKG5vZGUtPnJiX3BhcmVudCAmJiBub2RlID09IG5vZGUtPnJiX3BhcmVudC0+cmJfbGVmdCkKLQkJbm9kZSA9IG5vZGUtPnJiX3BhcmVudDsKKwl3aGlsZSAoKHBhcmVudCA9IHJiX3BhcmVudChub2RlKSkgJiYgbm9kZSA9PSBwYXJlbnQtPnJiX2xlZnQpCisJCW5vZGUgPSBwYXJlbnQ7CiAKLQlyZXR1cm4gbm9kZS0+cmJfcGFyZW50OworCXJldHVybiBwYXJlbnQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJiX3ByZXYpOwogCiB2b2lkIHJiX3JlcGxhY2Vfbm9kZShzdHJ1Y3QgcmJfbm9kZSAqdmljdGltLCBzdHJ1Y3QgcmJfbm9kZSAqbmV3LAogCQkgICAgIHN0cnVjdCByYl9yb290ICpyb290KQogewotCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSB2aWN0aW0tPnJiX3BhcmVudDsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gcmJfcGFyZW50KHZpY3RpbSk7CiAKIAkvKiBTZXQgdGhlIHN1cnJvdW5kaW5nIG5vZGVzIHRvIHBvaW50IHRvIHRoZSByZXBsYWNlbWVudCAqLwogCWlmIChwYXJlbnQpIHsKQEAgLTM4NCw5ICszODEsOSBAQAogCQlyb290LT5yYl9ub2RlID0gbmV3OwogCX0KIAlpZiAodmljdGltLT5yYl9sZWZ0KQotCQl2aWN0aW0tPnJiX2xlZnQtPnJiX3BhcmVudCA9IG5ldzsKKwkJcmJfc2V0X3BhcmVudCh2aWN0aW0tPnJiX2xlZnQsIG5ldyk7CiAJaWYgKHZpY3RpbS0+cmJfcmlnaHQpCi0JCXZpY3RpbS0+cmJfcmlnaHQtPnJiX3BhcmVudCA9IG5ldzsKKwkJcmJfc2V0X3BhcmVudCh2aWN0aW0tPnJiX3JpZ2h0LCBuZXcpOwogCiAJLyogQ29weSB0aGUgcG9pbnRlcnMvY29sb3VyIGZyb20gdGhlIHZpY3RpbSB0byB0aGUgcmVwbGFjZW1lbnQgKi8KIAkqbmV3ID0gKnZpY3RpbTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jCmluZGV4IGI2MDYxZmEuLjNmZGM0OWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuYwpAQCAtMjExLDEyICsyMTEsMTIgQEAKIAkJCWtleS0+c2VyaWFsID0gMjsKIAkJa2V5X3NlcmlhbF9uZXh0ID0ga2V5LT5zZXJpYWwgKyAxOwogCi0JCWlmICghcGFyZW50LT5yYl9wYXJlbnQpCisJCWlmICghcmJfcGFyZW50KHBhcmVudCkpCiAJCQlwID0gJmtleV9zZXJpYWxfdHJlZS5yYl9ub2RlOwotCQllbHNlIGlmIChwYXJlbnQtPnJiX3BhcmVudC0+cmJfbGVmdCA9PSBwYXJlbnQpCi0JCQlwID0gJnBhcmVudC0+cmJfcGFyZW50LT5yYl9sZWZ0OworCQllbHNlIGlmIChyYl9wYXJlbnQocGFyZW50KS0+cmJfbGVmdCA9PSBwYXJlbnQpCisJCQlwID0gJihyYl9wYXJlbnQocGFyZW50KS0+cmJfbGVmdCk7CiAJCWVsc2UKLQkJCXAgPSAmcGFyZW50LT5yYl9wYXJlbnQtPnJiX3JpZ2h0OworCQkJcCA9ICYocmJfcGFyZW50KHBhcmVudCktPnJiX3JpZ2h0KTsKIAogCQlwYXJlbnQgPSByYl9uZXh0KHBhcmVudCk7CiAJCWlmICghcGFyZW50KQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IGMyODRkYmIuLmU5NTQ4YmMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTE5ODAsNyArMTk4MCw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVVESVRfU0VfU0VOOgogCWNhc2UgQVVESVRfU0VfQ0xSOgotCQlsZXZlbCA9IChvcCA9PSBBVURJVF9TRV9TRU4gPworCQlsZXZlbCA9IChmaWVsZCA9PSBBVURJVF9TRV9TRU4gPwogCQkgICAgICAgICAmY3R4dC0+cmFuZ2UubGV2ZWxbMF0gOiAmY3R4dC0+cmFuZ2UubGV2ZWxbMV0pOwogCQlzd2l0Y2ggKG9wKSB7CiAJCWNhc2UgQVVESVRfRVFVQUw6Cg==